SpringMVC-----拦截器与国际化
作者:互联网
拦截器
springmvc提供了拦截器机制:允许运行目标方法之前进行一些拦截工作,或者目标方法运行之后进行一些其他处理;
Filter:javaWeb
springmvc提供了拦截器机制:
perHandle:
在目标方法运行之前调用,返回boolean:
return true;(chain,doFilter)放行,反之。
postHandle:
在目标方法运行之后调用;
afterCompletion:
在请求整个完成之后;来到目标页面之后
chain.doFilter() 放行;资源响应之后;
1)拦截器是一个接口
2) 实现HandlerInterceptor
3) 配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置某个拦截器 -->
<bean class="com.atguigu.controller.InterceptorController"></bean>
<!-- 具体配置某个拦截器 -->
<mvc:interceptor>
<!-- 只拦截这个test请求 -->
<mvc:mapping path="/test01"/>
<bean class="com.atguigu.controller.InterceptorController"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截器的运行流程
正常运行流程
拦截器的preHandle------目标方法--------拦截器postHandle
·````````···~页面-------拦截器的afterCompletion
1a09f8feebd37978b4e.png)
其他流程:
1.只要preHandle不放行,其他流程就不会进行
2. 只要放行,afterCompletion都会执行;
多个拦截器:
正常流程:
异常流程:
1.不放行
哪一块不放行从此以后都没有
2.。如果有一个拦截器不放行,但是他前面放行的拦截器的afterCompletion总会执行;
流程:Filter的流程;
拦截器的preHandle:是按照顺序执行
拦截器的postHandle:是按照逆序执行
拦截器的afterCompletion:是按照逆序执行
已经放行的afterCompletion总会执行
什么时间用Filter,什么时间用拦截器?
如果某些功能需要其他组件配合完成, 我们就使用拦截器:
其他情况可以用Filter
国际化
1.写好国际化资源文件
Welcomeinfo=welcome to atguigu.com
username=USERNAME
password=PASSWORD
loginBtn=LOGI
Welcomeinfo=\u6B22\u8FCE\u6765\u5230\u7CFB\u7EDF
username=\u7528\u6237\u540D
password=\u5BC6\u7801
loginBtn=\u767B\u5F55
2.让Spring的RequestBundleMessageSource管理国际化资源文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="login"></property>
</bean>
3.直接去页面 取值
<h1><fmt:message key="Welcomeinfo"/></h1>
<form action="">
<fmt:message key="username"/><input type="text">
<br>
<fmt:message key="password"/><input type="password">
<br>
<input type="submit" value="<fmt:message key="loginBtn"/>">
<a href="tologin?locale=zh_CN">中文</a>
<a href="tologin?locale=en_US">英文</a>
</form>
点击中英文切换
1.实现国际化接口
package com.atguigu.controller;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.LocaleResolver;
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale l= null;
String parameter = request.getParameter("locale");
//如果带了local参数就用参会指定的区域信息,如果没有就用req头的
if (parameter !=null && !"".equals(parameter)) {
l = new Locale(parameter.split("_")[0],parameter.split("_")[1]);
}
else {
l = request.getLocale();
}
return l;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
throw new UnsupportedOperationException(
"Cannot change HTTP accept header - use a different locale resolution strategy"
);
}
}
<!-- 自定义区域解析器-->
<bean id="localeResolver" class="com.atguigu.controller.MyLocaleResolver"></bean>
@Autowired
private MessageSource messageSource;
@RequestMapping("/tologin")
public String tologinPage(Locale locale) {
return "hello";
}
标签:拦截器,SpringMVC,流程,Locale,放行,-----,parameter,afterCompletion 来源: https://blog.csdn.net/weixin_51625266/article/details/119255265