`

在Struts1的一般方法中,使用ThreadLocal获取response,request,session

阅读更多

1:ThreadLocal 方法

 

package com.rtt.cppcc.basicinfo.util;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletUtil {
 
 private ServletContext context;
 private HttpServletRequest request;
 private HttpServletResponse response;
 private HttpSession session;
 
 
 private final static ThreadLocal<ServletUtil> contexts = new ThreadLocal<ServletUtil>();
 
 /**
  * 初始化请求上下文
  * @param ctx
  * @param req
  * @param res
  */
 public static ServletUtil begin(ServletContext  ctx, HttpServletRequest req, HttpServletResponse res) {
  ServletUtil rc = new ServletUtil();
  rc.context = ctx;
  rc.request = req;
  rc.response = res;
  rc.session = req.getSession(false);
  
  contexts.set(rc);
  return rc;
 }
 
 /**
  * 获取当前请求的上下文
  * @return
  */
 public static ServletUtil get(){
  return contexts.get();
 }
 

 public void end() {
  this.context = null;
  this.request = null;
  this.response = null;
  this.session = null;
  contexts.remove();
 }

 public HttpSession getSession() {
  return session;
 }

 public void setSession(HttpSession session) {
  this.session = session;
 }

 public ServletContext getContext() {
  return context;
 }

 public void setContext(ServletContext context) {
  this.context = context;
 }


 public HttpServletRequest getRequest() {
  return request;
 }

 public void setRequest(HttpServletRequest request) {
  this.request = request;
 }

 public HttpServletResponse getResponse() {
  return response;
 }

 public void setResponse(HttpServletResponse response) {
  this.response = response;
 }
}

 

2:过滤器

package com.rtt.cppcc.basicinfo.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletFilter implements Filter {
 private ServletContext context;
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  ServletUtil.get().end();//清除线程变量值

 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest req = (HttpServletRequest)request;
  HttpServletResponse res = (HttpServletResponse)response;
  ServletUtil.begin(this.context, req, res);//初始化线程变量值
  chain.doFilter(request, response);
 }

 @Override
 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  
 }
 
}

 

3:在web.xml 中配置过滤器

<filter>
  <filter-name>Response</filter-name>
  <filter-class>com.rtt.cppcc.basicinfo.util.ServletFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>Response</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 

 

4::获取对象

 

HttpServletResponse res = (HttpServletResponse) ServletUtil.get().getResponse();

 

 

参考地址:https://my.oschina.net/yyqz/blog/277359

分享到:
评论

相关推荐

    struts2中action如何获取jsp页面参数1.pdf

    - 避免在Action的构造函数中使用`ActionContext.getContext()`,因为在构造函数执行时,ActionContext可能尚未初始化。 - 为了保持良好的编程习惯,推荐在Action的execute方法或者特定的方法中获取并使用...

    servlet与Struts action线程安全问题分析

    1. **使用局部变量:** 避免在servlet或action中使用实例变量,转而使用局部变量存储请求特定的数据。 2. **同步控制:** 对于必须共享的状态,使用synchronized关键字或Lock接口进行同步控制,确保在同一时间只有...

    1剑盛二面准备试题.txt1剑盛二面准备试题.txt

    65. **JSP内置对象**:JSP中有9个内置对象,包括request、response、out、session、application、config、pageContext、page以及exception。 66. **JSP的作用域**:有四种作用域:page作用域、request作用域、...

    java面试资料

    JSP页面可以通过内置对象如`request`、`response`、`out`、`session`、`application`、`pageContext`、`page`、`config`和`exception`等来访问HTTP请求和响应的信息,以及控制页面流。 - `&lt;jsp:userBean&gt;`: 用于...

    Java基础系列面试题(88个).pdf

    32. `Iterator`使用时需先调用`iterator()`方法获取迭代器,然后通过`next()`遍历元素。 33. `Iterator`只能单向遍历,`ListIterator`支持双向遍历,还能修改元素。 34. 使用`Collections.unmodifiableList()`等...

    Java面试题和答案.pdf

    - **多线程安全**: 被`final`修饰的变量在线程间可见且不可更改,因此在多线程环境中使用`final`变量是线程安全的。 **5. `java.lang.Math.round(-1.5)`等于多少?** - `Math.round()`会将参数四舍五入到最接近的...

    MS知识点总结.txt

    - `request`、`response`、`out`、`session`、`application` 等。 47. **JSP 的四种作用域** - page:页面范围。 - request:请求范围。 - session:会话范围。 - application:应用程序范围。 48. **Session...

    计算机专业毕业论文题目_大全.docx

    - ASP基础:深入理解ASP语法、内置对象(如Request、Response、Session、Application等)以及如何创建动态网页。 - 数据库交互:利用ADO(ActiveX Data Objects)连接和操作数据库,如SQL Server。 - ASP与HTML、CSS...

    java面试知识

    - **本地方法栈**:为虚拟机使用到的Native方法服务。 ##### 内存泄露和内存溢出 - **内存泄露**:不再使用的对象没有被垃圾回收机制及时回收,导致内存占用持续增加。 - **内存溢出**:当程序申请内存超过系统所...

Global site tag (gtag.js) - Google Analytics