JSP的重定向有两种forward和sendRedirect,它们的原理以及区别

合集下载

Java请求转发和重定向的区别

Java请求转发和重定向的区别

Java请求转发和重定向的区别Java请求转发和重定向的区别1、请求转发:request.getRequestDispatcher(URL地址).forward(request, response)处理流程:1. 客户端发送请求,Servlet做出业务逻辑处理。

2. Servlet调⽤forword()⽅法,服务器Servlet把⽬标资源返回给客户端浏览器。

2、重定向:response.sendRedirect(URL地址)处理流程:1. 客户端发送请求,Servlet做出业务逻辑处理。

2. Servlet调⽤response.sendReadirect()⽅法,把要访问的⽬标资源作为response响应头信息发给客户端浏览器。

3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

3、转发和重定向的区别:1、转发使⽤的是getRequestDispatcher()⽅法; 重定向使⽤的是sendRedirect();2、转发:浏览器URL的地址栏不变。

重定向:浏览器URL的地址栏改变。

request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显⽰出转向后的地址;服务器内部转发,整个过程处于同⼀个请求当中。

response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。

这样,从浏览器的地址栏中可以看到跳转后的链接地址。

不在同⼀个请求。

重定向,实际上客户端会向服务器端发送两个请求。

所以转发中数据的存取可以⽤request作⽤域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。

只能⽤session。

3、转发是服务器⾏为,重定向是客户端⾏为;4、转发是浏览器只做了⼀次访问请求。

重定向是浏览器做了⾄少两次的访问请求;5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)6、RequestDispatcher是通过调⽤HttpServletRequest对象的getRequestDispatcher()⽅法得到的,是属于请求对象的⽅法。

JSP页面跳转的几种实现方法

JSP页面跳转的几种实现方法

JSP页⾯跳转的⼏种实现⽅法使⽤href超链接标记客户端跳转使⽤客户端跳转提交表单客户端跳转使⽤response对象客户端跳转使⽤forward总做标记服务器跳转使⽤requestDispatcher类服务器跳转1、<form name="form1" method="POST" action="login02.jsp"><input type="text" name="name"><input type="text" name="psd"><input type="submit" value="提交"><input type="reset" value="重置">2、<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){%><script type="text/javascript">window.location="login03.jsp";</script><% }else{ %><script type="text/javascript">window.location="";alert(window.location.href);</script><% }%>页⾯1提交到页⾯2之后代码负责判断然后通过js代码进⾏跳转3、<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){response.sendRedirect("");//路径001return;}else{response.sendRedirect("login01.jsp");return;}%>页⾯1提交到页⾯3之后通过 response对象的sendredirect()⽅法重定向在上段代码的路径001中说明⼀点 sendredirect()中的URL是可以带参数 eg sendredirect("url?name="+name);重定向顺便传递参数 sendredirect注意的第⼆点:⼀般此句之后紧跟⼀句 return;(原因:通过sendredirect⽅法做重定向是在页⾯处理完之后才会有实际动作的,譬如上个例⼦⾥页⾯的⽤户名密码输⼊完毕点击提交然后后⼀个页⾯判断判断完即处理完页⾯3是不需要输出的也是输不出来东西的没有return再有别的输出是没有意义的⽽且有的时候芳⼉因为⽆意义的输出⽽报错)使⽤ response对象实现页⾯的跳转有2中⽅法上⾯是⼀种下⾯这种是是利⽤ setHeader()⽅法还是页⾯1提交把页⾯3的代码修改⼀下就可以了:<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){// response.sendRedirect("");// return;response.setHeader("Refresh","1;url=");}else{// response.sendRedirect("login01.jsp");// return;response.setHeader("Refresh","1;url=login01.jsp");}%>response.setHeader("Refresh","等待的秒数;url=绝对路径或者相对路径"); 路径问题sendredirect也⼀样绝对路径相对路径都没意见上例都是等待1秒之后跳转response重定向和forward跳转的区别response:1执⾏完所有的代码再跳转到⽬标页 2跳转到⽬标页后浏览器的URL会改变 3在浏览器中重定向 4可以跳转到其他服务器上的页⾯eg:百度。

java Servlet请求转发和重定向

java Servlet请求转发和重定向

•请求转发☐请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。

此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变☐请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应RequestDispatcher rd = request.getRequestDispatcher(path);rd.forward(request,response);或request.getRequestDispatcher(path) .forward(request,response);•重定向☐重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址☐重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求response.sendRedirect(path);•请求转发和重定向区别如下:☐forward()只能将请求转发给同一个Web应用中的组件,而sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。

☐sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

☐forward()方法的调用者与被调用者之间共享相同的request对象和response对象;而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。

•使用请求对象(request)存储数据(在servlet中存,在JSP中取)request. setAttribute(“score”,score);int score=(INTEGER)request. getAttribute(“score”);☐HttpServletRequest接口的方法:public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用HttpSession对象存储数据HttpSession session=request.getSession();session. setAttribute(“score”,score);int score=(Integer) session. getAttribute(“score”);☐HttpSession接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用ServletContext对象存储数据ServletContext context = this.getServletContext();或ServletContext context = this.getServletConfig().getServletContext();context. setAttribute(“score”,score);int score=(Integer) application. getAttribute(“score”);ServletContext接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)简单的说,HttpServletRequest共享的对象仅在请求的生存期中可被访问,使用HttpSession共享的对象仅在会话的生存期中可被访问,使用ServletContext共享的对象在应用程序的生存期中可被访问。

redirect原理

redirect原理

redirect原理
Redirect原理是指通过将用户的请求从一个URL重定向到另
一个URL来实现页面跳转的一种技术。

它在Web开发中被广
泛使用,可以用于多种用途,包括重定向到新的网址、处理表单提交、加载不同的页面等。

当用户在浏览器中访问一个URL时,服务器会根据该URL来确定用户请求的资源,并将资源返回给浏览器作为响应。

但是,在某些情况下,服务器可能需要将用户请求重定向到另一个URL上,这时就会使用Redirect技术。

重定向通常包括以下几个步骤:
1. 用户在浏览器中输入URL并发送请求给服务器。

2. 服务器接收到请求后,判断是否需要将用户重定向到另一个URL上。

3. 如果需要重定向,服务器会返回一个特殊的响应状态码,如HTTP状态码302表示临时重定向,或301表示永久重定向。

此外,服务器还会在响应头部的Location字段中指定重定向
的目标URL。

4. 浏览器接收到服务器的响应后,会根据响应状态码和Location字段的值,自动发送新的请求到目标URL。

5. 服务器接收到浏览器发送的新请求后,会处理该请求,并返
回相应的资源给浏览器显示。

通过重定向,服务器可以将用户请求的URL替换为另一个URL,从而实现页面的跳转。

这在很多情况下非常有用,例如当某个页面已经被删除或者更改位置时,可以通过重定向将用户引导到新的页面上;或者在提交表单后,可以使用重定向来避免重复提交表单数据。

总之,Redirect原理基于服务器返回特定的响应状态码和Location字段的值,通过浏览器自动发送新的请求,在不改变用户行为的前提下,实现页面跳转。

dispatcher和redirect的区别

dispatcher和redirect的区别

WebWork Result Type :dispatcher和redirect的区别2009年12月16日星期三09:45最近一直在学习WebWork,学习了result类型之后,对dispatcher和redirect做个比较。

1.讲讲它们各自的工作原理重定向的工作原理:通过在HTTP头把一个302的HTTP返回码和新的位置一并发送至浏览器,然后浏览器将自动发出一个指向这个新位置的HTTP请求。

dispatcher result的工作原理:它发出一个内部的对资源的请求,只通过一个请求为浏览器生成最终的视图。

2.通过一个购买在线书籍的例子进行说明,这一区别相当重要。

假设有以下配置(dispatcher result):<action name=“checkoutorder” class="org.eliot.CheckoutOrder"><result name="success">order-confirmation.jsp</result></action>这个时候用户单击了结账的按钮---链接至/checkoutorder.action----账单被处理并且显示一个确认的页面。

这意味着如果用户单击了浏览器的刷新按钮,账单将会再次被结付----这并不是用户最期待的结果。

接下来,看看另外一个配置(redirect):<action name=“checkoutorder” class="org.eliot.CheckoutOrder"><result name="success" type="redirect">order-confirmation.jsp</result></action>使用以上这个配置,当用户结账的时候,浏览器最终的位置将会是order-confirmation.jsp。

理解客户端重定向(Redirect)和服务端重定向(Dispatch)

理解客户端重定向(Redirect)和服务端重定向(Dispatch)

理解客户端重定向(Redirect)和服务端重定向(Dispatch)这是两个常常被放在⼀起进⾏⽐较的概念,今天对这两个概念再重新回顾⼀下,前者发⽣在客户端(浏览器),后者发⽣在服务器端?,因此也有⼈把前者称为客户端重定向,把后者称为服务器端重定向,虽然对于后者这种称谓并不算贴切。

本⽂原⽂链接:转载请注明出处!Redirect(客户端重定向)标准意义上的“重定向”指的是HTTP重定向,它是HTTP协议规定的⼀种机制。

这种机制是这样⼯作的:(没有涉及request,只有response)1. 当client向server发送⼀个请求、要求获取⼀个资源时,2. 在server接收到这个请求后发现请求的这个资源实际存放在另⼀个位置,3. 于是server在返回的response中写⼊那个请求资源的正确的URL,并设置reponse的状态码为301(表⽰这是⼀个要求浏览器重定向的response),4. 当client接受到这个response后就会根据新的URL重新发起请求。

重定向有⼀个典型的特症,即,当⼀个请求被重定向以后,最终浏览器上显⽰的URL往往不再是开始时请求的那个URL了。

这就是重定向的由来。

(解决了为什么需要重定向这个功能?)http重定向的⼀种典型应⽤是防⽌表单重复提交,其原理是:假如当前是⼀个⽤户信息编辑页⾯,表单通过Post提交给saveUser.action, 当该请求提交后,可返回⼀个重定向的response,地址可以是viewUser.action,即定向到⽤户详情页⾯(不能修改和提交)。

当然这种防⽌页⾯重复提交的⽅法作⽤是有限的,如果⽤户返回表单页⾯,重新提交表单,或是⽤户在服务器端响应到达之前,多次点击提交按钮(可通过JavaScript控制提交按钮点击次数)等等。

在Servlet⾥,实现客户端重定向的⽅法是:response.sendRedirect()Dispatch(服务器端重定向)Dispatch(Forward)指的是服务器在处理request的过程中将request先后委托多个servlet或jsp接替进⾏处理的过程。

forward和sendRedirect的区别

forward和sendRedirect的区别

forward和sendRedirect的区别1.RequestDispatcher.forward()是在服务器端起作⽤,当使⽤forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外⼀个Servlet,JSP 或普通HTML⽂件,也即你的form提交⾄a.jsp,在a.jsp⽤到了forward()重定向⾄b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数⾃动传递.但forward()⽆法重定向⾄有frame的jsp⽂件,可以重定向⾄有frame的html⽂件,同时forward()⽆法在后⾯带参数传递,⽐如servlet?name=frank,这样不⾏,可以程序内通过response.setAttribute("name",name)来传⾄下⼀个页⾯.重定向后浏览器地址栏URL不变.因为完成⼀个业务操作往往需要跨越多个步骤,每⼀步骤完成相应的处理后,转向到下⼀个步骤。

⽐如,通常业务处理在Servlet中处理,处理的结果转向到⼀个 JSP页⾯进⾏显⽰。

这样看起来类似于Servlet链的功能,但是还有⼀些区别。

⼀个RequestDispatcher对象可以把请求发送到任意⼀个服务器资源,⽽不仅仅是另外⼀个Servlet。

注意,只有在尚未向客户端输出响应时才可以调⽤forward()⽅法,如果页⾯缓存不为空,在重定向前将⾃动清除缓存。

否则将抛出⼀个异常2.response.sendRedirect()是在⽤户的浏览器端⼯作,sendRedirect()可以带参数传递,⽐如servlet?name=frank传⾄下个页⾯,同时它可以重定向⾄不同的主机上,且在浏览器地址栏上会出现重定向页⾯的URL.HttpServletResponse接⼝定义了可⽤于转向的sendRedirect()⽅法。

代码如下:public void sendRedirect(ng.String location)throws java.io.IOException这个⽅法将响应定向到参数location指定的、新的URL。

Servlet 跳转 redirect与forward跳转的区别

Servlet 跳转 redirect与forward跳转的区别

Servlet 跳转redirect与forward跳转的区别Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。

一、原理1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。

sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。

这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

这种方式是在客户端作的重定向处理。

该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。

该方法可以接受绝对的或相对的URLs。

如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。

public void doPost(HttpServletRequestrequest,HttpServletResponse response) throws ServletException,IOException {response.setContentType("text/html; charset=UTF-8");response.sendRedirect("/index.jsp");}2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");dispatcher .forward(request, response);页面的路径是相对路径。

response.sendRedirect()与forward()区别

response.sendRedirect()与forward()区别

response.sendRedirect()与forward()区别首先我们要明白用response.sendRedirect做转向的原理,他其实是向浏览器发送一个特别的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上能够看到地址的变化。

用<jsp:forward page=""/>则不同,他是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化能够看出。

所以使用response.sendRedirect时就需要注意以下两点:1,在使用response.sendRedirect时,前面不能有HTML输出。

这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。

事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非您关闭了cache,或您使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。

假如报错说,“一些信息已被submitted”(原文忘了),那么,您就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;我们已知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。

既然您已要做转向了,那么后的输出更有什么意义呢?而且有可能会因为后面的输出导致转向失败。

由于response.sendRedirect()之前不能有任何HTML输出.要想在重定向之前输出一些提示信息,可能会想到:out.println("<script>alert(''错误信息'')</script>");response.sendRedirect(index.html);return;但这个简单的想法,怎么也实现不了.没办法....只好另想他法1.全部用out.println输出javascript,由javascript完成重定向out.println("<script>alert(''错误信息'')</script>");out.println("<script>window.location.href=''index.jsp''</script>");return;2.用Header头刷新到重定向页面out.println("<script>alert(''错误信息'')</script>");response.setHeader("refresh","1;url=index.jsp");return;3.用java swing 组件的JOptionPane 代替javascript 提示框,由sendRedirect()完成重定向javax.swing.JOptionPane.showMessageDialog(null, "错误信息");response.sendRedirect("index.jsp");return;在Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法。

T05 JSP隐含对象2

T05 JSP隐含对象2

Session对象 对象
session对象用来保存每个用户的会话信息,以便跟 对象用来保存每个用户的会话信息, 对象用来保存每个用户的会话信息 踪每个用户的操作状态。 踪每个用户的操作状态。
从一个客户打开浏览器并连接到服务器开始, 从一个客户打开浏览器并连接到服务器开始,一直到这 个客户关闭浏览器为一个回话。 个客户关闭浏览器为一个回话。
当客户第一次连接到服务器请求时会为这个客户分 配一个session对象,并为这个对象分配一个 。 对象, 配一个 对象 并为这个对象分配一个id。
session信息保存在容器中,sessionID保存在客户机的 信息保存在容器中, 信息保存在容器中 保存在客户机的 cookie中 中 当服务器发出回复内容的同时将这个id发往客户段, 当服务器发出回复内容的同时将这个 发往客户段,并 发往客户段 写入到客户端的cookie中,这样下次再请求的时候,服务 写入到客户端的 中 这样下次再请求的时候, 器就可以通过该id来识别不同的用户 来识别不同的用户。 例子: 器就可以通过该 来识别不同的用户。 例子:SessionId.jsp
Request对象 对象
1、属性的存储和取得
方法
void setAttribute( String name, Object value) Object getAttribute( String name ) Enumeriation getAttributeNames( ) void removeAttribute ( Sting name)
例子: 例子:RequestOther.jsp
Response对象 对象
主要将JSP处理数据后的结果传回到客户端。对应 处理数据后的结果传回到客户端。 主要将 处理数据后的结果传回到客户端 的javax.servlet.http.HttpServletResponse接口。 接口。 接口

转发(forward)和重定向(sendRedirect)

转发(forward)和重定向(sendRedirect)

转发(forward)和重定向(sendRedirect)⼀. RequestDispatche是⼀个Web资源的包装器,可以⽤来把当前的Request传递给该资源,或者把新的资源包括到当前的相应中。

详细来说:RequestDispatch 对象从客户端获取请求request,并把他们传递到服务器上的servlet、html、jsp。

有两个⽅法,include()/forward()1. include()void include(ServletRequest request,ServletResponse response)⽤来记录保留request和response,以后不能再修改response⾥表⽰状态的信息。

2. forward() 转向void forward(ServletRequest request,ServletResponse response)// 1. 跳转到指定的页⾯“dealWith.jsp”;String url = "dealWith.jsp";//2. 获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置RequestDispatcher requestDispatcher = request.getRequestDispatcher(url);// 3. 执⾏跳转,将参数request和response传递给这个页⾯requestDispatcher.forward(request, response);⼆.重定向的两种⽅法⽐较:forward & sendRedirect1. HttpServletResponse.sendRedirect(location)1)作⽤:该⽅法将相应定向到参数location指定的新的URL。

2)location:可以是绝对地址,也可以是相对URL。

注意:Redirect能够防⽌某些情况下客户端Refresh造成的⼀些未知后果(例如连续删除)2. forward & sendRedirect ⽐较本质 地址栏显⽰数据共享运⽤地⽅效率⼯作流程forward 服务器请求资源,服务器直接访问⽬标地址的URL,读取该URL的相应内容,然后把这些内容再发给服务器不变(转发路径必须是同⼀个web容器下的URL)转发页⾯和转发到的页⾯可以共享request⾥⾯的数据.⼀般⽤于⽤户登陆的时候,根据⾓⾊转发到相应的模块.⾼⼀次请求sendRedirect 客户端⾏为,服务端根据逻辑,发送⼀个状态码,告诉浏览器重新去请求那个地址新的URL(Location可以是任意地址)不能共享⼀般⽤于⽤户注销登陆时返回主页⾯和跳转到其它的⽹站等.低⾄少两次请求其中两个动作的⼯作流程:1. 转发过程(forward):客户浏览器发送Http请求——>web服务器接受该请求——>调⽤内部的⼀个⽅法在容器内完成请求处理和转发动作——>将⽬标资源发送给客户上⾯直接转发请求的过程:1)浏览器向Servlet1发出请求2)Servlet1调⽤forward()⽅法,在服务器端将请求转发给Servlet23)最终由Servlet2做出相应举例:A向B借钱,B没有钱,向C借钱,借没有借到钱都会将消息回复给A在这⾥,转发的路径必须是同⼀个web容器下的url,其不能转向到其他的web路径上去,中间传递的是⾃⼰的容器内的request。

Jsp简答题

Jsp简答题
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
}
public void init(servletconfig conf)throws servletexception{
super.init(conf);//init方法带servletconfig参数时必须有此句代码
//此处写一些初始化操作。如连接数据库等。
}
2 service():响应客户端发出的请求。Service()方法接受ServletRequest接口和ServletResponse接口的对象来处理请求和发送响应。经常的用法是:不用service()方法,用dopost,doget方法来处理请求。其他的方法还有dotrace(),dooptions().dohead()方法,因trace,options.head信息已经在dopost,doget方法中包括,不必使用,doput(),dodelete()方法在web app不经常使用
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp");

forward重定向是在容器内部...

forward重定向是在容器内部...

您还未登录!|登录|注册|帮助∙首页∙业界∙移动∙云计算∙研发∙论坛∙博客∙下载∙更多∙目录视图∙摘要视图专访赵霏:应把握机会次都会被其他页面引用。

JSP在这个方面确实不如PHP,这也是MVC 架构的一个弊端。

我采用的框架是Springmvc+Spring+Hibernate+SpringJDBCTemplate。

网上资料收集。

一、绝对路径与相对路径绝对路径:如果咱们使用的URL网址是以“/”开头的,那么这个网址就叫做绝对路径。

相对路径:如果咱们使用的URL网址不是“/”开头的,那么这个网址就叫做相对路径。

1. 相对路径在相对路径上,两者的表现是相同的。

看看lingo-sample/03-03/这个例子,如果我们去请求relative/forward.jsp或redirect.jsp,然后从这里再跳转向它下面的result/result.jsp会怎样呢?1.1 forward中使用相对路径forward的例子:<%request.getRequestDispatcher("result/result.jsp").forward(request, response);%>这里的相对路径就是result/result.jsp。

因为刚刚请求的test.jsp是在/03-03/relative/下,所以我们的当前路径就是/03-03/relative/,执行forward的时候会寻找当前路径下的result/result.jsp,找到之后便转发请求。

1.2 redirect中使用相对路径redirect的例子:<%response.sendRedirect("result/result.jsp");%>这里的相对路径也是result/result.jsp。

因为刚刚请求的test.jsp是在/03-03/relative/下,所以我们的当前路径就是/03-03/relative/,执行redirect的时候会把当前路径加上result/result.jsp,把结果作为重定向的地址发送给浏览器,浏览器再去请求/03-03 /relative/result/result.jsp,从而得到响应。

forward和redirect的区别

forward和redirect的区别
response.sendRedirect(location);
RequestDispatcher rd = new RequestDispatcher();
rd.forward(request, response);
跳转方式
http://localhost:8080/Test应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
RequestDispatcher rd = getServletContext().getRequestDispatcher( “/ooo “);
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用forward方法前必须先清空缓冲区。
“/ “代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher( “/ooo “);
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.

Java考试题2

Java考试题2

选择题(没有注明多选,则为单选),每题2分1.下面哪个不是Form的元素? ( )A.Input B: textarea C: select D: table2. HTML页面中,下面哪个表示空格( )A.&amp;B.&nbsp;C.&copy;D.&lt;3.<td align=”XXX”>中的align属性是什么含义? ( )A.加粗 B 斜体 C 对齐方式 D 边框样式4.单选按钮是下列哪一个? ( )A.<input name=”sex” type=”text” value=”0” />B. <input name=”sex” type=”checkbox” value=”0” />C. <input name=”sex” type=”option” value=”0” />D.<input name=”sex” type=”radio” value=”0” />5.下边哪个不是JSP内置对象? ( )A.Session B request C cook D out6.下边哪个是JSP指令标记( )A.<%……%>B. <%!……%>C. <%@……%>D.<%=……%>7.当在JSP文件中要使用到ArrayList对象时,应在JSP文件中加入以下哪个语句?( )A.<jsp:include file=”java.util.*” />B. <jsp:include page=”java.util.*” />C. <%@ page import=”java.util.*” />D.<%@ page include=”java.util.*” />8.关于JavaBean的说法,哪个是正确的?( )A.JavaBean的具体类可以不是public的B.JavaBean可以只提供一个带参数的构造器C.JavaBean可以象Html标记一样不关闭D.JavaBean可以保存状态9. JavaBean的生命周期中,哪个是用来跟踪用户会话的( )A.sessionB.requestC.pageD.application10.要在session对象中保存属性,可以使用以下哪个语句( )A.session.getAttribute(“key”,”value”)B.session.setAttribute(“key”,”value”)C.session.setAttribute(“key”)D.session.getAttribute(“key”)11.Jsp:forward 和sendredirect 都是用来做页面跳转的,描述错误的是?( )A.forward之后可以使用原来的request对象,而且效率更高。

浅谈jsp中的跳转和转向

浅谈jsp中的跳转和转向

浅谈JSP的Forward及sendRedirect方法使用同一个request,是在服务器端跳转,浏览器显示的是第一个页面的名字,因为客户端(浏览器)不知道它在服务器端跳转了。

本文将为大家讲解JSP的forward及sendRedirect 方法。

Response.sendRedirect是两个不同的request,是在客户端跳转,浏览器显示的是跳转后的页面的名字。

因为它是从客户端跳转到第二个页面的。

使用forward时,由于只是发送一次request请求,request设置的属性(setAttribute)依然能保留在下一个页面。

使用sendRedirect时,由于发送两次request请求,所以在下一个不能获取request属性。

但可以通过重写URL的方式内容传递过去。

下面举例说明:tian.jsp<%request.setAttribute("river","redwater");request.setAttribute("country","daguaiwan");%><jsp:forward page="fengshan.jsp" />donglan.jsp<%request.setAttribute("river","redwater");request.setAttribute("country","daguaiwan");%><a href="fengshan.jsp">fengshan</a>bam a.jsp<%request.setAttribute("river","redwater");request.setAttribute("country","daguaiwan");response.sendRedirect("fengshan.jsp");%>fengshan.jsp<%=request.getAttribute("river")%><br/><%=request.getAttribute("country")%>1.http://localhost:8080/ForwardRedirect/tiane.jsp 跳转后结果为:2.redwater3.daguaiwan4.5.http://localhost:8080/ForwardRedirect/donglan.jsp 跳转后结果为:6.null7.null8.9.http://localhost:8080/ForwardRedirect/bama.jsp跳转后结果为:10.null11.null结果分析: tiane.jsp是通过forward跳转到fengshan.jsp的,这两个页面享用的是同一个request,故fengshan.jsp可以接收到tiane.jsp通过 request设置的属性。

JSP response重定向

JSP  response重定向

JSP response重定向在动态网站的某些操作中,有时需要从一个页面转向另外一个页面,如用户登录成功。

要达到页面重定向的效果,可以采用前面学习的动作指令jsp:forward,也其中url表示转向的页面资源,可以是JSP页面、HTML页面、Servlet等。

JSP页面还可以用response对象的sendError方法来指明一个错误状态。

该方法接受一个错误码以及一个可选的出错消息,该消息将在被返回给客户。

如下所示的代码用于将客户重定向到一个包含了出错信息的页面。

上述sendRedirect和sendError方法都会终止当前请求和响应。

如果响应已经提交给客户,则不会调用这些方法。

所以在实际使用中要慎重,比如,在出现异常或者出错的情况下使用这两种方法。

在通常情况下,用request对象的getParameter()方法获取客户端提交的表单内容,并将该内容显示到客户端。

在这里仍然用此方法获取同样的内容,但并不把它直接显示到客户端,而是先判断该用户是否为合法的用户,再根据判断结果使用re quest对象的sendRedirect方法、encodeURL方法和sendError方法对不同用户指定不同登录页面。

现在创建一个案例,演示sendRedirect方法和sendError方法使用过程。

打开记事本,创建ResponseExample1.jsp文件,其代码如下所示:信息输入页面创建完毕后,需要创建用于检查用户名称和密码的页面。

打开记事本,创建ResponseExample1_1.jsp文件,其代码如下所示:如果用户登录成功,则显示提示提示信息。

打开记事本,创建ResponseExampl将上述三个文件复制到Tomcat运行目录下,打开IE浏览器,在地址栏中输入http://localhost:8080/JSPExample/ResponseExample1.jsp,单击【转到】,会显示如图3 -7所示窗口:图3-7 信息输入窗口在上图所示的页面,输入用户admin,密码111111后,单击【提交】按钮,登陆成功后将转向如图3-8所示页面。

include 和forward和SendRedirect

include 和forward和SendRedirect

其实sendredict就是重定向,而requestDispatcher则是转发。

我认为两个最主要的区别在于重定向是返回数据到客户端之后客户端再向另外的地址发送请求,这样一个来回就发送两次请求,接受两次响应,客户端知道请求发生了变化;而转发则是在服务器端直接发送请求到另外的地址,然后将响应返回到客户端,这样只有一次请求,一次响应,而客户端是不知道请求已经发生变化的。

Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。

一,RequestDispatcher接口方法简介1,RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源。

2,RequestDispatcher接口中定义了二种方法用于请求转发:forward(ServletRequest,ServletResponse)方法:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件这个方法必须在响应被提交给客户端之前调用,否则抛出异常。

方法调用后在响应中的没有提交的内容被自动消除。

include(ServletRequest,ServletResponse)方法:用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。

即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。

3,forward方法和include方法的区别:forward方法调用后在响应中的没有提交的内容被自动消除。

将请求转发给其他的Servlet后,由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。

include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息二,得到RequestDispatcher对象三种方法可以得到RequestDispatcher对象:1,利用ServletRequest接口中的getRequestDispatcher(String path)方法。

servlet的两种重定向方法的区别及应用

servlet的两种重定向方法的区别及应用

servlet的两种重定向方法的区别及应用一问题:在servlet/JSP编程学习中,发现有两种方法可以实现服务端输出重定向,一种是通过forward方法(例如JSP中的<jsp:forwardpage=”OtherPage.jsp”/>),另一种则是通过运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法(例如response.sendRedirect(“OtherPage.jsp”);这两种方法有什么区别和联系呢?让我们看下面的分析。

二分析:(1)<JSP:FORWORD>该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区(buffer)的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.补充知识:输出缓冲区缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:1该JSP网页已完成信息的输出2输出缓冲区已满3JSP中调用了out.flush()或response.flushbuffer()输出缓冲区的大小可以用:<%@page buffer="none"|"nkb"%>或response.setBufferSize()设置,如下:1设置输出缓冲区的大小为1KB。

<%@page buffer="1kb"%>或response.setBufferSize(1);2设置输出缓冲区的大小为0,即不缓冲。

<%@page buffer="none" %>或response.setBufferSize(0);用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节.用response.isCommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有。

forward和redirect的区别?

forward和redirect的区别?

forward和redirect的区别?
forward和redirect的区别
1、请求方不同:redirect是由客户端发起的请求,而forward是服务端发起的请求。

2、浏览器地址表现不同:redirect是浏览器地址显示被请求的url,而forward是浏览器地址不显示被请求的url。

3、参数传递不同:redirect需要重新开始一个request,原页面的request生命周期结束。

forward另一个连接的时候。

request变量是在其生命周期内的。

另一个页面也可以使用,其实质是把目标地址include。

4、底层运作不同:redirect发送的请求信息又回送给客户机,让客户机再转发到另一个资源上,需要在服务器和客户机之间增加一次通信。

forward服务器端直接找到目标,并include过来。

5、定义不同:Forward——客户端和浏览器只发出一次请求,Servlet、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

Redirect——实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
2、 sendRedirect
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
今天面试的时候技术官问到了这个问题 ,我将它整理了一下:
forward()是作用于服务器端,重定向后浏览器的URL地址保持不变,是无法通过get方式传递参数呢,不过可以通过HttpServletResponse.setAttribute(key,values)来做
sendRedirect()作用于客户端,重定向后浏览器的URL地址变为新的地址,可以通过get方式来传递参数。
3、客户端在地址栏中看到的地址不一样,对于forward,在地址栏中看到的是第1个文件的名字,对于sendRedirect,在地址栏中看到的是第2个文件的地址。有时候会影响目标文件中的相对路径,例如当前文件是aa文件夹中的a.jsp,目标文件是bb文件夹中的b.jsp,在b.jsp中要访问一个图片,使用相对路径,直接写face.jpg,这个文件与b.jsp放在一起。如果采用forward方式,地址栏中是a.jsp,这样系统会在aa文件夹中找face.jpg,这时候就会出错。
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
他们的区别是:
response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。
JSP的重定向有两种:forward和sendRedirect,它们的原理以及区别是什么呢?
它们在使用上的区别有很多,那些都是表面现象,在理解了它们各自的原理以后,使用上的区别那就能容易掌握了。
一、原理.
1、 Forward
这种方式是在服务器端作的重定向。服务器往client发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client 端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法 out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。
{
response.setContentType("text/html; charset=UTF-8");
response.sendRedirect("/index.jsp");
}
二、区别.
1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
sendRedirect方式使用response对象的方法sendRedirect方法完成,代码如下:
复制代码 代码如下:
response.sendRedirect("userist.jsp");
两者的区别如下:
1、请求次数不同,这是最本质的区别。在forward方式下,在执行当前JSP对象或者Servlet对象的过程中去调用目标文件对应的对象,相当于方法调用,把request和response对象作为参数传递到目标文件对应的对象,当前文件和目标文件的执行是在用户发送的一次请求中完成的。在redirect方式下,用于首先请求了当前文件,当前文件把目标文件的地址返回给了客户端,客户端再次发送请求,请求目标文件,实际上是发送了两次请求。
在Servlet中使用RequestDispatcher的forward方法,要跳转到userlist.jsp,可以写:
复制代码 代码如下:
RequestDispatcher rd = request.getRequestDispatcher("userlist.jsp");
rd.forward(request,response);
2、传值方式不同。在forward方式下,当前文件和目标文件属于同一次请求,共享request对象,所以可以使用request对象传值。在redirect方式下,当前文件和目标文件属于不同的请求,每次请求会单独创建request和response对象,这样就不能使用request对象来传值。在MVC模式下,通常在控制器中调用模型得到数据,然后保存到request中,然后forward到目标文件,目标文件从request中获取需要的信息。如果使用sendRedirect方式在控制器和视图之间传递信息,需要使用在目标文件之后加上“?名字=值”的方式传递。
sendRedirect()这个方法能够接受一个相对的URL,在发出响应之前Servlet容器会自动将它转换为绝对的地址,如果相对的URL不以“/”开头,容器将解释为是相对当前请求的路径URI,如果是以“/”开头,则解释为是相对于servlet容器的更目录环境。如果已经向客户端提交了响应,这个方法会跑出IllegalStateException异常。sendRedirect比较简单,参数location就是代表重定向目标新资源。
forward()应该在浏览器发出响应之前被调用(response的输出流被刷新之前),如果已经向浏览器发出了响应,那么这个方法将会跑出IllegalStateException异常,未发出响应的Response会在调用forward方法之前被清空。得到RequestDispatcher引用的方法,javax.servlet.ServletContext.getRequestDispatcher(String path)。这是用的最多也最容易理解的方法,path必须是以“/”开头,路径是相对于全局上下文路径,对应于web应用的根目录。
页面之间的跳转可以通过两种方式实现:forward和sendRedirect。
forward:可以在JSP页面中使用,可以在Servlet中实现。
在JSP页面中使用<jsp:forward page="目标文件"/>,例如要跳转到userlist.jsp,可以写:
复制代码 代码如下:
<jsp:forward page="userlist.jsp"/>
例子:localtion可以有以下几种情况:
可以是绝对地址,如:http://localhost:8080/servlet/a.jsp
可以是相对地址,相对于当前访问资源的根目录,如:a.jsp
可以是以“/”开头的地址,则认为是先对该web应用的根目录,如:/a.jsp
4、sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。
2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
3、基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。
这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。
相关文档
最新文档