转发,重定向以及区别和简单的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. ...
随机推荐
- ansible入门五
一.Ansible条件测试 在ansible中还可以进行条件测试.如果需要根据变量.facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试. 1. when语句 在task后添加 ...
- 由浅入深了解EventBus:(四)
事件注册 在EventBus3.0框架中订阅者对事件进行注册/订阅是通过EventBus类中的register方法来实现的,register的方法参数就是我们的订阅者的实例; public void ...
- Java复习8.多线程
Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...
- C++复习3.C/C++常量的知识
C/C++常量的知识 20130918 语言的实现隐含着使用着一些常量,如初始化全局变量静态变量,另外还有一些我们不曾感觉到的变量:函数地址(也就是函数名称), 静态数组的名字,字符串常亮的地址.常量 ...
- hdu 6113 度度熊的01世界(结构体的赋值问题)
题目大意: 输入n*m的字符串矩形,判断里面的图形是1还是0,还是什么都不是 注意:结构体中放赋值函数,结构体仍旧能定义的写法 #include <iostream> #include&l ...
- CMDB开发(需求分析)
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- Ubuntu 13.10 如何修改背景色--豆沙绿
如何修改Ubunut 13.10的窗口背景色,在网上找到了多资料,安装了dconf,Unity Tweak Tool,GNOME Color Chooser都无法修改背景色. 最后,还是直接去修改主题 ...
- c# 字符串验证(邮箱、电话、数字、ip、身份证等)
using System; using System.Text.RegularExpressions; namespace HuaTong.General.Utility { /// <summ ...
- 每周荐书:云原生、Docker、Web算法(评论送书)
每周荐书:云原生.Docker.Web算法(评论送书) 感谢大家对每周荐书栏目的支持,先公布下上周中奖名单 名优秀评论可以免费获得此书. 云原生应用架构实践 云原生架构,关注简化开发流程.提升研发 ...
- vue做路由页面内容跳转
安装----npm npm install vue-router 如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能: import Vue from 'vue' imp ...