Day18 Servlet请求转发和请求重定向 Session和request

一、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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值