ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC-----拦截器与国际化

2021-07-30 23:31:22  阅读:223  来源: 互联网

标签:拦截器 SpringMVC 流程 Locale 放行 ----- parameter afterCompletion


拦截器

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有