項目中有個判斷session是否有效的功能,若session失效時,當用戶點擊其他需要訪問到後臺的鏈接時,則會alert出session失效的提示語句。然而在刷新列表時,用到了window.location.reload()這句代碼,彈出的中文提示則變成亂碼,其他情況下提示則正常。
原先代碼如下:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String url = request.getServletPath();
//這裏判斷目錄,後綴名,當然也可以寫在web.xml中,用url-pattern進行攔截映射
if ((!request.getServletPath().equals("/login.do"))) {
if (session.getAttribute("userSession") == null) {
session.invalidate(); //清空所有已定義的session
response.setContentType("text/html;charset=gb2313");
PrintWriter out = response.getWriter();
out.println("<script language='javascript' type='text/javascript'>");
out.println("alert('由於長時間沒操作或者賬號在其他地方登錄,請重新登錄!');");
// out.println("window.location.href='" + request.getContextPath() + "/index.jsp';");
out.println("</script>");
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}
將
response.setContentType("text/html;charset=gb2313");
改成
response.setContentType("text/html;charset=UTF-8");
問題則解決。