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 />&nbsp;&nbsp;&nbsp;&nbsp;码<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";
    }
   
}
一纸高中万里风,寒窗读破华堂空。 莫道长安花看尽,由来枝叶几相同?
原文地址:https://www.cnblogs.com/byczyz/p/12189313.html