封裝參數
注意:springmvc沒有成員變數,把需要傳遞的參數對象放入方法中,當你請求這個方法的時候,
這個方法裡面的對象會自動被建立,需要封裝的參數自動被封裝到方法的對象中
分析接受參數類型:
基本類型,int,String等等基本類型。
Pojo類型
封裝類型
Springmvc預設支援類型:
HttpSession,HttpRequstServlet,Model等等。
Struts2參數:基於屬性封裝。
Springmvc參數封裝:基於方法進行封裝。
一、基本類型 1、頁面:
<form action="${pageContext.request.contextPath }/user/recieveInt.do" method="post">ID:<input type="text" name="id" id="id"><input type="submit" value="提交"></form>
2、方法:
@Controller//<bean class="UserController"/>@RequestMapping("/user")public class UserController {//跳轉到add頁面@RequestMapping("toAdd")public String toAdd(){return "add";}//接受int型別參數@RequestMapping("recieveInt")public String recieveInt(Integer id){System.out.println(id);return "success";}
springmvc.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- 掃描,把Controller交給spring管理 --><context:component-scan base-package="cn.itcast"></context:component-scan><!-- 配置註解處理器映射器 功能:尋找執行類Controller--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean><!-- 配置註解處理器適配器 功能:調用controller方法,執行controller--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean><!-- 配置sprigmvc視圖解析器:解析邏輯試圖 後台返回邏輯試圖:index視圖解析器解析出真正物理視圖:首碼+邏輯試圖+尾碼====/WEB-INF/jsps/index.jsp--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsps/"></property><property name="suffix" value=".jsp"></property></bean></beans>
二、字串類型 1、頁面
<form action="${pageContext.request.contextPath }/user/recieveStr.do" method="post">姓名:<input type="text" name="username" id="username"><input type="submit" value="提交"></form>
2、方法
//接受字元型別參數@RequestMapping("recieveStr")public String recieveStr(String username){System.out.println(username);return "success";}
success.jsp:
<body><h1>接受參數成功</h1></body>
三、數群組類型
分析:大量刪除:checkbox複選框。Value必須有值。 1、頁面
<form action="${pageContext.request.contextPath }/user/recieveArray.do" method="post">ID:<input type="checkbox" name="ids" value="1" id="ids">ID:<input type="checkbox" name="ids" value="2" id="ids">ID:<input type="checkbox" name="ids" value="3" id="ids"><input type="submit" value="提交"></form>
2、方法
//接受數群組類型參數@RequestMapping("recieveArray")public String recieveArray(Integer[] ids){System.out.println(ids);return "success";}
四、pojo類型 User:
public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;
1、頁面
<form action="${pageContext.request.contextPath }/user/recieveUser.do" method="post">姓名:<input type="text" name="username" id="username">生日:<input type="text" name="birthday" id="birthday">性別:<input type="text" name="sex" id="sex">地址:<input type="text" name="address" id="address"><input type="submit" value="提交"></form>
2、方法
//接受參數封裝User對象@RequestMapping("recieveUser")public String recieveUser(User user){System.out.println(user);return "success";}
五、封裝類型 UserCustomer:
public class UserCustom {private User user;
1、頁面
<form action="${pageContext.request.contextPath }/user/recieveUserCustom.do" method="post">姓名:<input type="text" name="user.username" id="username">生日:<input type="text" name="user.birthday" id="birthday">性別:<input type="text" name="user.sex" id="sex">地址:<input type="text" name="user.address" id="address"><input type="submit" value="提交"></form>
2、方法
//接受封裝型別參數@RequestMapping("recieveUserCustom")public String recieveUserCustom(UserCustom userCustom){System.out.println(userCustom);return "success";}
六、集合類型
方法體裡不能直接傳遞list集合和map集合類型的參數
把list集合和map集合封裝到封裝類中
UserCustomer:
public class UserCustom {private User user;private List<User> userList;private Map<String,Object> maps = new HashMap<String, Object>();
接受list集合: 1、頁面
<form action="${pageContext.request.contextPath }/user/recieveList.do" method="post">姓名:<input type="text" name="userList[0].username" id="username">地址:<input type="text" name="userList[0].address" id="address">姓名:<input type="text" name="userList[1].username" id="username">地址:<input type="text" name="userList[1].address" id="address"><input type="submit" value="提交"></form>
2、方法
//接受集合型別參數@RequestMapping("recieveList")public String recieveList(UserCustom userCustom){System.out.println(userCustom);return "success";}
接受map集合: 1、頁面
<form action="${pageContext.request.contextPath }/user/recieveMap.do" method="post">姓名:<input type="text" name="maps['username']" id="username">地址:<input type="text" name="maps['address']" id="address"><input type="submit" value="提交">
2、方法
//接受集合型別參數@RequestMapping("recieveMap")public String recieveMap(UserCustom userCustom){System.out.println(userCustom);return "success";}
有了struts2,為什麼還需要sprigmvc。
實現機制:
Struts2是基於過濾器實現的。
Springmvc基於servlet實現。Servlet比過濾器快。
運行速度:
Struts2是多例
請求來了以後,struts2建立多少個對象:
ActionContext,valuestack,UserAction,ActionSuport,ModelDriven
userAction裡面屬性:User對象,userlist集合等
Springmvc是單例。
參數封裝來分析:
Struts基於屬性進行封裝。
Springmvc基於方法封裝。顆粒更細
小明訪問了n次這個類
N個UserAction,n個actionSupport,n個modelDriver,n個user,n個list,n個actionContext
N個valueStack等
Public Class userAction extendsActionSupport implements ModelDriven{
Private user = new user();
Private List<user> list;
}
一個,如果存取方法,只需要建立方法裡面的幾個對象,對象是局部變數,使用完畢後就銷毀。
Public class userController(){}
頁面回顯
Springmvc使用model對象,model對象相當於application
Application對象中的資料可以使用el運算式進行擷取
方法裡面的對象會自動被建立,所以把model放到方法中
查詢所有:
@RequestMapping("list")public String list(Model model){//model相當於application域對象List<User> userList = new ArrayList<User>();User user1 = new User();user1.setId(1);user1.setSex("男");user1.setUsername("張山峰");user1.setAddress("武當山");user1.setBirthday(new Date());User user2 = new User();user2.setId(2);user2.setSex("男2");user2.setUsername("張山峰222");user2.setAddress("武當山222");user2.setBirthday(new Date());User user3 = new User();user3.setId(3);user3.setSex("男3");user3.setUsername("張山峰333");user3.setAddress("武當山333");user3.setBirthday(new Date());userList.add(user1);userList.add(user2);userList.add(user3);model.addAttribute("userList", userList);return "list";}
頁面擷取:
<body><table border="1" style="color: blue"><tr><td>姓名</td><td>生日</td><td>性別</td><td>地址</td><td>操作</td></tr><c:forEach items="${userList }" var="user"><tr><td>${user.username }</td><td>${user.birthday }</td><td>${user.sex }</td><td>${user.address }</td><td><a href="${pageContext.request.contextPath }/user/updateByID.do=${user.id}">修改</a></td></tr></c:forEach></table></body>
修改:
//修改@RequestMapping("updateByID")public String updateByID(Integer id,Model model){User user1 = new User();user1.setId(id);user1.setSex("男");user1.setUsername("張山峰");user1.setAddress("武當山");user1.setBirthday(new Date());model.addAttribute("user", user1);return "edit";}
回顯:edit.jsp:
<form action="${pageContext.request.contextPath }/user/recieveUser.do" method="post">姓名:<input type="text" name="username" value="${user.username }" id="username">生日:<input type="text" name="birthday" value="${user.birthday }" id="birthday">性別:<input type="text" name="sex" value="${user.sex }" id="sex">地址:<input type="text" name="address" value="${user.address }" id="address"><input type="submit" value="提交"></form>