import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionTest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
// Cookie cookie = new Cookie("JSESSIONID", session.getId());
// cookie.setMaxAge(50000);
// response.addCookie(cookie);
session.setAttribute("username", "name");
//url重写前,必须要有request.getSession(),不然不会再超链接后带上JSESSIONID。
String url = response.encodeRedirectURL("/SessionTest/servlet/Test");
response.sendRedirect(url);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
实验演示禁用Cookie后servlet共享数据导致的问题。
解决方案:URL重写
response. encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的url地址进行重写。
response. encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写
附加:
Session的失效
Web.xml文件配置session失效时间
//下面是response. encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写
//网站首页,显示网站所有商品
public class ListBookServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getSession();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("本网站有如下书:<br/><br/>");
//向用户展示网站所有的商品
Map<String,Book> map = Db.getBooks();
for(Map.Entry<String, Book> me : map.entrySet()){
Book book = me.getValue();
String url = response.encodeURL("/day07/servlet/BuyBookServlet?bookid="+book.getId());
out.println(book.getName() + " <a href='"+url+"' target='_blank'>购买</a>");
out.println("<br/>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}