一、Servlet请求转发和请求重定向
1.1使用格式
1.1.1 请求转发:
(1) 使用requestDispatcher对象:
转发格式:request.getRequestDispatcher(“path”).forward(request,response)
(2) 使用jsp动作元素:
<jsp:forward page=""/>
1.1.2. 请求重定向:
使用response的rsendRedirect方法:
重定向格式:response.sendRedirect(“path”);
1.2区别
1.2.1请求转发
- 是一种服务器行为,转发时request对象会被保存,会被转发到的另外一个servlet或其他资源中的request对象,request对象中转的request对象是同一个对象
- 这个过程是服务端行为,所以客户端的地址栏不会发生改变。
- 请求转发只发送了一次请求
- /代表当前web站点的根目录
- 请求转发只能转发到当前web应用
1.2.2请求重定向
-
是一种客户端行为,实际上期间发生的是两次请求,前一次的请求request对象不会作保存, request对象中转的request对象不是同一个对象
-
地址栏地址会发生改变
-
重定向发了两次请求(本质区别)
-
/代表的是当前web站点
-
重定向可以重定向到外部资源
二、Servlet Session和request
session
- 服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。
- 作用域: 不关浏览器就会一直在
- 用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。
- 整个会话期间,在所有的页面都使用这些数据的时候使用
- 用处: 常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。
- 方法: session.setAttribute(); session.getAttribute(); session.removeAttribute();
//servlet
HttpSession session=request.getSession();
session.setAttribute("uname", name);//key-values 把拿到的用户名存储起来
//jsp
<%String username=(String)session.getAttribute("uname");%>
<p class="navbar-brand">欢迎 <%=username %></p>
- session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)
- session被销毁:
1)session超时;
2)客户端关闭后,再也访问不到和该客户端对应的session了,它会在超时之后被销毁;
3)调用session. invalidate();
request
- request是表示一个请求,只要发出一个请求就会创建一个request
- 作用域: 只有此次请求范围内会有用
- 用处: 常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。
- 方法: request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().
弹框:
String content=request.getParameter("content");
if(hs.addHomework(hmaster)) {
request.setAttribute("rs", "作业布置成功");
}
- 设置request.getAttribute()的为 Object对象 类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。
<%String rs=(String)request.getAttribute("rs");%>
<script type="text/javascript">
var msg='<%=rs%>';
//js中如果变量的值是-1,null,"" 会自动默认是false
if(msg!="null"){
alert(msg);//弹框
}
</script>
区别(request.setAttribute()和session.setAttribute())
- setAttribute()这个方法,在JSP内置对象session和request都有这个方法,这个方法作用就是保存数据,然后还可以用getAttribute方法来取出。
如现在有个User对象,User curruser = new User(“wangwu”, 24, “男”);
1、request.setAttribute (“curruser”, curruser)这个方法是将curruser这个对象保存在request作用域中,然后在 转发 进入的页面就可以获取到你的值;
-
当然也可以利用 框架标签 来获取,比如struts标签,还有jstl。
-
也可以在jsp页面编写java小脚本来获取:<% User myuser =(User)request.getAttribute(“curruser”)%>,在jsp页面显示值:<%=myuser.getName()%>。
2.session.setAttribute(“curruser”, curruser)这个方法和上面唯一的区别就是作用域
-
在你整个程序启动的时候,如果在session中保存了数据,那么在你这个无论你在哪个页面,在什么时候都可以获取到这个值,它是全局的,只要你的这个程序是启动的。
-
session默认的过期时间是30分钟,过期无效,可以去修改过期时间这个值。
(https://blog.csdn.net/Hadas_Wang/article/details/41928321 )