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接收多個請求的兩種處理方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.