filter是否有线程安全的问题

s_h_o_w_i_c_y 2011-02-27 08:58:29
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
...全文
609 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 s_h_o_w_i_c_y 的回复:]
这样一个请求如http://ip:port/path?charset=GB2312就把全局变量charset设为GB2312。

而之后另外个请求http://ip:port/path的编码是否就变为GB2312
[/Quote]

会的。

如果只是想针对单独请求的话,可以在 doFilter 中这样:

String c = charset;
if(request.getParamert("charset") != null){
c = request.getParamert("charset");
}

Filter 是在 Servlet 容器启动时就初始化的,因此可以认为是以单例对象存在的,如果一个请求线程对其中的成员变量修改的话,会影响到其他的请求线程,因此认为是多线程不安全的。
宁波朱超 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 s_h_o_w_i_c_y 的回复:]
引用 2 楼 zhuchao_ko 的回复:
引用楼主 s_h_o_w_i_c_y 的回复:
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??


WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容……
[/Quote]

你要修改的是成员变量那会造成线程安全问题。
s_h_o_w_i_c_y 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhuchao_ko 的回复:]
引用楼主 s_h_o_w_i_c_y 的回复:
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??


WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容器呢?
[/Quote]

没说改web.xml啊。就是说比如在doFilter里面这么一句:


if(request.getParamert("charset")!=null){
charset = "GB2312";
}
(web.xml配的可能为utf-8)

这样一个请求如http://ip:port/path?charset=GB2312就把全局变量charset设为GB2312。

而之后另外个请求http://ip:port/path的编码是否就变为GB2312
宁波朱超 2011-02-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 s_h_o_w_i_c_y 的回复:]
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
[/Quote]

WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容器呢?

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧