在jap静态页面生成时会出现加上Jsessionid=5F4771183629C9834F8382E23BE13C4C。而静态页面地址就成了类似www.987114.cn/Jsessionid=5F4771183629C9834F8382E23BE13C4C?a.html,访问的页面就不存在。
sessionid是作为一个临时cookie放在浏览器端的。session的具体信息放在服务器端。每次浏览器发出的请求,都会在http header里 带上 sessionid来标识自己。
URL 重写是由 操作自动执行的。如果 JSP 容器检测到一个存储用户当前会话标识的 cookie,那么就不必进行重写。但是,如果不存在这样的 cookie,那么 生成的所有 URL 都会被重写以编码会话标识。注:如果在随后的请求中存在适当的 cookie,那么 将停止重写 URL 以包含该标识。
我们在过滤器上做点手脚就可以解决这样的问题
代码:
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class RemoveJsessionFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Hsrw wrappedResponse = clearSessionId(request, response);
chain.doFilter(request, wrappedResponse);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
private Hsrw clearSessionId(ServletRequest request, ServletResponse response) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// clear session if session id in URL
if (httpRequest.isRequestedSessionIdFromURL()) {
HttpSession session = httpRequest.getSession();
if (session != null)
session.invalidate();
}
Hsrw wrappedResponse = new Hsrw(httpResponse);
return wrappedResponse;
// process next request in chain
}
}
web配置:
<filter>
<filter-name>RemoveJsessionFilter</filter-name>
<filter-class>filter.RemoveJsessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RemoveJsessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
本文首发:java编程(http://www.987114.cn:80/blog/),转载请注明出处。
文章来源于:java编程 http://www.987114.cn:80/blog/
|