`
herenhuang
  • 浏览: 47724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

servlet/jsp 重定向

    博客分类:
  • java
阅读更多

通常,在一个设计良好的Web应用中,都会综合使用Servlet和JSP技术。Servlet控制业务流转,JSP则负责业务处理结果的显示。此时,将大量用到重定向技术。

        重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。


服务器端的重定向相关类
        服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。
服务器端的重定向方式
        服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。

HttpServletResponse.sendRedirect()方法

HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下:

public void sendRedirect(java.lang.String location)throws java.io.IOException


        这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。

RequestDispatcher.forward()方法

        RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法,参见如下代码:

public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}

        forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。

        注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。


如何得到RequestDispatcher


        有三种方法可以得到Request Dispatcher对象。

1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。

2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。

3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。

这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:

<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>

 

        其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问:

http://localhost:8080/servlet/firstservlet/

使用1中方法,例如在firstservlet可以写入下面的代码:

RequestDispatcher rd = request.getRequestDispatcher("secondservlet");
rd.forward(request, response);

 

此时控制权将转向到第二个Servlet了。

使用2中的方法,可以从Servlet Context中得到RequestDispatcher代码如下:

RequestDispatcher rd = getServletContext().getRequest
Dispatcher("/servlet/secondservlet");
rd.forward(request, response);

 

使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:

RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request, response);

 

这样也可以重定向到SecondServlet了。


JSP页面中的重定向


        JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:

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

 

        JSP页面执行到这儿,将终止当前的处理,将控制权交由nextpage.jsp。


如何选择


        RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法


分享到:
评论

相关推荐

    基于servlet/jsp的学生信息录入查询系统

    例如,当用户提交表单后,Servlet处理完数据后可能会重定向或转发到一个新的JSP页面来显示结果。 5. **参数传递**:在Servlet和JSP之间,数据通常通过请求对象(HttpServletRequest)进行传递。用户在表单中输入的...

    servlet/jsp跳转

    - Servlet处理业务逻辑,例如数据库操作,计算等,然后通过请求转发或重定向将控制权交给JSP。 - JSP主要负责展示数据,通过`request`和`session`对象获取Servlet传递的数据,使用EL(Expression Language)和JSTL...

    servlet/jsp自定义错误页面

    根据这些信息,页面可以动态地呈现不同的错误场景,比如通过`response.sendRedirect()`方法将404错误重定向到`error404.jsp`,500错误重定向到`error500.jsp`。 总结来说,自定义错误页面的关键在于正确配置`web....

    达内servlet/jsp/jquery资料

    根据提供的文件信息,以下是对达内servlet/jsp/jquery培训资料中的关键知识点的详细解析: ### 1. 架构 - **C/S 架构(Client-Server 架构)**: - 客户端和服务端通过TCP/IP协议进行通信。 - 特点包括:需要...

    servlet jsp深入了解

    2. **重定向**:Servlet可以使用`Response.sendRedirect()`方法将客户端重定向到一个JSP页面。这种方式创建了新的HTTP请求,客户端会看到URL的变化。 3. **使用Model-View-Controller(MVC)架构**:在这种设计模式...

    Servlet转发与重定向

    Servlet 转发与重定向 Servlet 转发与重定向是 Java Servlet 编程中两个重要的概念,它们都可以让浏览器获得另外一个 URL 所指向的资源,但是它们的内部运行机制有着很大的区别。 RequestDispatcher.forward 方法 ...

    servlet请求转发、重定向、包含

    当Servlet接收到请求后,可以通过`RequestDispatcher`对象的`forward()`方法将请求转发给其他资源,如另一个Servlet、JSP页面等。 - 请求转发共享相同的请求环境,也就是说,请求参数和对象在转发过程中保持不变,...

    JSP+Servlet面试题

    JSP + Servlet 面试题知识点总结 以下是 JSP 和 Servlet 相关的知识点总结: 一、JSP 和 Servlet 基础知识 * JSP 和 Servlet 都是服务器端执行的,通常返回给客户端的是一个 HTML 文本。 * JSP 在服务器上执行,...

    Servlet 和 Jsp 学习指南+ 代码

    5. **Servlet和JSP的交互**:如何在Servlet中转发或重定向到JSP,或者在JSP中调用Servlet。 6. **MVC(Model-View-Controller)模式**:在JavaWeb开发中,Servlet通常作为控制器,JSP作为视图,而模型通常是业务...

    servlet+jsp练手小项目

    servlet+jsp练手小项目,适合初学者进行项目的练手,可以帮助我们熟悉servlet+jsp的项目流程,掌握转发,重定向,路径等问题,有助于后面框架的学习,而且项目并不复杂,主要是锻炼大家的思路,让我们可以熟悉servlet...

    JSPServlet的重定向技术综述

    JSPServlet的重定向技术是Web开发中两个关键的方法,用于改变HTTP请求的处理路径,以便将用户导向不同的页面或资源。这两种技术分别是`RequestDispatcher.forward()`和`response.sendRedirect()`,它们各有特点和...

    servlet和jsp模板

    - 在实际项目中,开发者通常会创建一个Servlet来处理HTTP请求,然后根据需要转发或重定向到相应的JSP页面。JSP页面负责显示数据,而Servlet则负责数据的获取和处理。 - 使用Filter进行请求过滤,可以对Servlet和...

    ServletExamples JspExamples

    结合"源码"和"工具"这两个标签,我们可以推测这个压缩包可能包含了一些实际运行的Servlet和JSP示例代码,这些代码可能涵盖了基本的HTTP请求处理、用户会话管理、表单数据处理、转发和重定向等常见场景。学习者可以...

    Servlet与jsp与Filter的使用

    ### Servlet与JSP与Filter的使用详解 #### 一、Servlet与JSP的基本概念 Servlet是一种Java技术,用于创建动态Web应用程序。它本质上是一个Java类,由Web服务器或应用服务器加载,以响应客户端请求。Servlet可以...

    JSP-Servlet.rar_jsp_jsp综述_servlet_servlet jsp

    本文将深入探讨JSP与Servlet的重定向技术,并结合提供的资源来帮助初学者理解和掌握这一核心概念。 首先,JSP是一种视图技术,它允许开发者在HTML代码中嵌入Java代码,使得网页具有动态生成内容的能力。而Servlet是...

    mysql+servlet+jsp的简易crm实现

    【MySQL + Servlet + JSP 简易CRM实现】 在IT行业中,开发客户关系管理系统(CRM)是一项常见的任务,尤其对于初学者来说,通过MySQL、Servlet和JSP的结合可以构建一个基础的CRM系统,这有助于理解Web应用程序的...

    Servlet_Jsp_Login.rar_java servlet_jsp servlet_jsp 登陆_login se

    根据结果,Servlet会生成响应,可以是重定向到成功的登录页面或显示错误消息的JSP页面。 6. **会话管理**:登录成功后,通常会创建一个HttpSession对象,存储用户信息,以便后续页面访问时验证用户身份。 JSP部分...

    简单的servlet+jsp

    在Java Web开发中,Servlet和JSP(JavaServer Pages)是两种重要的技术,它们共同用于构建动态网页应用。本教程将介绍如何使用servlet和jsp实现数据的增删改查功能,这对于理解Web应用程序的基本工作原理至关重要。 ...

    servlet和jsp学习指南

    - **可以相互配合使用**:通常情况下,Servlet用来处理业务逻辑,而JSP用来展示数据,两者可以通过URL转发或者重定向的方式相互协作。 #### 四、学习路径建议 1. **基础知识**:首先需要掌握Java基础语法以及面向...

Global site tag (gtag.js) - Google Analytics