SpringMVC-数据绑定
1.1绑定默认数据类型
当前端请求的参数比较简单时,可以在后台方法的形参中直接使用Spring MVC提供的默认参数类型进行数据绑定。
常用的默认参数类型如下。
· HttpServletRequest:通过request对象获取请求信息。
· HttpServletResponse:通过response处理响应信息。
· HttpSession:通过session对象得到session中存储的对象。
· Model/ModelMap:Model是一个接口,ModelMap是一个接口实现,作用是将model数据填充到request域。
在web.xml中,配置Spring MVC的前端控制器等信息
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <!-- 配置前端过滤器 --> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 初始化时加载配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <!-- 表示容器在启动时立即加载Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
在src目录下,创建Spring MVC的核心配置文件springmvc-config.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 指定需要扫描的包 --> <context:component-scan base-package="com.itheima.controller"/> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/jsp/"></property> <!-- 设置后缀 --> <property name="suffix" value=".jsp"></property> </bean> </beans>
在src目录下,创建一个com.itheima.controller包,在该包下创建一个用于用户操作的控制器类UserController
mport javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/selectUser") public String selectUser(HttpServletRequest request) { String id=request.getParameter("id"); System.out.println("id="+id); return "success"; } }
使用注解方式定义了一个控制器类,同时定义了方法的访问路径。在方法参数中使用了HttpServletRequest类型,
并通过该对象的getParameter()方法获取了指定的参数。为了方便查看结果,将获取的参数进行输出打印,
最后返回一个名为success的视图,SpringMVC会通过视图解析器在“/jsp/”路径下寻找success.jsp文件
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ok </body> </html>
1.2绑定简单数据类型
简单数据类型的绑定,就是指Java中几种基本数据类型的绑定,如int、String、Double等类型。这里仍然以参数id为1的请求为例,来讲解简单数据类型的绑定。
首先修改控制器类,将控制器类UserController中的selectUser()方法的参数修改为使用简单数据类型的形式,修改后的代码如下。
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/selectUser") public String selectUser(Integer id) { System.out.println("id="+id); return "success"; } }
1.3绑定POJO类型
在使用简单数据类型绑定时,可以很容易地根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,
客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,
这种操作显然比较烦琐。此时就可以使用POJO类型进行数据绑定。POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,
然后在方法中直接使用该POJO作为形参来完成数据绑定。接下来通过一个用户注册案例,来演示POJO类型数据的绑定,具体实现步骤如下。
(1)在src目录下,创建一个com.itheima.po包,在该包下创建一个User类来封装用户注册的信息参数,编辑后如文件
/* * 用户POJO类 */ public class User { private Integer id;//用户id private String username;//用户 private Integer password;//用户密码 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getPassword() { return password; } public void setPassword(Integer password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } }
注册页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <form action="${pageContext.request.contextPath}/registerUser" method="post"> 用户名:<input type="text" name="username" /><br /> 密 码<input type="text" name="password" /><br /> <input type="submit" value="注册" /> </form> </body> </html>
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.itheima.po.User; @Controller public class UserController { /* * 向用户注册页面跳转 */ @RequestMapping("/toRegister") public String toRegister() { return "register"; } /* * 接收用户注册信息 */ @RequestMapping("/registerUser") public String registerUser(User user) { String username=user.getUsername(); Integer password=user.getPassword(); System.out.println("username="+username); System.out.println("password="+password); return "success"; } }