您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03-SpringMVC拦截器-快速入门(解决System.out.println控制台中文乱码浏览器不乱码)
发布时间:2025-01-10 20:06:13编辑:雪饮阅读()
-
首先我们建立一个控制器
package sp21.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TargetController
{
@RequestMapping("/target")
public ModelAndView target(){
System.out.println("执行了TargetController的target");
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("name","wzgy");
modelAndView.setViewName("/target/index");
return modelAndView;
}
}
然后在pages/target目录中建立index.jsp如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主页</title>
</head>
<body>
${name}
</body>
</html>
此时访问测试链接如:
http://localhost:8080/SpringProject2Module1_war/target
会在页面中输出
wzgy
那么控制台其实还是乱码的。
在D:\software\apache-tomcat-8.5.68-windows-x64\apache-tomcat-8.5.68\bin\catalina.bat中
echo off的下面
新增
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
然后重启tomcat,重新部署项目。
有时候可能暂时不能生效,可能是缓存问题。
那么现在重新访问上面链接,控制台将输出如:
执行了TargetController的target
接下来你编写一个类去implements HandlerInterceptor接口
当你点击进入HandlerInterceptor可以发现有preHandle、postHandle、afterCompletion
分别这三个打头的方法进行了默认实现。
所以该接口不会自动在IntelliJ IDEA上面有红波浪线的下划线提示你要实现什么抽象方法。
但这里仍旧有个小技巧。就是在implements这个接口后的空类体内部,只要输入这三个方法名的前面开头部分字母就也可以提示到要实现的完整方法名,然后点击一下就快速实现了
例如你输入pre:

那么接下来这个完整的拦截器如:
package sp21.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor1 implements HandlerInterceptor {
/*
在目标方法执行之前执行
这里所谓的目标方法指的是
@Controller注解的控制器中
@RequestMapping注解的方法被访问的时候
例如你访问如:
http://localhost:8080/SpringProject2Module1_war/target
正好TargetController被注解为@Controller
里面的target方法被注解为
@RequestMapping("/target")
则此时这个target方法就是目标方法
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/*
* 这里返回值若是false,则接下来的流程不会继续执行,例如目标方法里面有返回ModelAndView,则页面看不到视图的
* */
System.out.println("MyInterceptor1的preHandle被执行");
return true;
}
/*
* 在目标方法执行之后,视图执行之前执行
* */
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor1的postHandle被执行");
}
/*
* 在流程都执行完毕后执行
* */
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor1的afterCompletion被执行");
}
}
那么接下来你配置Spring MVC的配置文件中新增拦截器配置如
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--对哪些自由执行拦截操作,这里配置为/**表示对所有方法都执行-->
<mvc:mapping path="/**"/>
<bean class="sp21.interceptor.MyInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
最后请求如
http://localhost:8080/SpringProject2Module1_war/target
并在控制台观察你输出的日志如:
MyInterceptor1的preHandle被执行
执行了TargetController的target
MyInterceptor1的postHandle被执行
MyInterceptor1的afterCompletion被执行
关键字词:SpringMVC,拦截器
相关文章
- 27-SpringMVC的请求-文件上传-多文件上传的代码实现
- 26-SpringMVC的请求-文件上传-单文件上传的代码实现2
- 25-SpringMVC的请求-文件上传-单文件上传的代码实现1(
- 24-SpringMVC的请求-文件上传-客户端表单实现
- 23-SpringMVC的请求-获得请求参数-获得请求头信息(获
- 22-SpringMVC的请求-获得请求参数-获得Servlet相关API
- 21-SpringMVC的请求-获得请求参数-自定义类型转换器(
- 20-SpringMVC的请求-获得请求参数-Restful风格的参数
- 19-SpringMVC的请求-获得请求参数-参数绑定注解@Reque
- 18-SpringMVC的请求-获得请求参数-配置全局乱码过滤器