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
相关推荐
- 避免在Action的构造函数中使用`ActionContext.getContext()`,因为在构造函数执行时,ActionContext可能尚未初始化。 - 为了保持良好的编程习惯,推荐在Action的execute方法或者特定的方法中获取并使用...
1. **使用局部变量:** 避免在servlet或action中使用实例变量,转而使用局部变量存储请求特定的数据。 2. **同步控制:** 对于必须共享的状态,使用synchronized关键字或Lock接口进行同步控制,确保在同一时间只有...
65. **JSP内置对象**:JSP中有9个内置对象,包括request、response、out、session、application、config、pageContext、page以及exception。 66. **JSP的作用域**:有四种作用域:page作用域、request作用域、...
JSP页面可以通过内置对象如`request`、`response`、`out`、`session`、`application`、`pageContext`、`page`、`config`和`exception`等来访问HTTP请求和响应的信息,以及控制页面流。 - `<jsp:userBean>`: 用于...
32. `Iterator`使用时需先调用`iterator()`方法获取迭代器,然后通过`next()`遍历元素。 33. `Iterator`只能单向遍历,`ListIterator`支持双向遍历,还能修改元素。 34. 使用`Collections.unmodifiableList()`等...
- **多线程安全**: 被`final`修饰的变量在线程间可见且不可更改,因此在多线程环境中使用`final`变量是线程安全的。 **5. `java.lang.Math.round(-1.5)`等于多少?** - `Math.round()`会将参数四舍五入到最接近的...
- `request`、`response`、`out`、`session`、`application` 等。 47. **JSP 的四种作用域** - page:页面范围。 - request:请求范围。 - session:会话范围。 - application:应用程序范围。 48. **Session...
- ASP基础:深入理解ASP语法、内置对象(如Request、Response、Session、Application等)以及如何创建动态网页。 - 数据库交互:利用ADO(ActiveX Data Objects)连接和操作数据库,如SQL Server。 - ASP与HTML、CSS...
- **本地方法栈**:为虚拟机使用到的Native方法服务。 ##### 内存泄露和内存溢出 - **内存泄露**:不再使用的对象没有被垃圾回收机制及时回收,导致内存占用持续增加。 - **内存溢出**:当程序申请内存超过系统所...