- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 web.xml 中:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<display-name>Spring MVC Servlet</display-name>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
在 spring-dispatcher-servlet.xml 中
<context:component-scan base-package="lei.spring.mvc.controller" />
在applicationContext.xml中
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" p:cookieName="clientLang" />
我将clientLang cookie的内容设置为en-CA后,spring只向我的浏览器返回如下异常:
java.lang.IllegalArgumentException: Locale part "en-CA" contains invalid characters
at org.springframework.util.StringUtils.validateLocalePart(StringUtils.java:710)
at org.springframework.util.StringUtils.parseLocaleString(StringUtils.java:690)
at org.springframework.web.servlet.i18n.CookieLocaleResolver.parseLocaleCookieIfNecessary(CookieLocaleResolver.java:164)
at org.springframework.web.servlet.i18n.CookieLocaleResolver.resolveLocaleContext(CookieLocaleResolver.java:136)
at org.springframework.web.servlet.DispatcherServlet.buildLocaleContext(DispatcherServlet.java:1043)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:955)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
然后我尝试创建自己的 MyCookieLocaleResolver 类来捕获所有异常并返回默认的 Locale 实例:
public class MyCookieLocaleResolver extends CookieLocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
try {
return super.resolveLocale(request);
} catch (Exception exception) {
return new Locale.Builder().setLanguage("en").setRegion("CA").build();
}
}
}
将 applicationContext.xml 更改为:
<bean id="localeResolver" class="package.MyCookieLocaleResolver" p:cookieName="clientLang" />
但是 spring 仍然向我的浏览器返回相同的异常。我阅读了 DispatcherServlet 的代码。似乎实例 this.localeResolver 为空,它不是来自 localeResolver 实例。它总是使用 CookieLocaleResolver 实例。如何将 localeResolver 实例设置为 DispatcherServlet?
protected LocaleContext buildLocaleContext(final HttpServletRequest request) {
if (this.localeResolver instanceof LocaleContextResolver) {
return ((LocaleContextResolver) this.localeResolver).resolveLocaleContext(request);
}
else {
return new LocaleContext() {
@Override
public Locale getLocale() {
return localeResolver.resolveLocale(request);
}
};
}
}
最佳答案
在我重写了两个方法之后,它工作正常:
public class MyCookieLocaleResolver extends CookieLocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
try {
return super.resolveLocale(request);
} catch (Exception exception) {
return Locale.forLanguageTag("en-CA");
}
}
@Override
public LocaleContext resolveLocaleContext(final HttpServletRequest request) {
try {
return super.resolveLocaleContext(request);
} catch (Exception exception) {
return new LocaleContext() {
@Override
public Locale getLocale() {
return Locale.forLanguageTag("en-CA");
}
};
}
}
关于java - 当我使用 CookieLocaleResolver 时,我可以设置无效的 cookie 使 spring web 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073953/
是否可以使用应用程序名称的值(自动)设置cookiePath?例如,我有一个 test.war,因此它将在 bla.com/test/上提供,所以我希望我的 cookie 路径为 /test/ 而不是
我有两个文件用于我要翻译的文本: messages_es_ES.propertiesmessages_en_US.properties 我正在使用 CookieLocaleResolver: @Bea
我想首先通过检测 cookie 来解析用户的语言环境,如果没有,则通过接受语言 header 来解析。 Spring 似乎只想接受一个 LocaleResolver。 有趣的是,CookieLocal
我有一个 Spring Boot 应用程序,它具有用于语言环境解析器的 org.springframework.web.servlet.i18n.CookieLocaleResolver。如果存在像
在 web.xml 中: contextConfigLocation /WEB-INF/applicationContext*.xml org.springframewo
我是一名优秀的程序员,十分优秀!