转发,重定向以及区别和简单的session对象
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)所对应的对象
转发,重定向以及区别和简单的session对象的更多相关文章
- servlet之转发与重定向的区别
转发(服务器端跳转): 一次请求 <jsp:forward> request.getRequestDispatcher("new.jsp").forward(requ ...
- http页面转发和重定向的区别
一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request ...
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...
- jsp内置对象 转发与重定向的区别
jsp 内置对象 转发与重定向的比较 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重 ...
- SERVLET API中转发与重定向的区别?
SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的 ...
- Servlet中转发和重定向的区别
Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...
- jsp转发与重定向的区别
1.转发的实现其实很简单,使用request的getRequestDispatch()方法得到RequestDispatch对象,然后在括号里放转发的地址,然后用这个对象调用forward()方法,里 ...
- Java中转发与重定向的区别
转发与重定向的区别 转发是服务器行为,重定向是客户端行为 1.转发在服务器端完成的:重定向是在客户端完成的2.转发的速度快:重定向速度慢3.转发的是同一次请求:重定向是两次不同请求4.转发不会 ...
- Java 请求转发和重定向的区别以及JavaWeb三大作用域
三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...
随机推荐
- Opencv+pycharm+anaconda配置
最简便的方法,没有之一 首先下载annconda:(不要从官网下,还要FQ,还要慢) https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 请注 ...
- angularJS---初识指令
angularJS 什么是angularJS AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款 ...
- python:控制鼠标和键盘
程序: # # _*_ coding:UTF-8 _*_ import win32api import win32con import win32gui from ctypes import * im ...
- python:小乌龟turtle
turtle的意思是乌龟,也是python中自带的图形函数,使用turtle的方法也很形象,就好像在画布上有一个小乌龟(在画布上是一个箭头),然后你可以让它动来动去,它经过的地方就被留下了记号. 例如 ...
- 【zzuli-2266】number(二进制处理)
题目描述 某人刚学习了数位DP,他在某天忽然思考如下问题: 给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y x, y中出现的[0, 9]的数码种类相同 ...
- Jqeury ajax 调用C#的后台程序
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JQueryTest.aspx. ...
- c# DataTable导出为excel
/// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <param name="dt& ...
- SQL Server 2008 R2 使用 PIVOT 错误
SQL Server 2008 R2 使用 PIVOT 错误! 'PIVOT' 附近有语法错误.您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能. 有关 ALTER DATABASE 的 ...
- html与css与JavaScript的关系
“HTML是网页的结构,CSS是网页的外观,而JavaScript是页面的行为.” 1)HTML—Hypertext Markup Language. 超文本标记语言.用来描述网页的语言. <h ...
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...