全站编码过滤器
public class EncodingFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
if (this.encoding == null || "".equals(this.encoding)) {
this.encoding = "UTF-8";
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding(encoding);
response.setContentType("text/html; charset=" + encoding);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
public class MyRequest extends HttpServletRequestWrapper {
private String encoding;
private String serverGetEncoding;
private Map<String, String> customHeaders;
public MyRequest(HttpServletRequest request) {
super(request);
this.customHeaders = new HashMap<>();
}
public MyRequest(HttpServletRequest request, String encoding, String serverGetEncoding) {
super(request);
this.encoding = encoding;
this.serverGetEncoding = serverGetEncoding;
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if(super.getMethod().equalsIgnoreCase("GET")){
try {
value = new String(value.getBytes(serverGetEncoding), encoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
public void addHeader(String name, String value) {
this.customHeaders.put(name, value);
}
@Override
public String getHeader(String name) {
String value = this.customHeaders.get(name);
if (value != null) {
return value;
}
return ((HttpServletRequest) getRequest()).getHeader(name);
}
@Override
public Enumeration<String> getHeaderNames() {
Set<String> set = new HashSet<>(customHeaders.keySet());
Enumeration<String> enumeration = ((HttpServletRequest) getRequest()).getHeaderNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
set.add(name);
}
return Collections.enumeration(set);
}
}
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>priv.technologyshareweb.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>
自定义 SessionContext
public class MySessionContext {
private static HashMap<String, HttpSession> myMap = new HashMap<String, HttpSession>();
public static synchronized void addSession(HttpSession session) {
if (session != null) {
myMap.put(session.getId(), session);
}
}
public static synchronized void delSession(HttpSession session) {
if (session != null) {
myMap.remove(session.getId());
}
}
public static synchronized HttpSession getSession(String sessionId) {
if (sessionId == null) {
return null;
}
return myMap.get(sessionId);
}
}
@WebListener
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
MySessionContext.addSession(session);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
MySessionContext.delSession(session);
}
}
<listener>
<listener-class>priv.technologyshareweb.listener.MySessionListener</listener-class>
</listener>