`
condeywadl
  • 浏览: 78269 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JSP 内部跳转与外部跳转

    博客分类:
  • Java
阅读更多

  今天解决了一个问题 具体就是request的使用范围 忽然发现 原来它的生命周期与JSP的跳转形式有很大的关系,JSP主要有2种跳转方式:内部跳转与外部跳转 

 

  内部跳转下 request不变 可以继续使用 地址栏也不会变 主要应用forward

  外部跳转下 会生成新的request 主要是超链接与sendRedirect

 

  换句话说 一次请求 一个request

 

  我从网上转来一篇好文章,希望会对大家有所帮助吧

 

   1.RequestDispatcher.forward()


   是在服务器端起作用,当使用forward()时,Servlet engine传递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中进行重定向

 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
  response.setContentType("text/html; charset=gb2312");
  ServletContext sc = getServletContext();
  RequestDispatcher rd = null;
  rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面
  rd.forward(request, response);
}

   通常在servlet中使用,不在jsp中使用。

   2.response.sendRedirect()

   是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.

   重定向后在浏览器地址栏上会出现重定向页面的URL

   例:在servlet中重定向

public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
  response.setContentType("text/html; charset=gb2312");
  response.sendRedirect("/index.jsp");
}

   由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。

   注意:

   (1) 使用response.sendRedirect时,前面不能有HTML输出

   这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说 JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。

   (2) response.sendRedirect之后,应该紧跟一句return;

   我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

   比较:

   (1) Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

   (2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

   前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.

   注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。

   3.<jsp:forward page="" />


   它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。

   如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。

   另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交

   4.修改HTTP header的Location属性来重定向


   通过设置直接修改地址栏来实现页面的重定向。

   jsp文件代码如下:

<%
  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  String newLocn = "/newpath/jsa.jsp";
  response.setHeader("Location",newLocn);
%>

   5.JSP中实现在某页面停留若干秒后,自动重定向到另一页面

   在html文件中,下面的代码:

<meta http-equiv="refresh" content="300; url=target.jsp">

   它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。

   由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。

   关键代码:

String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content); 

分享到:
评论

相关推荐

    JSP页面跳转的五种方法

    它允许开发者直接在JSP页面内部实现页面的转发功能,无需编写额外的Java代码。 **代码示例**: ```jsp &lt;jsp:forward page="/index.jsp"/&gt; ``` **注意事项**: - 使用`jsp:forward`同样不能转发到其他Web应用或者外部...

    jsp跳转示例代码java

    JSP中的`&lt;jsp:forward&gt;`标签或者在Java代码中使用`RequestDispatcher`的`forward()`方法可以实现服务器端的内部跳转。这种方式是服务器端控制跳转,客户端浏览器地址栏不会改变。 ```jsp ; charset=UTF-8" ...

    JSP页面跳转大全.docx

    这种方法适用于同一应用内部的页面跳转,因为它可以共享同一个`HttpServletRequest`和`HttpServletResponse`对象,且能保持请求的上下文信息。 2. **response.sendRedirect(url)** `sendRedirect()` 方法是 `...

    jsp文件中引用外部.css或.js文件的路径问题.pdf

    jsp 文件中引用外部.css 或.js 文件的路径问题 在 Web 开发中,引用外部的.css 或.js 文件是非常常见的操作。然而,在 jsp 文件中引用外部.css 或.js 文件的路径问题却是很多开发者容易忽视的细节。本文将详细讲解...

    jsp基础精华详解

    ### JSP基础精华详解 ...以上介绍了JSP中的四种会话跟踪方式及其基本使用方法,同时还提到了内部跳转与外部跳转的区别以及`ServletContext`的应用场景。掌握这些基本概念和技术对于开发基于JSP的Web应用程序至关重要。

    jsp和servlet中实现页面跳转的方式实例总结

    这是一种外部跳转,浏览器地址栏会显示新的URL。例如: ```jsp ("test2.jsp"); %&gt; ``` 3. 使用`jsp:forward`标签: 这也是一种内部跳转。例如: ```jsp &lt;jsp:forward page="test2.jsp"/&gt; ``` 4. ...

    jsp基础速成讲解

    jsp基础速成讲解 Servlet三个要素 四种会话跟踪方式 内部跳转 外部跳转 Jsp的执行过程

    STRUTS2跳转示意图

    配置文件是Struts2的核心,它定义了Action与URL之间的映射关系,以及Action执行后的跳转规则。例如,以下是一个简单的配置片段: ```xml &lt;result name="success"&gt;/success.jsp &lt;result name="error"&gt;/error.jsp ...

    JSP源码,登陆后自动跳转。

    在JSP中,CSS可以内联添加,也可以链接到外部样式表文件。 7. **最佳实践**:为了安全考虑,通常不建议在JSP页面上直接处理敏感操作,比如数据库查询或密码验证。更好的做法是将这些逻辑封装在Java控制器类(如...

    servlet实现的页面跳转

    在"韩顺平"的教程中,你可能会看到如何结合实际的web项目结构,将Servlet与JSP页面配合使用,实现动态内容生成和页面跳转。通常,Servlet负责业务逻辑处理和数据准备,然后通过请求转发或重定向将结果展示在JSP页面...

    jsp下页面跳转的几种方法小结

    - **限制**:同样不改变浏览器地址栏,且无法转发到外部URL,只能在同一应用内部使用。 - **示例**: ```jsp &lt;jsp:forward page="newPage.jsp" /&gt; ``` 总结来说,`RequestDispatcher.forward()`更适合在同一个...

    Iframe页面请求跳转问题解决

    首先在父页面的javascript给定义一个window.name,并赋予一个字符串值,如window.name="test",其中赋予的字符串值可以随意定义,然后在Iframe页面的Form 标签中定义target属性,并且其值也必须与之前定义的window....

    JSPServlet新手学习资料

    2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,用于外部跳转或跨域跳转。 理解并掌握这些基本概念对于JSPServlet新手来说至关重要,它们构成了开发Web应用的基础。在实际开发中,根据需求...

    jsp基础教程精讲 jsp基础教程精讲

    - **外部跳转(Redirect)**:`response.sendRedirect()`,两次请求和两次响应,客户端发起新的请求。 ### 5. ServletContext ServletContext是整个应用共享的上下文,可以通过`getServletContext()`获取。它可以...

Global site tag (gtag.js) - Google Analytics