栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

❤️最后的大爆发❤️五万字总结SpringMVC教程——三部曲封神之作(建议收藏)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

❤️最后的大爆发❤️五万字总结SpringMVC教程——三部曲封神之作(建议收藏)

文章目录
  • 前言
  • 1. Spring MVC 概述
    • 2.1 Spring MVC是什么
    • 1.0 Spring MVC处理流程
  • 2. 入门案例:查询详情 ( xml)
    • 3.1 需求说明
    • 2.1 思路分析
    • 2.2 实现步骤
      • 2.2.1 拷贝配置文件相关代码
      • 2.2.2 创建java类和jsp文件
  • 3. 入门查询:查询所有(无xml)
    • 3.2 需求说明
    • 3.1 思路分析
    • 3.2 步骤实现
      • 3.2.1 拷贝pom文件,创建MVCConfig和WebInitializer类
      • 3.2.2 创建HelloController和show01.jsp
  • 4. SSM整合:改造UMS
    • 4.1 搭建环境
      • 4.0.1 创建项目、 拷贝pom文件
      • 4.0.2 拷贝UMS页面
      • 4.0.3 配置文件
      • 4.0.4 初始化数据库和表
      • 4.0.5 创建JavaBean
    • 4.1 编写功能:dao、service、web、jsp页面
      • 4.1.1 编写mapper接口(dao)
      • 4.1.2 编写service接口
      • 4.1.3 编写service实现类
      • 4.1.4 编写Controller
      • 4.1.5 编写jsp
    • 4.2 编写配置类
      • 4.2.1 spring配置类
      • 4.2.2 mybatis配置类
      • 4.2.3 spring mvc 配置类【无内容】
      • 4.2.4 web启动配置类【新内容】
    • 4.3 测试
  • 5. 视图 解析器
    • 5.1 分析
    • 5.2 修改代码
      • 5.2.1 编写控制器
      • 5.2.2 配置视图解析器
  • 6. SSM整合:改造UMS(添加视图解析器)
  • 7. 参数 绑定
    • 7.1 简单数据类型
      • 7.1.1 支持的数据类型
      • 7.1.2 @RequestParam
    • 7.2 绑定POJO类型
    • 7.3 POST中文乱码
    • 7.4 绑定包装POJO
    • 7.5 自定义参数绑定
    • 7.6 绑定数组
    • 7.7 表单数据绑定到List
  • 8. @RequestMapping
    • 8.1 多路径映射
    • 8.2 窄化请求路径
    • 8.3 请求方法限定
  • 9. Controller方法返回值
    • 9.1 返回ModelAndView
    • 9.2 返回void
    • 9.3 返回字符串
      • 9.3.1 逻辑视图名
      • 9.3.2 Redirect重定向
      • 9.3.3 forward转发
  • 10. 异常处理器
    • 10.1 异常处理器分析
    • 10.2 自定义异常
    • 10.3 异常处理器编写
    • 10.4 异常页面
    • 10.5 测试程序
  • 11. 上传图片
    • 11.1 单图片上传
      • 11.1.1 JSP页面
      • 11.1.2 文件上传解析器
      • 11.1.3 Controller实现
    • 11.2 多图片上传
      • 11.2.1 JSP页面
      • 11.2.2 JavaBean
      • 11.2.3 Controller实现
  • 12. JSON数据交互
    • 12.1 概述
    • 12.2 前端发送ajax请求,后端获取json数据
    • 12.3 后端给前端响应Json数据.
  • 13. RESTful支持
    • 13.1 什么是RESTful
    • 13.2 添加jar包
    • 13.3 修改web.xml,支持RESTful
    • 13.4 JSP页面
    • 13.5 Controller实现
    • 13.6 静态资源问题及解决
  • 14. 拦截器
    • 14.1 概述
    • 14.2 分析
    • 14.3 自定义 拦截器
      • 14.3.1 JSP页面,测试入口
      • 14.3.2 控制器,测试程序
      • 14.3.3 拦截器实现类
      • 14.3.4 注册拦截器
      • 14.3.5 执行结果
    • 14.4 多拦截器配置
      • 14.4.1 分析
      • 14.4.2 拦截器实现类
      • 14.4.3 注册 拦截器
      • 14.4.4 执行结果
  • 15. 附录
    • 15.1 SpringMVC01_pom
  • 后记

前言

上回分别为各位分享了《六万字最全总结Java数据库编程MyBatis》《爆肝万字!一文最全总结之Spring从入门到入土》。
没有学过的同学,建议先学MyBatis,后学Spring,这次在此基础上我们来学习SpringMVC,此篇学完再无后端!

❤️爆肝六万字最全总结Java数据库编程MyBatis(建议收藏)

❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)

相关资料:

已上传到Gitee,欢迎start!!

1. Spring MVC 概述 2.1 Spring MVC是什么

​ Spring web mvc是表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

1.0 Spring MVC处理流程

l 1)核心控制器:处理特定请求。(例如:以*.action为后缀)

名称:DispatcherServlet

配置:是一个servlet,需要在web.xml中配置。

XML:需要确定核心XML配置文件的位置

l 2)核心XML配置文件:确定Controller位置、确定JSP页面位置

名称:springmvc.xml

l 3)控制器:开发人员编写的主要内容

名称:*Controller

l 流程示意图

2. 入门案例:查询详情 ( xml) 3.1 需求说明

在index.html中点击 Hello SpringMVC 超链接,在 show01 .jsp 页面显示信息。

2.1 思路分析

整体思路:

跟HelloServlet入门案例几乎相同 .

服务器设置一个Controller,相当于之前的Servlet,可以接收请求,把请求在转发给jsp页面.

这里的区别就是需要设置web.xml和springmvc.xml两个配置文件,前者是用来配置核心控制器,后者是用来扫描我们自己书写的Controller的.

书写步骤:

1.拷贝pom文件,SpringMVC.xml文件和web.xml配置文件核心代码.

2.创建HelloController和show01.jsp

项目结构如下:

2.2 实现步骤 2.2.1 拷贝配置文件相关代码

获取pom文件:

参见当前文档末尾的附录

获取springmvc.xml文件

代码如下直接拷贝



    
      

获取Web.xml代码配置如下:



  Archetype Created Web Application


    
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet  
    
      contextConfigLocation
      classpath:springmvc.xml  
    
  
  
    springmvc
    *.action  
  


2.2.2 创建java类和jsp文件
创建HelloController.java 
package com.Maynor.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller  
public class HelloController {

   @RequestMapping("/hello.action")  
   public String show(Model model){

      model.addAttribute("data", "嘿嘿嘿"); 

      return "/WEB-INF/show01.jsp"; 
   }

}

Show01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



你好啊 老弟儿 ${data}




Index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


Hello World!

入门案例



测试结果:
index.jsp页面

点击入门案例结果:

3. 入门查询:查询所有(无xml) 3.2 需求说明

该需求跟上一个入门案例需求完全相同.

在index.html中点击 Hello SpringMVC 超链接,在 show01 .jsp 页面显示信息。

区别在于实现的时候:

使用 WebInitializer类代替web.xml

使用MVCConfig代替springmvc.xml

3.1 思路分析

书写步骤:

1.拷贝pom文件,书写MVCConfig和WebInitializer类.

2.创建HelloController和show01.jsp

项目结构如下:

3.2 步骤实现 3.2.1 拷贝pom文件,创建MVCConfig和WebInitializer类

Pom文件,沿用上一个案例.即附录

MVCConfig类代码如下:

package com.Maynor.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.Maynor.controller")  
public class MVCConfig {
}

传统Web项目中,程序的入口是web.xml文件。

​ 在spring4中提供WebApplicationInitializer接口,表示服务器启动初始化。也就是说接口实现类中编写的内容,就是web.xml文件中配置的内容。

类或方法描述
AnnotationConfigWebApplicationContextWEB环境下spring工厂
servletContext.addFilter(name , Class)添加过滤器,等效
servletContext.addServlet(name , Class)添加servlet,等效
过滤器相关方法 ServletRegistration.Dynamic描述
addMapping(urlPatterns)追加过滤路径
setLoadonStartup(int)设置启动顺序

WebInitializer类代码如下:

package com.Maynor.config;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class WebInitializer implements WebApplicationInitializer {
   @Override
   public void onStartup(ServletContext servletContext) throws ServletException {

      //1.初始化spring容器
      AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
      applicationContext.register(MVCConfig.class);  
      applicationContext.setServletContext(servletContext);
      //2.设置核心控制器
      ServletRegistration.Dynamic springMVCServlet = servletContext.addServlet("springmvc", new DispatcherServlet(applicationContext)); 
      springMVCServlet.addMapping("*.action"); 
      springMVCServlet.setLoadonStartup(2);

   }
}
3.2.2 创建HelloController和show01.jsp
HelloController代码:
package com.Maynor.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

   @RequestMapping(path = "/hello.action")
   public String show(Model model){

      model.addAttribute("data", "呵呵呵");
      
      return "/WEB-INF/show01.jsp";

   }


}
Show01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



    来了 老弟儿 ${data}




测试结果:

练习:

查询所有. 希望得到如下结果:

参考代码:

l 编写JavaBean用于封装数据

public class Item {
	private String name;	//名称
	private Float price;	//价格
	private String detail;	//详情

l 编写业务控制器Controller

@Controller
@RequestMapping("/user")
public class HelloController {

    @RequestMapping("showInfo")
    public String showInfo(Model model){
        System.out.println("展示页面");
        //1 模拟数据
        List list = new ArrayList();
        list.add(new Item("联想笔记本", 6999f, "ThinkPad T430 联想笔记本电脑!"));
        list.add(new Item("苹果手机", 8800f, "iphone X 苹果手机!"));

        //设置数据
        model.addAttribute("list", list);
        return "/showInfo.jsp";
    }
}

l 展示数据

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: 86153
  Date: 2019/6/14
  Time: 0:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



        
名称 价格 描述
${item.name } ${item.price } ${item.detail }

配置类

*MVCConfig
@Configuration
@ComponentScan("com.Maynor.controller")
public class MVCConfiguration {

}


WebInitalizer
public class WebInitializer implements WebApplicationInitializer {

	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		//1 初始化spring容器
		AnnotationConfigWebApplicationContext appliation = new AnnotationConfigWebApplicationContext();
		appliation.register(MVCConfiguration.class);
		appliation.setServletContext(servletContext);
		
		//3 前端控制器
		ServletRegistration.Dynamic springMvcServlet = servletContext.addServlet("springmvc", new DispatcherServlet(appliation));  
		springMvcServlet.addMapping("*.action");
		springMvcServlet.setLoadonStartup(2);

	}

}

测试:

l 步骤2:启动,并访问

http://localhost:8080/s02/user/showInfo.action

4. SSM整合:改造UMS

需求:

改造ums 实现 查询所有用户.

示意图如下:

思路:

  1. 环境搭建:拷贝pom,资源文件和配置文件,初始化数据库和表,创建javaBean

  2. 编写功能:dao,Service,Controller

  3. 编写配置类:SpringConfig,MyBatisConfig,SpringMvcConfig,Web启动类.

  4. 测试

项目最终结构如下:

4.1 搭建环境 4.0.1 创建项目、 拷贝pom文件
4.2.4.RELEASE


  

  
  
    org.springframework
    spring-beans
    ${org.springframework.version}
  
  
    org.springframework
    spring-core
    ${org.springframework.version}
  
  
    org.springframework
    spring-context
    ${org.springframework.version}
  
  
    org.springframework
    spring-expression
    ${org.springframework.version}
  
  
    org.springframework
    spring-context-support
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-aop
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-aspects
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-instrument
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-messaging
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-jdbc
    ${org.springframework.version}
  
  
    org.springframework
    spring-orm
    ${org.springframework.version}
  
  
    org.springframework
    spring-oxm
    ${org.springframework.version}
  
  
    org.springframework
    spring-jms
    ${org.springframework.version}
  
  
    org.springframework
    spring-tx
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-websocket
    ${org.springframework.version}
  
  
    org.springframework
    spring-web
    ${org.springframework.version}
  


  
    org.springframework
    spring-webmvc-portlet
    ${org.springframework.version}
  

  
    org.springframework
    spring-webmvc
    ${org.springframework.version}
  
  

  
  
    org.springframework
    spring-test
    ${org.springframework.version}
  

  
  


  
    junit
    junit
    4.12
    test
  
  
    tk.mybatis
    mapper
    3.5.2
  
  
    com.github.pagehelper
    pagehelper
    3.7.5
  
  
    org.mybatis
    mybatis
    3.4.5
  

  
    mysql
    mysql-connector-java
    5.1.47
  
  
    org.mybatis
    mybatis-spring
    1.3.2
  
  
    com.alibaba
    druid
    1.1.10
  

  
    javax.servlet
    javax.servlet-api
    3.1.0
    provided
  


  
    jstl
    jstl
    1.2
  


  
    javax.servlet.jsp
    jsp-api
    2.1
    provided
  
  





  org.apache.maven.plugins
  maven-compiler-plugin
  3.2
  
    1.8
    1.8
    UTF-8
    true
  




  org.apache.tomcat.maven
  tomcat7-maven-plugin
  2.1
  
    8081
    tomcat7
  

4.0.2 拷贝UMS页面

4.0.3 配置文件

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://127.0.0.1:3306/ums_db

jdbc.username=root

jdbc.password=1234

4.0.4 初始化数据库和表
CREATE TABLE t_user (

 uid INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,

 login_name VARCHAr(50) DEFAULT NULL,

 login_pwd VARCHAr(32) DEFAULT NULL,

 age INT(11) DEFAULT NULL,

 birthday DATE DEFAULT NULL,

 sex VARCHAr(1) DEFAULT NULL,

 education VARCHAr(50),

 telephone VARCHAr(11),

 interest VARCHAr(100),

 remark VARCHAr(200)

)
insert  into `t_user`(`uid`,`login_name`,`login_pwd`,`age`,`birthday`,`sex`,`education`,`telephone`,`interest`,`remark`) values (1,'jack','1234',18,'1996-11-11','男',NULL,NULL,NULL,NULL),(2,'rose','1234',21,'1993-11-11','女',NULL,NULL,NULL,NULL),(3,'tom','1234',23,'1996-12-24','男',NULL,NULL,NULL,NULL);
4.0.5 创建JavaBean
@Table(name="t_user")
public class User {
	@Id
	private Integer uid;
	private String loginName;
	private String loginPwd;
	private Integer age;
	private String sex;
	private String birthday;
	private String education;
	private String telephone;
	private String interest;		//爱好:对应数据库(内容:A,B,C)
	private String[] interestArr;	//爱好:对应页面表单
	private String remark;

l 爱好需要特殊处理

	public String getInterest() {
		if(interestArr != null){
			interest = Arrays.toString(interestArr);  //[A,B,C]
			interest = interest.substring(1, interest.length() - 1);	//A,B,C
		}
		return interest;
	}
	public void setInterest(String interest) {
		this.interest = interest;
		if(interest != null){
			interestArr = interest.split(", ");
		}
	}

4.1 编写功能:dao、service、web、jsp页面 4.1.1 编写mapper接口(dao)
package com.Maynor.dao;

import com.Maynor.domain.User;
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper {
}
4.1.2 编写service接口
package com.Maynor.service;

import com.Maynor.domain.User;

import java.util.List;

public interface UserService {

   public List findAll();
   
}
4.1.3 编写service实现类
package com.Maynor.service.impl;

import com.Maynor.dao.UserMapper;
import com.Maynor.domain.User;
import com.Maynor.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.common.Mapper;

import javax.annotation.Resource;
import java.util.List;

@Service(value = "userServiceImpl")
@Transactional
public class UserServiceImpl implements UserService {


   @Resource
   private UserMapper userMapper;

   @Override
   public List findAll() {

      List users = userMapper.selectAll();

      return users;
   }
}
4.1.4 编写Controller
package com.Maynor.controller;


import com.Maynor.domain.User;
import com.Maynor.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import java.util.List;

@Controller
public class UserController {

   @Autowired
   private UserService userService;

   @RequestMapping("/findAllUsers.action")
   public String findAll(Model model){

      List userList = userService.findAll();

      model.addAttribute("userList", userList);

      return "/user/list.jsp";
   }


}
4.1.5 编写jsp

List.jsp

Left.jsp

${pageContext.request.contextPath}/findAllUsers.action

4.2 编写配置类

4.2.1 spring配置类
package com.Maynor.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.sql.DataSource;

//配置类
@Configuration
//要扫描的包
@ComponentScan(basePackages = {"com.Maynor"})
//开启事务支持
@EnableTransactionManagement
//读取properties配置文件
@PropertySource(value = "classpath:db.properties")
public class SpringConfig {

   //4.2.4 读取properties的固定代码
   @Bean
   public static PropertySourcesPlaceholderConfigurer create(){

      return new PropertySourcesPlaceholderConfigurer();
   }
   //读取数据库中的相关配置
   @Value("${jdbc.driver}")
   private String driverClass;
   @Value("${jdbc.url}")
   private String url;
   @Value("${jdbc.username}")
   private String username;
   @Value("${jdbc.password}")
   private String password;


   //设置德鲁伊连接池
   @Bean
   public DataSource dataSource(){
      DruidDataSource dataSource = new DruidDataSource();
      dataSource.setPassword(password);
      dataSource.setUsername(username);
      dataSource.setUrl(url);
      dataSource.setDriverClassName(driverClass);
      return dataSource;
   }
   //开启事务管理器
   @Bean
   @Resource
   public DataSourceTransactionManager txManager(DataSource dataSource){
      return  new DataSourceTransactionManager(dataSource);
   }
}
4.2.2 mybatis配置类
package com.Maynor.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.sql.DataSource;

//配置类
@Configuration
//要扫描的包
@ComponentScan(basePackages = {"com.Maynor"})
//开启事务支持
@EnableTransactionManagement
//读取properties配置文件
@PropertySource(value = "classpath:db.properties")
public class SpringConfig {

   //4.2.4 读取properties的固定代码
   @Bean
   public static PropertySourcesPlaceholderConfigurer create(){

      return new PropertySourcesPlaceholderConfigurer();
   }
   //读取数据库中的相关配置
   @Value("${jdbc.driver}")
   private String driverClass;
   @Value("${jdbc.url}")
   private String url;
   @Value("${jdbc.username}")
   private String username;
   @Value("${jdbc.password}")
   private String password;


   //设置德鲁伊连接池
   @Bean
   public DataSource dataSource(){
      DruidDataSource dataSource = new DruidDataSource();
      dataSource.setPassword(password);
      dataSource.setUsername(username);
      dataSource.setUrl(url);
      dataSource.setDriverClassName(driverClass);
      return dataSource;
   }
   //开启事务管理器
   @Bean
   @Resource
   public DataSourceTransactionManager txManager(DataSource dataSource){
      return  new DataSourceTransactionManager(dataSource);
   }
}
4.2.3 spring mvc 配置类【无内容】
package com.Maynor.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

//声明为配置类
@Configuration
//设置扫描 controller
@ComponentScan("com.Maynor.controller")
public class SpringMvcConfig {
}
4.2.4 web启动配置类【新内容】

​ 传统Web项目中,程序的入口是web.xml文件。

​ 在spring4中提供WebApplicationInitializer接口,表示服务器启动初始化。也就是说接口实现类中编写的内容,就是web.xml文件中配置的内容。

类或方法描述
AnnotationConfigWebApplicationContextWEB环境下spring工厂
servletContext.addFilter(name , Class)添加过滤器,等效
servletContext.addServlet(name , Class)添加servlet,等效
过滤器相关方法 ServletRegistration.Dynamic描述
addMapping(urlPatterns)追加过滤路径
setLoadonStartup(int)设置启动顺序
过滤器相关方法 FilterRegistration.Dynamic描述
addMappingForUrlPatterns(null, isMatchAfter, urlPatterns)追加过滤路径参数2:参数3:路径
package com.Maynor.config;


import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class WebInitializer implements WebApplicationInitializer {
   @Override
   public void onStartup(ServletContext servletContext) throws ServletException {
      //1.初始化 Spring 容器
      AnnotationConfigWebApplicationContext applicationContext  = new AnnotationConfigWebApplicationContext();
      applicationContext.register(SpringMvcConfig.class);
      applicationContext.register(SpringConfig.class);
      applicationContext.register(MybatisConfig.class);
      applicationContext.setServletContext(servletContext);

      //2.设置核心控制器
      ServletRegistration.Dynamic ds = servletContext.addServlet("springmvc", new DispatcherServlet(applicationContext));
      ds.addMapping("*.action");
      ds.setLoadonStartup(2);


      //3 post乱码配置    
      FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("CharacterEncodingFilter", new CharacterEncodingFilter("UTF-8"));
      encodingFilter.addMappingForUrlPatterns(null, true, "
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor1拦截器的preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor1拦截器的postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor1拦截器的afterCompletion");
    }
}
14.3.4 注册拦截器

拦截器编写完成之后,需要在SpringMVCConfiguration配置文件中注册

注册步骤:

1 SpringMVCConfiguration实现WebMvcConfigurerAdapter

2 重写AddInterceptors方法

public class SpringMvcConfig  extends WebMvcConfigurerAdapter {
    @Autowired
    private MyInterceptor1 myInterceptor1;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration interceptorRegistration1 = registry.addInterceptor(myInterceptor1);
        interceptorRegistration1.addPathPatterns("
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor2拦截器的preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor2拦截器的postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor2拦截器的afterCompletion");
    }
}
14.4.3 注册 拦截器
@Resource
private MyInterceptor1 myInterceptor1;

@Resource
private MyInterceptor2 myInterceptor2;

@Override
public void addInterceptors(InterceptorRegistry registry) {

    //拦截全部
    InterceptorRegistration interceptorRegistration2 = registry.addInterceptor(myInterceptor2);
    interceptorRegistration2.addPathPatterns("/*");
    //拦截全部
    InterceptorRegistration interceptorRegistration = registry.addInterceptor(myInterceptor1);
    interceptorRegistration.addPathPatterns("/*");

}
14.4.4 执行结果

15. 附录

用到的相关配置文件

15.1 SpringMVC01_pom

SpringMVC入门案例1的pom文件核心代码

Pom.xml文件


  4.2.4.RELEASE




    

    
    
        org.springframework
        spring-beans
        ${org.springframework.version}
    
    
        org.springframework
        spring-core
        ${org.springframework.version}
    
    
        org.springframework
        spring-context
        ${org.springframework.version}
    
    
        org.springframework
        spring-expression
        ${org.springframework.version}
    
    
        org.springframework
        spring-context-support
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-aop
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-aspects
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-instrument
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-messaging
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-jdbc
        ${org.springframework.version}
    
    
        org.springframework
        spring-orm
        ${org.springframework.version}
    
    
        org.springframework
        spring-oxm
        ${org.springframework.version}
    
    
        org.springframework
        spring-jms
        ${org.springframework.version}
    
    
        org.springframework
        spring-tx
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-websocket
        ${org.springframework.version}
    
    
        org.springframework
        spring-web
        ${org.springframework.version}
    


    
        org.springframework
        spring-webmvc-portlet
        ${org.springframework.version}
    

    
        org.springframework
        spring-webmvc
        ${org.springframework.version}
    
    

    
    
        org.springframework
        spring-test
        ${org.springframework.version}
    

    
    


    
        junit
        junit
        4.12
        test
    
    
        tk.mybatis
        mapper
        3.5.2
    
    
        com.github.pagehelper
        pagehelper
        3.7.5
    
    
        org.mybatis
        mybatis
        3.4.5
    

    
        mysql
        mysql-connector-java
        5.1.47
    
    
        org.mybatis
        mybatis-spring
        1.3.2
    
    
        com.alibaba
        druid
        1.1.10
    

    
        javax.servlet
        javax.servlet-api
        3.1.0
        provided
    

    
        jstl
        jstl
        1.2
    





  org.apache.maven.plugins
  maven-compiler-plugin
  3.2
  
    1.8
    1.8
    UTF-8
    true
  




  org.apache.tomcat.maven
  tomcat7-maven-plugin
  2.1
  
    8080
    tomcat7
  


后记

博客主页:https://manor.blog.csdn.net
欢迎点赞  收藏 ⭐留言  如有错误敬请指正!
本文由 manor 原创,首发于 CSDN博客
不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号