- 浏览: 338237 次
文章分类
最新评论
-
luokery:
你把正常的代码放到try里面不就好了, 异常的时候就catch ...
巧用while循环避免执行除了异常处理的的另一个处理机制 -
java_doom:
这个行号根据什么来的 为什么不是连续的?
别拿Hadoop map key当id使 -
mixer_b:
...
写博客的那些事儿 -
flyfx:
谢谢谢谢
java break,continue,return 使用。【借鉴与改编】 -
andilyliao:
比起青鸟 我更鄙视大学。
北大青鸟就让你们这么鄙视吗.
相信很多朋友在做J2EE国际化的时候,很可能遇到这个问题。因为request中的Locale是非常重要的,它代表着用户浏览器的设置,同时,很多应用都是在这里读取用户Locale然后进行国际化的。
但是问题就在于,如果我们的应用中很多地方都适应request.getLocale()来获取Locale,但是我们希望使用自己的Locale,比如说是User信息中包含了一个叫Locale的字段。那么我们怎样使用比较方便呢?有人说把Locale存在Session中比较合适。其实这个要视情况而定,我们应用中很多使用request.getLocale(),如果我们放在Session中,那么要去改很多getLocale的方法,很不合算。
如果不需要浏览器的Locale或者说,需要让request的getLocale返回一个Locale是我们设置的User.getLcoale()字段的话,怎么解决这一问题,request没有setLocale()这一方法。
- 在web.xml中使用filter,给request包装,重写getLocale()方法
1.使用HttpServletRequestWrapper包装用户的request,在这里可以构造自己想要的方法:
- public class LocaleRequestWrapper extends HttpServletRequestWrapper{
- public LocaleRequestWrapper(HttpServletRequest request) {
- super(request);
- }
- public Enumeration getLocales() {
- Vector v = new Vector(1);
- v.add(getLocale());
- return v.elements();
- }
- public Locale getLocale() {
- String localeStr = ((HttpServletRequest) getRequest()).getSession().getAttribute("locale").toString();
- Locale locale = new Locale(localeStr);
- return locale;
- }
- }
这里,locale变量被设置在了Session中,在request中提取,并包装了改Locale并向下传递。
getLocales()返回的是browser中用户所选的所有languages的一个list。而默认情况下,getLocale()返回的是第一个,对该方法进行重写之后,返回的就是我们放在Session中的locale了。
2.在I18NFilter 中提取用户的request并包装为LocaleRequestWrapper,向下传递:- public class I18NFilter implements Filter {
- transient static protected MessageLogger LOG = MessageLogger.getLogger(I18NFilter.class);
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- if (servletRequest instanceof HttpServletRequest && ((HttpServletRequest) servletRequest).getSession().getAttribute("locale") != null) {
- LOG.debug("I18N filter processing...");
- HttpServletRequest req = (HttpServletRequest)servletRequest;
- LocaleRequestWrapper wrapper = new LocaleRequestWrapper(req);
- filterChain.doFilter(wrapper, servletResponse);
- } else {
- filterChain.doFilter(servletRequest, servletResponse);
- }
- }
- @Override
- public void destroy() {
- }
- }
- <filter>
- <filter-name>I18NFilter</filter-name>
- <filter-class>com.rsi.uif.filter.I18NFilter</filter-class>
- </filter>
- <filter>
- <filter-mapping>
- <filter-name>I18NFilter</filter-name>
- <url-pattern>/route/*</url-pattern>
- </filter-mapping>
这种方案是可行的,但是它有一个明显的问题:当用户第一层登陆进来的时候,由于初次访问server,session中的locale还没有设置(及可能是filter拦截的locale的时候,要访问的页面还没有还是执行,session中没有locale),这时候会出现整个架构使用了浏览器的lcoale。
根据我自己的具体应用,做了如下修改:
- 抛开filter,在核心的servlet中的适当位置,对request进行wrap:
好了,再按照刚才的第一个方案中使用的wrapper,对locale封装。这样user Locale 就进入我们的系统啦,融合默契。
- public class LocaleRequestWrapper extends HttpServletRequestWrapper{
- private Locale locale;
- public LocaleRequestWrapper(HttpServletRequest request,Locale locale) {
- super(request);
- this.locale = locale;
- }
- public Enumeration getLocales() {
- Vector v = new Vector(1);
- v.add(getLocale());
- return v.elements();
- }
- public Locale getLocale() {
- return this.locale;
- }
- }
- LocaleRequestWrapper lrw = new LocaleRequestWrapper((HttpServletRequest)request,context.getUserContext().getUser().getLocale());//封装
- dispatcher.forward(lrw, response);//转发给view
后记--值得改进一下的地方:
其实不应该把request的getLocales()给简单的重写掉,保留browser的locale在某些情况下是非常有用的。
发表评论
-
java如何终止线程
2012-04-24 21:38 1086对于线程的终止或者中断,由于java中Thread.stop方 ... -
ubuntu-11.10-server-i386学习笔记-网络基本配置
2012-04-23 22:11 10511. 静态IP地址配置 配置文件路径:/etc/networ ... -
ubuntu-11.10-server-i386学习笔记-Apache安装
2012-04-23 22:11 845第一步:先更新安装包缓存 1.1 sudo apt-get ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器安装
2012-04-23 22:10 1142在安装SVN前,假设你的Apache已经安装好了。 ... -
ubuntu-11.10-server-i386学习笔记-SVN版本服务器-客户端测试
2012-04-23 22:10 756进入客户端测试之前,您应该确保svn服务器已经正确安装,如果您 ... -
svn服务器搭建经验总结
2012-04-23 22:09 1035从最近几天的实验来看,svn(Subversion versi ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(二)
2012-04-18 13:59 1958上一节贴出了web应用访问生成报告的action ... -
Java根据word模板生成word文档之后台解析和实现及部分代码(一)
2012-04-18 13:59 2140后台主要工作是解析XML定义的标签文件,并 ... -
单例类、final、抽象类
2012-04-15 23:53 1675前些日子一直没写博客,因为病了,所以就耽误了,现在好点了 ... -
一个Java时间工具类
2012-04-14 21:50 1046主要包含了对时间操作的一些工具方法,仅供参考吧! ... -
POI Excel导出,我的又一个模板方法
2012-04-14 21:49 2868下面有源码,下载就可以用,如果因为包的问题,就拷贝我 ... -
Poi 读写Excel 合并ExcelSheet Struts2实现
2012-04-14 21:48 1544网上有许多人在找这样的例子,有多个Excel,要把他们合 ... -
POI读取Excel浅谈
2012-04-14 21:48 936先看代码,挨句解释: 一般遍历使用两种方式,1:得到总 ... -
struts2项目中静态html在firefox下乱码的解决
2012-04-13 00:03 1033struts2 项目,通常开 ... -
黑马程序员——Java开发前奏
2012-04-12 23:59 830对于Java,我的一 ... -
《JAVA与模式》之单例模式
2012-04-12 23:58 796在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模 ... -
Java中的String不再纠结
2012-04-12 23:58 1463又是新的一月,又是各种总结,先分享一下java中st ... -
swing绘制了一只直升机
2012-04-12 23:56 3565周末用swing绘制了一只直升机 对swing的的绘制技 ...
相关推荐
小红薯电商实操课小红书开店实操必学课.mp4
AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
基于java的新能源充电系统设计与实现.docx
吸波材料建模单元周期仿真模拟,参数优化,计算反射损耗,极化角,入射角,等效阻抗等
AGV调度系统的仿真平台(含源码+项目说明+实验结果分析).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
【本体】Internet Download Manager v6.42.26.zip
NLP中文垃圾短信分类系统源码+设计全部资料+文档报告(自然语言处理课设).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
Python大作业封面.doc
基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开
操作系统课后题参考答案
几何图霸软件是一个非常强大的三维几何图形绘制工具,可以根据约束条件绘制标准示意图,写相关技术类文章需要绘图时很适用。
《写给大众的健康饮食指南》.mp4
智能相册Piktures v2.19 build 815 for 高级版.mp4
建行开养老金必中58元微信立减金亲测.mp4
Converter视频音频转换器v2.2.5.2解锁VIP版.mp4
车来了v4.59.0高级版 精准实时公交地铁神器.mp4
基于java的招生宣传管理系统设计与实现.docx
iiiicfdfdsffffffffffffffffffff
这是本人期末复习期间的产物,传上来主要是为了方便保存和复习,如有错漏还请谅解。