springmvc不同方式控制器實現與參數傳遞


 

添加spring相關包,筆者用最新包3.2.2,可以去官方下載最新包http://www.springsource.org/spring-community-download

模塊說明,注釋在代碼中,方便理解

實例一:使用實現接口的方法實現控制器

web.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <servlet>
     <servlet-name>hello</servlet-name> <!-- 此處用的是hello,所以同目錄下的想xml文件名應該為hello-servlet.xml -->
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 </servlet>
 <servlet-mapping>
     <servlet-name>hello</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>
 
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

創建關聯的hell-servlet.xml(/WEB-INF/目錄下創建)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
       
       <!-- 配置控制器,請求路徑/welcome.html,clas指定處理類 -->
       <bean name="/welcome.html" class="com.springmvc.controller.WelcomeController" />
       
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
               <!-- 定義視圖前綴格式 -->
               <property name="prefix" value="/WEB-INF/jsp/" />
               <!-- 定義視圖后綴格式 -->
               <property name="suffix" value=".jsp"/>
       </bean>
</beans>

編寫控制器類WelcomeController.java

package com.springmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

/**
 *
 *  WelcomeController.java   
 *
 *  @version : 1.1
 *  
 *  @author  : 蘇若年    <a href="mailto:DennisIT@163.com">發送郵件</a>
 *    
 *  @since   : 1.0        創建時間:    2013-4-12  下午10:52:16
 *     
 *  TODO     : 
 *
 */
public class WelcomeController extends AbstractController{

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        System.out.println("com.springmvc.controller.WelcomeController");
        //返回視圖
        return new ModelAndView("welcome");
    }
    
}

訪問路徑:http://localhost:8080/項目名稱/welcome.html

實例二:使用Annotation實現控制器

web.xml內容同上

View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
        <servlet-name>user</servlet-name> <!-- 此處用的是user,所以同目錄下的想xml文件名應該為user-servlet.xml -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>user</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

user-servlet.xml中的內容

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!--
        指定使用注解方式配置,配置自動掃描的包名,
        base-package指定自己應用中控制器所在的包目錄
        <context:component-scan/> 掃描指定的包中的類上的注解,常用的注解有: 
        @Controller 聲明Action組件
        @Service 聲明Service組件
        @Service("myMovieLister") 
        @Repository 聲明Dao組件
        @Component 泛指組件, 當不好歸類時. 
        @RequestMapping("/menu") 請求映射 
        @Resource用於注入,( j2ee提供的 ) 默認按名稱裝配,
        @Resource(name="beanName") 
        @Autowired用於注入,(srping提供的) 默認按類型裝配 
        @Transactional(rollbackFor={Exception.class}) 事務管理 
        @ResponseBody @Scope("prototype")設定bean的作用域
    -->
    <context:component-scan base-package="com.springmvc.demo.controller" />
    <!-- 默認的注解映射的支持 -->
    <mvc:annotation-driven />

    <!-- 配置視圖解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 定義視圖前綴格式 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 定義視圖后綴格式 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

UserController控制器中的內容

package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 *
 *  UserController.java   
 *
 *  @version : 1.1
 *  
 *  @author  : 蘇若年    <a href="mailto:DennisIT@163.com">發送郵件</a>
 *    
 *  @since   : 1.0        創建時間:    2013-4-13  上午12:58:05
 *     
 *  TODO     : 
 *
 */

@Controller
public class UserController {

    @RequestMapping(value={"/list"})
    public String listUser(){
        //value值不一定要跟方法名相同,value值是請求的url,讓請求與對應的方法綁定
        System.out.println("執行list操作");
        return "list";    //創建視圖頁面
    }
    
    
    @RequestMapping("/insert")
    public String insert(){
        //可以不寫value="/insert",上述表示方法也可以
        System.out.println("執行insert操作");
        return "insert";    //創建視圖頁面
    }
    
    @RequestMapping(value="delete")
    public String delete(){
        System.out.println("執行delete操作");
        return "delete";
    }
}

這樣就可以實現一個控制器中執行相關的多個請求處理了.

/WEB-INF/jsp/目錄下分別有方法返回的視圖頁面list.jsp,insert.jspdelete.jsp頁面

針對list業務訪問方式舉例:http://localhost:8080/項目名稱/insert

針對delete業務訪問方式舉例:http://localhost:8080/項目名稱/delete


如何給控制器中傳入參數

只需要傳入的參數的實參參數名跟形成方法中的形參名一致即可

    @RequestMapping(value="select")
    public String select(String username){
        System.out.println("執行查詢操作:要查詢的用戶名為:" + username);
        return "select";
    }

此時訪問的時候可以用如下方式傳入參數

http://localhost:8080/myproject/select?username=dennisit
這里
username必須跟select方法的形參名一致才能保證數據傳遞成功,在后台打印如下結果:

執行查詢操作:要查詢的用戶名為:dennisit

雖然這里有形參,但我們使用http://localhost:8080/myproject/select

訪問也是可以成功的,表示參數為null,可以通過后台打印看出

執行查詢操作:要查詢的用戶名為:null

 

 

如何獲取值展示到視圖頁面

方案一(不推薦): 在參數中加入一個Map<String, String>值對,可以按照session的思想理解,使用方式類似

@RequestMapping(value="select")
public String select(String username,Map<String,Object> context){
    System.out.println("執行查詢操作:要查詢的用戶名為:" + username);
    context.put("username", username);
    return "select";
}

訪問路徑:http://localhost:8080/myproject/select?username=dennisit

WEB-INF/jsp/select.jsp中內容

  <body>
        執行了查詢操作,查詢的用戶名為${ username }
  </body>

程序運行結果:執行了查詢操作,查詢的用戶名為dennisit 

方案二(推薦):在參數中使用Model對象

@RequestMapping(value="select")
public String select(String username,Model model){
    System.out.println("執行查詢操作:要查詢的用戶名為:" + username);
    model.addAttribute("username", username);
    return "select";
}

訪問路徑跟執行結果同上,只是用的傳遞參數的對象由Map集合編程Model對象,用法沒有區別

轉載請注明出處:[http://www.cnblogs.com/dennisit/archive/2013/04/13/3017910.html]

在線交談


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM