从任何类中都能获取request中的属性,只能用线程局部变量吗

从任何类中都能获取request中的属性,只能用线程局部变量吗,第1张

web应用中实现国际化,基于requestgetLocale获取请求者的国家语言,所以很多类中都会用到:

ResourceBundle messages = ResourceBundlegetBundle("message",locale);

来获取适当的资源文件,因此需要在所有类中都能取到request中的locale属性。

我可以创建一个线程局部变量来存放它,如:

public class I18nUnit {

private static final ThreadLocal<String locale = new ThreadLocal<String();

public static String getLocale() {

if (localeget() == null) {return "";}return (String) localeget();}}在servlet的doService方法开头设置这个变量,然后在任意类中用I18nUnitgetLocale()获取,能够实现。

但我觉得这个办法挺另类挺绕的,应该有更容易的获取方式吧?问题补充:lovewhzlq:那么在任意类中如何获取session呢?我原来都是requestgetSession(),任意类中如果取不到request,session也得不到啊问题补充:bohemia:有些普通类中要抛出异常,异常消息需要是国际化的,抛出后是要展示给用户看的,您认为有其它方法可以解决吗?

在Servlet或者是在Struts1中获取当前用户的Session方法是:

);

注意:request的类型是:>Map session = ActionContextgetContext()getSession();

import javanet;

public class >

通过serlvet传递过去,比如你可以定义这样的一个方法,在serlvet中调用就可以了,至于你说的不通过serlvet之类的获取是不可能的。

public void add(>

如果是和>

你必须要有一个request的引用,否则是取不到的。request可以通过控制器传入,有了request自然就可以取到session了,或者可以通过spring的WebUtils取Session数据,如下:

拦截器举例:

public boolean preHandle(>

以上就是关于从任何类中都能获取request中的属性,只能用线程局部变量吗全部的内容,包括:从任何类中都能获取request中的属性,只能用线程局部变量吗、如何在java普通类中获取session、jsp页面上如何把从url传下来的值保存到request或者session里面,然后普通的java类,又是如何获取的呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9316191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存