SpringMVC @RequestMapping 2


第一講:SpringMVC 頁面跳轉實例,通過請求訪問start.jsp頁面 

1.1 加包 

1.2 web.xml 
1.3 建springMVC-servlet.xml(注:spring默認要求建立在WEB-INF目錄下,並且名稱爲servlet-name_servlet.xml 
1.3 建springMVC-servlet.xml(注:spring默認要求建立在WEB-INF目錄下,並且名稱爲servlet-name_servlet.xml 
1.4 StartController.java 

    package com.wdl.cn.controllers; 

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

    @Controller 
    public class StartController { 

        @RequestMapping(value="/start") 
        public String start(){ 
            System.out.println("start method invoked..."); 
            return "start"; 
        } 
    } 


1.5 新建 WEB-INF/page/start.jsp 

1.6 訪問:http://localhost:8080/springMVC_001/start.do 
總結:本例子搭建一個簡單的spingmvc實例,通過本例學習springMVC最簡單的流程及搭建元素。 
第二講 靈活指定springmvc映射文件及路徑 
    更多情況下,對於第一講中的springMVC-servlet.xml 文件,我們並不想去放在WEB-INF,或者說我們可能在一

個項目中並不是只有這一個文件,所以本節我們來講述如何靈活配置此文件及文件名。 
2.1 修改web.xml 
2.2 將WEB-INF下面的springMVC-servlet.xml 移動到com.wdl.cn.config.mvc包下並將其修改名稱爲springMVC-
first.xml 

2.3 測試原來的路徑 : http://localhost:8080/springMVC_002/start.do 

總結:本講主要學習瞭如何靈活配置springMVC配置文件。下節將重點講述@RequestMapping的使用。 

第三講 springMVC_003  @RequestMapping的使用 

3.1 @RequestMapping 使用位置 
    a.使用於方法,此方法則可以被請求訪問; 
    b.使用於類,則可以將請求分(又叫分路徑,分模塊)包處理 
3.2 將controller類上加@RequestMapping,修改StartController.java 

    package com.wdl.cn.controllers; 

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

    @Controller 
    @RequestMapping(value="/test") 
    public class StartController { 

        @RequestMapping(value="/start") 
        public String start(){ 
            System.out.println("start method invoked..."); 
            return "start"; 
        } 
    } 

3.3 訪問:http://localhost:8080/springMVC_003/test/start.do ,由此可見,可以通過在類上加

@RequestMapping將請求分路徑。 

3.4 @RequestMapping 參數詳解 
    a.value表示訪問的路徑 
    b.method 表示請求的方式 GET | POST 
    step1:修改StartController.java 

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

    @Controller 
    @RequestMapping(value="/test") 
    public class StartController { 

        @RequestMapping(value="/start",method=RequestMethod.GET) 
        public String start(){ 
            System.out.println("start method invoked..."); 
            return "start"; 
        } 
        @RequestMapping(value="/start",method=RequestMethod.POST) 
        public String start2(){ 
            System.out.println("start2 method invoked..."); 
            return "start"; 
        } 
    }          

step2:修改start.jsp模擬POST請求 
3.5 訪問http://localhost:8080/springMVC_003/test/start.do,接着轉到start.jsp頁面,接着點擊頁面的中按

鈕,發送POST請求,則可以看出不同的請求方式可以調用不同的方法。 
3.6 參數傳遞(常用參數傳遞,restful風格參數傳遞) 

      a.httpservletreqeust方式參數傳遞 
        step1:修改StartController.java 
      

    package com.wdl.cn.controllers; 

    import javax.servlet.http.HttpServletRequest; 

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

    @Controller 
    @RequestMapping(value="/test") 
    public class StartController { 

        @RequestMapping(value="/start",method=RequestMethod.GET) 
        public String start(HttpServletRequest request){ 
            System.out.println("start method invoked..."); 
            String name = request.getParameter("name"); 
            int age = Integer.parseInt(request.getParameter("age")); 
            System.out.println("name=" + name + " age = " + age); 
            return "start"; 
        } 
        @RequestMapping(value="/start",method=RequestMethod.POST) 
        public String start2(){ 
            System.out.println("start2 method invoked..."); 
            return "start"; 
        } 
    } 
    step2:訪問:http://localhost:8080/springMVC_003/test/start.do?name=zhangsan&age=45 

      b.restfull風格參數傳遞 
        step1:修改StartController.java 

    package com.wdl.cn.controllers; 

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

    @Controller 
    @RequestMapping(value="/test") 
    public class StartController { 

        @RequestMapping(value="/start/{name}/{age}",method=RequestMethod.GET) 
        public String start(@PathVariable("name") String name,@PathVariable("age") int age){ 
            System.out.println("start method invoked..."); 
            System.out.println("name="+name+" age="+age); 
            return "start"; 
        } 
        @RequestMapping(value="/start",method=RequestMethod.POST) 
        public String start2(){ 
            System.out.println("start2 method invoked..."); 
            return "start"; 
        } 
    } 

    step2:訪問時,將參數值加入請求路徑 http://localhost:8080/springMVC_003/test/start/zhangsan/45.do 
總結:本講主要講述請求參數傳遞,主要掌握HttpServletRequest方式與restfull風格參數傳遞,下講主要講述

form表單提交 

第四講 form表單提交 
    使用struts2後,我們習慣將form表單的數據封裝成一個對象,這也是面向對象編程的一個思維,本節講述form

表單提交。 
    具體代碼見UserController.java 

    package com.wdl.cn.controllers; 

    import java.text.SimpleDateFormat; 
    import java.util.Date; 

    import javax.servlet.http.HttpSession; 

    import org.springframework.beans.propertyeditors.CustomDateEditor; 
    import org.springframework.stereotype.Controller; 
    import org.springframework.web.bind.WebDataBinder; 
    import org.springframework.web.bind.annotation.InitBinder; 
    import org.springframework.web.bind.annotation.RequestMapping; 
    import org.springframework.web.bind.annotation.RequestMethod; 
    import org.springframework.web.servlet.ModelAndView; 

    import com.wdl.cn.entity.User; 

    @Controller 
    @RequestMapping(value="/form") 
    public class UserController { 

        @RequestMapping(value="/add",method=RequestMethod.GET) 
        public String toUserAddPage(){ 
            System.out.println("toUserAddPage method invoked..."); 
            return "useradd"; 
        } 
       
        @RequestMapping(value="/add",method=RequestMethod.POST) 
        public ModelAndView addUser(HttpSession session,User user){ 
            System.out.println("addUser method invoked..."); 
            System.out.println(user); 
            ModelAndView mav = new ModelAndView(); 
            session.setAttribute("abc", user); 
            mav.setViewName("redirect:/form/add.do"); 
            mav.addObject("abc", user); 
            //return "useradd"; 
            return mav; 
        } 
       
        @InitBinder 
        public void initBinder(WebDataBinder binder){ 
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-

MM-dd"), false)); 
        } 
    } 

     注:addUser方法中參數User則是接收請求發過來的參數;initBinder方法則是用來綁定用戶提交的數據,前

臺提交過來的日期,在這裏後面並不知情,則由這個方法來處理。 
總結:本講主要講述如何來提交表單數據,並將其封裝成一個對象。 

第五節 一個Controller處理多個請求 
      很多情況下,我們都想把有關聯的請求放在一個controller中,比如,對於一個用戶的增刪改查,都可以放

在一個controller類中。對於springMVC註解的方式有兩種方式可以實現。 
    1.一個controller類中每個處理請求的方法的@requestMapping的param中可以帶參數,比如:

@RequestMapping(param="method=method1"),在類級別的@RequestMapping上面指定請求路徑。 

    package com.wdl.cn.controllers; 

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

    @Controller 
    @RequestMapping(value="/manyRequest") 
    public class ReceiveManyRequestController { 
        @RequestMapping(params="method=method1") 
        public ModelAndView methodOne(){ 
            System.out.println("method methodOne invoked..."); 
            ModelAndView mav = new ModelAndView("ReceiveManyRequest"); 
            mav.addObject("msg", "請求第一個方法"); 
            return mav; 
        } 
        @RequestMapping(params="method=method2") 
        public ModelAndView methodTwo(){ 
            System.out.println("method methodTwo invoked..."); 
            ModelAndView mav = new ModelAndView("ReceiveManyRequest"); 
            mav.addObject("msg", "請求第二個方法"); 
            return mav; 
        } 
       
    } 

      2.每個接收請求的方法的@RequestMapping的value中指定請求路徑,看ReceveManyRequestController2.java 

    package com.wdl.cn.controllers; 

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

    @Controller 
    @RequestMapping(value="/manyRequest") 
    public class ReceiveManyRequestController2 { 
        @RequestMapping(value="/request1") 
        public ModelAndView methodOne(){ 
            System.out.println("method methodOne invoked..."); 
            ModelAndView mav = new ModelAndView("ReceiveManyRequest"); 
            mav.addObject("msg", "請求第一個方法"); 
            return mav; 
        } 
        @RequestMapping(value="/request2") 
        public ModelAndView methodTwo(){ 
            System.out.println("method methodTwo invoked..."); 
            ModelAndView mav = new ModelAndView("ReceiveManyRequest"); 
            mav.addObject("msg", "請求第二個方法"); 
            return mav; 
        } 
    } 

總結:本講講述如何讓一個Controller接收多個請求的兩種處理方式 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章