1. 导入springmvc开发所需要jar包,spring的5个核心jar包,还有spring-web的两个jar包,因为要使用注解开发,所以需要spring-aop jar包。
2. 配置web.xml文件,使得在访问路径的时候,加载springmvc配置文件
<?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_3_0.xsd" id="WebApp_ID" version="3.0">
<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-config3.xml</param-value>
</init-param>
<!-- 在服务器启动的时候加载Sevlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.配置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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.wx"></context:component-scan>
<!-- 配置视图解析器 -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4. 定义控制器类Controller
package com.wx.controller;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.wx.domain.Order;
import com.wx.domain.User;
@Controller
public class ThirdController{
/**
* 请求参数绑定
*/
@RequestMapping(value="/getQingQiuCanShu")
public ModelAndView getCanShu(HttpServletRequest request,HttpServletResponse reponse){
String username = request.getParameter("username");
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
}
5. 执行程序,在浏览器中输入地址,并且拼接参数
这个时候,访问ThirdController中getCanShu方法,通过request获取请求参数
6 在ThirdController中添加另外一种请求参数绑定,改变之后的代码
package com.wx.controller;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.wx.domain.Order;
import com.wx.domain.User;
@Controller
public class ThirdController{
/**
* 请求参数绑定
*/
@RequestMapping(value="/getQingQiuCanShu")
public ModelAndView getCanShu(HttpServletRequest request,HttpServletResponse reponse){
String username = request.getParameter("username");
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
/**
* 简单数据类型绑定
*/
@RequestMapping(value="/getSimpleQingQiuCanShu")
public ModelAndView getSimpleCanShu(String username){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
}
在浏览器输入地址后,结果如下:
7. 接收pojo请求参数对象,需要在controller新添加方法接口
package com.wx.controller;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.wx.domain.Order;
import com.wx.domain.User;
@Controller
public class ThirdController{
/**
* 请求参数绑定
*/
@RequestMapping(value="/getQingQiuCanShu")
public ModelAndView getCanShu(HttpServletRequest request,HttpServletResponse reponse){
String username = request.getParameter("username");
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
/**
* 简单数据类型绑定
*/
@RequestMapping(value="/getSimpleQingQiuCanShu")
public ModelAndView getSimpleCanShu(String username){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
/**
* POJO请求参数
*/
@RequestMapping(value="/getPOJOQingQiuCanShu")
public ModelAndView getPOJOCanShu(User user){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+user);
return model;
}
}
在创建User对应的类,代码如下
package com.wx.domain;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
新建jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="${pageContext.request.contextPath}/getPOJOQingQiuCanShu" method="post">
用户名:<input type="text" name = "username"><br/>
密 码:<input type="password" name = "password"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
在jsp文件中name的名字,对应User对象中的属性名。界面提交如下:
后台结果:
8 如果绑定的参数中一个对象绑定另一个对象。例如在一个订单可以有多个用户,一个用户可以有多个订单。创建Order对象,在Order对象中包含User对象。
package com.wx.domain;
public class Order {
private Integer id;
private User user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Order [id=" + id + ", user=" + user + "]";
}
}
controller中添加新的接口方法:
package com.wx.controller;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.wx.domain.Order;
import com.wx.domain.User;
@Controller
public class ThirdController{
/**
* 请求参数绑定
*/
@RequestMapping(value="/getQingQiuCanShu")
public ModelAndView getCanShu(HttpServletRequest request,HttpServletResponse reponse){
String username = request.getParameter("username");
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
/**
* 简单数据类型绑定
*/
@RequestMapping(value="/getSimpleQingQiuCanShu")
public ModelAndView getSimpleCanShu(String username){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+username);
return model;
}
/**
* POJO请求参数
*/
@RequestMapping(value="/getPOJOQingQiuCanShu")
public ModelAndView getPOJOCanShu(User user){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+user);
return model;
}
/**
* 嵌套数据类型访问
*/
@RequestMapping(value="/getOrderAndUser")
public ModelAndView getOrderAndUser(Order order){
ModelAndView model = new ModelAndView();
model.setViewName("success");
System.out.println("username:"+order);
return model;
}
}
编写jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="${pageContext.request.contextPath}/getOrderAndUser" method="post">
订单号:<input type="text" name = "id"><br/>
用 户:<input type="text" name = "user.username"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
在jsp中,用户的参数希望绑定到User对象中的username上,所以name=“user.username”,其中user是order中的属性,username是User中的属性。
接下来编写跳转到jsp页面下的接口,因为jsp页面在/WEB-INF/jsp/目录下,直接访问不到,需要使用视图解析器,也就是通过Controller来访问jsp对象。
package com.wx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class LoginController {
@RequestMapping(value="/findOrderJsp")
public ModelAndView findOrderJsp(){
ModelAndView mav = new ModelAndView();
mav.setViewName("order");
return mav;
}
}
执行界面如下:
执行结果:
9.自定义数据绑定(日期数据类型绑定)
创建自定义数据转换类
package com.wx.convert;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class DateConvert implements Converter<String,Date>{
private String simpleFormat = "yyyy-MM-dd HH:mm:ss";
@Override
public Date convert(String stringDate) {
// TODO Auto-generated method stub
try{
return new SimpleDateFormat(simpleFormat).parse(stringDate);
}catch(ParseException e){
throw new IllegalArgumentException("无效的日期格式,请使用这种格式:"+simpleFormat);
}
}
}
然后再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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.wx"></context:component-scan>
<!-- 配置视图解析器 -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 显示装配自定义转换器 -->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 自定义类型转换器配置 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.wx.convert.DateConvert"/>
</set>
</property>
</bean>
</beans>
界面调用:
控制台打印:
10 . 采用Formatter 进行数据类型绑定
创建DateFormatter类,对时间参数进行转换
package com.wx.convert;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.format.Formatter;
public class DateFormatter implements Formatter<Date>{
String dateFormat = "yyyy-MM-dd hh24:mi:ss";
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
@Override
public String print(Date date, Locale arg1) {
// TODO Auto-generated method stub
return simpleDateFormat.format(date);
}
@Override
public Date parse(String date, Locale arg1) throws ParseException {
// TODO Auto-generated method stub
return simpleDateFormat.parse(date);
}
}
配置spring配置文件,开启数据类型转换
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.wx"></context:component-scan>
<!-- 配置视图解析器 -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 显示装配自定义转换器 -->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 自定义类型转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="com.wx.convert.DateFormatter"/>
</set>
</property>
</bean>
</beans>