1.转发
作用:在多个页面交互过程中实现请求数据的共享.
过程:Web服务器内部将一个request请求的处理权交给另外一个资源,属于同一个访问请求和响应过程,所以request对象的信息不会丢失.
2.重定向
重定向就是通过各种方法将各种网络请求重新定个方向转到其他位置(如:网页重定向,域名重定向,路由选择的变化也是对数据报文经有路由的一种重定向.)
重定向使用的是response对象的sendRedirect()方法.
过程:Web服务器向浏览器返回的一个响应,浏览器接受此响应后再发送一个新的http请求到服务器,这属于两次不同的请求,则上一次请求的request信息将丢失.
例:登录页面Login:<body>
<form name="form" method="post" action="control.jsp">
用户名:<input type="text" name="username">
密码:<input type="password" name="pwd">
<input type="submit" value="登录">
</form>
</body>
welcome 页面:<html>
<head><title>欢迎页面</title></head>
<body>欢迎进入本页面</body>
</html>
control.jsp页面:<html>
<head>登录处理页面</head>
<body>
<% request.setCharacterEncoding("UTF-8");
String name=request.geyParameter("userName");
String pwd=request.geyParameter("pwd");
if(name.equals("admin")&&pwd.equals("123")){
request.getrequestDispatcher("welcome.jsp").forword(request,reponse);//转发
}else{
reponse.sendRedirect("Login.jsp");//重定向
}
%>
</body>
</html>
3.重定向和转发的区别:
<1>重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
<2>不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
<3>转发是在服务器端发挥作用,通过RequestDispatcher对象的forword()方法将提交信息多个页面间进行传递.重定向是在客户端发挥作用,通过请求新的地址实现页面转向.
4.会话
一个会话就是用户通过浏览器与服务器之间进行的一次通话.
session对象用于存储特定的用户会话所需的信息.session对象的引入是为了弥补http协议的不足,http协议是一种无状态的协议.
session对象的失效方式:超时失效 手动实效
超时失效的实现方式:<1>在页面中:通过setMaxInactiveInterval()方法设置session的非活动时间 例:<% session.setAttribute("Login","admin"); session.setMaxInactiveInterval(600); response.sendRedirect("admin.jsp"); %>
<2>在项目web.xml中设置. <session-config> <session-timeout>10<session-timeout> </session-config> 10的单位十分钟,设置0,-1表示永不超时 <3>在应用服务器中设置,在Tomcat目录/conf/web.xml中找到<session-config>元素,其中<session-timeout>元素中的30就是默认的时间,单位是分钟,可以修改其值. 手动实效:通过调用invalidate()方法实现,主要应用于用户注销场合.但若想清空session中的某个对象,则可以调用session.removeAttribute(String key)方法,将指定的对象从session中清除,session仍然有效.
session对象的常用方法:<1>void setAttribute(String key,Object value) 以key/value的形式将对象保留到session中
<2>Object getAttribute(String key) 通过key获取session中保存的对象
<3>void invalidate() 设置session对象失效
<4>String getId() 获取sessionid
<5>void setMaxInactiveInterval(int interval) 设置session的非活动时间
<6>int getMaxInactiveInterval() 获取session的有效活动时间,以秒为单位
<7>void removeAttribute(String key) 从session中删除指定名称(key)所对应的对象