一、导入依赖
<!--java Web工程要记得打成war包-->
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
二、工具类
package com.ceshi.util;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 自定义转换器
* 实现一个接口 converter
*/
public class DateConverter implements Converter<String,Date>{
public Date convert(String s) {
Date date = null;
try {
new SimpleDateFormat("yyyy-MM-dd").parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
三、配置文件
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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--开启注解扫描-->
<context:component-scan base-package="com.ceshi.controller"/>
<!--视觉解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--处理器适配器 处理器映射器-->
<mvc:annotation-driven conversion-service="conversionService2"/>
<!-- 把我们自定义的类型转换器 注册到 类型转换器工厂中 类型转换器工厂告知 适配器 -->
<bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.ceshi.util.DateConverter"></bean>
</set>
</property>
</bean>
</beans>
web.xml
<!--编码过滤器-->
<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>
<!--前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
四、controller层
package com.ceshi.controller;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/sayHello")
public ModelAndView sayHello(ModelAndView modelAndView,String name){
//设置模型
modelAndView.addObject("msg","sayHello"+name);
//设置视图路径
modelAndView.setViewName("result");
return modelAndView;
}
@RequestMapping("/sayHi")
public ModelAndView sayHi(ModelAndView modelAndView, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
//设置模型
modelAndView.addObject("msg","sayHello"+date);
//设置视图路径
modelAndView.setViewName("result");
return modelAndView;
}
@RequestMapping("/sayHe")
public ModelAndView sayHe(ModelAndView modelAndView,Date date){
//设置模型
modelAndView.addObject("msg","sayHello"+date);
//设置视图路径
modelAndView.setViewName("result");
return modelAndView;
}
/**
* ------------------控制器的另外写法--------------
*
* model and view
* model 数据模型 ---Model/ModelMap
* view 视图地址 --- String
* @param model
* @return 返回值就是路径
*/
@RequestMapping("/sayModel")
public String sayModel(Model model){
//设置模型
model.addAttribute("msg","使用model封装数据,使用字符串进行视图路径的返回。返回的数据是给jsp的");
//设置视图路径
return "result";
}
@RequestMapping("/sayModelMap")
public String sayModelMap(ModelMap modelMap){
//设置模型
modelMap.addAttribute("msg","使用modelMap封装数据,使用字符串进行视图路径的返回。返回的数据是给jsp的");
modelMap.get("msg");
//设置视图路径
return "result";
}
/**
* 重定向 请求转发
*/
@RequestMapping("/sayRedirect")
public String sayRedirect(Model model){
//设置模型
model.addAttribute("msg","完成重定向操作?");
// 通过response对象做
//设置 视图路径 完成重定向操作 ,重定向操作不会使用视图解析器
return "redirect:/pages/result.jsp";
}
@RequestMapping("/sayForward")
public String sayForward(Model model){
//设置模型
model.addAttribute("msg","完成请求转发操作?");
// 通过response对象做
//设置 视图路径 完成请求转发操作 ,请求转发操作不会使用视图解析器
return "forward:/pages/result.jsp";
}
}
五、web资源
1、index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SpringMVC</title>
</head>
<body>
<br>
<a href="/hello/sayHi.do?date=1999-01-01">接收日期字符串</a>
<br>
<a href="/hello/sayHe.do?date=1999-01-01">接收日期字符串</a>
<h3>返回页面是jsp形式的 另外的一种 处理器写法</h3>
<a href="/hello/sayModel.do">我们使用model作为参数用于存储数据,使用String作为返回值,表示视图的地址。</a>
<br>
<a href="/hello/sayModelMap.do">我们使用modelMap作为参数用于存储数据,使用String作为返回值,表示视图的地址。</a>
<h2>返回页面是jsp的情况,我们的处理器中如何进行重定向和请求转发</h2>
<!--
重定向请求转发 区别
重定向 是服务器外部行为,是浏览器发起的操作。 可以从地址栏体现,地址栏改变了。
请求转发 是服务器内部行为,是服务器发起的操作。地址无法体现,地址栏不变。表示是用一个请求过程中数据需要传递。
servlet--jsp传数据。
-->
<a href="/hello/sayRedirect.do">重定向</a>
<a href="/hello/sayForward.do">请求转发</a>
</body>
</html>
2、展示结果页面…result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>展示结果页面</title>
</head>
<body>
${msg}
</body>
</html>