jsp网页session、cookie、隐藏域、url参数传递四种会话及跟踪方式

来源:互联网 发布:数据结构算法与应用 编辑:程序博客网 时间:2024/04/30 20:33

1.Session 
HttpSession session = request.getSession(); 
session.setAttribute("name", "zhangsan"); 
session.setAttribute("pwd", "aaa"); 
String name = (String) session.getAttribute("name");

2.cookie: 
//创建Cookie 
Cookie cookie = new Cookie("name", "zhangsan"); 
//设置Cookie的超时时间 
cookie.setMaxAge(24 * 60 * 60 *60); 
//把Cookie发送到客户端 
response.addCookie(cookie);

//得到客户端发送的Cookie 
Cookie [] cookies = request.getCookies(); 
for(int i=0; i <cookies.length; i++) { 
Cookie temp = cookies[i]; 
String key = temp.getName(); 
String value = temp.getValue(); 
}

3.隐藏表单域 
<input type="hidden" name="name" value="zhangsan" /> 
request.getParameter("name");

4.Url重写 
问号传参 
LoginServlet?username=zhangsan&pwd=123 
String name = request.getParameter("username"); 
String pwd =request.getPareameter("pwd");
内部跳转: 
LoginServlet 
request.getRequestDispatcher("index.jsp").forward(request, resposne); 
外部跳转: 
response.sendRedirect("index.jsp"); 
内部跳转是一次请求和一次响应 
外部跳转是两次请求和两次响应 

ServletContext:Servlet上下文对象 
它是一个公共区域,可以被所有的客户端共享 
setAttribute():向公共区域里放入数据 
getAttribute():从公共区域里取数据




Servlet 
当然,在servlet中,一般跳生在doGet, doPost等方法里面。
 
1)  redirect 
方式
 
response.sendRedirect("/a.jsp"); 
面的路径是相路径。sendRedirect可以将面跳到任何面,不一定局限于本web
用中,如: 
response.sendRedirect("http://www.ycul.com"); 

浏览器地址栏变化。 
这种方式要传值出去的,只能在urlparameter或者放在session中,无法使用request.setAttribute传递 

2) forward
方式
 
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); 
dispatcher .forward(request, response); 
面的路径是相路径。forward方式只能跳到本web用中的
面上。 

浏览器地址不会化。 
使用这种方式跳传值可以使用三方法:urlparametersessionrequest.setAttribute

 

3)插入<a href=url></a>,页面跳转。?! 

JSP

1)  response.sendRedirect(); 
servletresponse.sendRedirect()方式一
 

句前不允out.flush(),如果有,会有异常:
 
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client. 
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) 
... 
浏览器地址栏变
 
如果要跳到不同主机下,跳后,此句后面的句会继续执行,如同新线程,但是response的操作已无意了;
 
如果要跳到相同主机下,此句后面的行完成后才会跳
 


2)  response.setHeader("Location",""); 
句前不允out.flush(),如果有,面不会跳
 
浏览器地址栏变
 
句后面的行完成后才会跳
 

3)  <jsp:forward page="" /> 
句前不允out.flush(),如果有,会有异常:
 
java.lang.IllegalStateException: forward() not allowed after buffer has committed. 
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134) 
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101) 
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) 
... 
浏览器地址
,但是只能跳到当前主机下 
句后面的行完成后才会跳