67,512
社区成员
发帖
与我相关
我的任务
分享
package com.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class actioncontext implements java.io.Serializable {
static ThreadLocal<actioncontext> actionContext = new ThreadLocal<actioncontext>();
static Map<String, Object> context = new HashMap<String, Object>();
static actioncontext ac = new actioncontext();
public Object get(String key) {
return context.get(key);
}
public void put(String key, Object value) {
context.put(key, value);
}
public actioncontext getcontext(){
return (actioncontext)actionContext.get();
}
public void putcontext(actioncontext action){
actionContext.set(action);
}
public static actioncontext getInstance(){
if(ac == null ){
ac = new actioncontext();
}
return ac;
}
public void setRequest(HttpServletRequest request){
ac.put("request",request);
}
}
package com.util;
import javax.servlet.http.HttpServletRequest;
public class ReqUtil {
public static void setRequest(HttpServletRequest request) {
actioncontext ac = actioncontext.getInstance();
ac.setRequest(request);
ac.putcontext(ac);
}
public static HttpServletRequest getRequest(){
return (HttpServletRequest)actioncontext.getInstance().getcontext().get("request");
}
}
//测试
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ReqUtil.setRequest(request);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.print(ReqUtil.getRequest().getParameter("ac"));
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* 获取和设置当前用户信息的工具类。
*/
public final class CurrentUser extends ThreadLocal<UserInfo> {
/**
* 单例
*/
private static final CurrentUser SINGLETON = new CurrentUser();
/**
* 不需要实例化
*/
private CurrentUser() {
}
/**
* 获取当前用户信息。
*
* @return 当前用户信息
*/
public static UserInfo getUser() {
return SINGLETON.get();
}
/**
* 设置当前用户信息
*
* @param user
* 当前用户信息
*/
public static void setUser(UserInfo user) {
SINGLETON.set(user);
}
}
/**
* 过滤器,用以将session中的UserInfo放入CurrentUser的ThreadLocal中。
*/
public class CurrentUserFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
// 初始化当前线程本地内容
UserInfo userInfo = ((HttpServletRequest) request).getSession().getAttribute("userInfo");
CurrentUser.setUser(userInfo);
// 让过滤器链表中的其他过滤器继续处理
chain.doFilter(request, response);
} finally {
// 移除当前线程本地内容
CurrentUser.setUser(userInfo);
}
}
}