Servlet JSP服务器端的重定向
- 格式:doc
- 大小:104.00 KB
- 文档页数:15
servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。
跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。
Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。
1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。
sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。
forward方式只能跳转到本web应用中的页面上。
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。
此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRes ponse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。
重定向和转发的代码
重定向和转发是Web应用开发中常用的两种跳转方式。
重定向指的是服务器向客户端返回一个特殊的响应,告诉客户端要跳转到另一个URL。
这个过程经常用于一些需要跳转到其他页面来完成一定操作的场景,比如用户登录后跳转到个人中心页面。
重定向的过程中,客户端发送一个请求给服务器,服务器向客户端返回一个HTTP响应,告诉客户端去请求另一个URL。
由于是两次请求,所以重定向会产生较大的网络开销。
重定向的实现方式,可以使用服务器端的Forward和Redirect。
转发是指服务器接收到客户端的一个请求,然后将该请求交给另一个组件(比如另一个servlet、jsp或者html页面)来处理,处理完成之后再将结果返回给客户端。
转发过程不会像重定向那样生成多余的请求,因此相对于重定向而言,转发的性能开销会更小。
在实现转发的时候,服务器端所采用的技术是
request.getRequestDispatcher().forward()方法。
以下是Java Web中实现重定向和转发的代码:
1. 重定向
//使用response对象重定向
response.sendRedirect("要跳转到的URL");
2. 转发
//使用request对象转发
request.getRequestDispatcher("要转发的页面
").forward(request, response);
在实际开发过程中,需要根据具体的需求选择何种跳转方式。
重定向适用于有状态转移的操作,转发适用于访问同一Web应用内的不同资源,如多个servlet之间的跳转。
重定向1.什么是重定向所谓的重定向是将请求重新定个方向转到其他位置。
例如,客户端访问AServlet,然后立刻自动访问BServlet。
这个过程其实就是重定向。
下面通过一张图来了解重定向,如图1-1所示:客户端Aservlet Bservlet1.客户端请求Aservlet2.Aservlet响应302状态码及Location:…/Bservlet3.客户端请求Bservlet4.Bservlet响应给客户端图1-1 重定向由图1-1可知,重定向共有两次请求,两次响应。
当客户端接收到AServlet的响应之后立刻去请求BServlet,这个过程很迅速。
可以发现,地址栏发生变化,由AServlet变成BServlet。
2.重定向案例练习了解了重定向的原理,现在使用302状态码和Location响应头来完成重定向案例,具体步骤如下所示:(1)创建web应用,Example02。
在该应用下新建一个Servlet类,LocationServlet,代码如例1-1所示:例1-1 LocationServlet.javapublic class LocationServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("LoactionServlet......");response.setHeader("Location", "/Example02/TargetServlet");response.setStatus(302);}}例1-1中,Location 响应头的值为”/Example02/TargetServlet ”。
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或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共享的对象在应用程序的生存期中可被访问。
08计算机《JSP程序设计》作业题请把各题的答案另外写在一个Word文档中,标明题号,写好答案即可。
写上自己的学号姓名,统一发给班长,下周上课,班长用优盘考给我或QQ发给我。
一、填空题1、在安装Tomcat时,如果系统中已经有其他的应用程序占用了【8080 】端口,则启动Tomcat时会失败。
2、Servlet是服务器端的【 java小程序】,用于响应客户机的请求。
在默认情况下,Servlet采用一种无状态的【请求-响应】处理方式。
Servlet主要功能是增强Java服务器端功能。
3、Servlet的生命周期主要由3个过程:【init() 】方法功能是服务器初始化Servlet;【 service() 】方法功能是对象调用该方法响应客户的请求;【 destroy() 】方法功能是消灭Servlet对象。
4、编译后的Servlet只被装载【 1 】次,因此,当源程序重新编译后,需要重新启动服务器;同时Servlet 类的修饰符必须为【 public 】5、Servlet的环境API接口中,ServletConfig接口对象接收【 servlet 】特定的初始化参数,而ServletContext接收【 webapp 】初始化参数。
6、表单提交有2种方式。
【 get 】方式是表单的默认方式,并且次提交方式的总数据量不能超过2KB,否则提交失败。
利用【 post 】方法需要在method方法中声明,并且它没有容量方面的限制。
7、在Servlet中,通过HttpServletRequest接口的方法来获得来自【客户和服务器】端的一些数据;HttpServletReponse接口的方法来【发出响应】,它的【 sendredirect 】方法可以立即使网页重定向,它的【 setintheader 】方法可以使网页定时刷新,它的【 secdheader 】方法可以定时使网页重定向。
8、javax.servlet.RequestDispatcher接口有两个最重要的的方法:【 forward 】和【 include 】,它们用来实现对页面的动态转发或者包含。
控制层Servlet组件技术一 Java Servlet及其技术特点1.Java Servlet及特点(1) Servlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序(2) 在服务器端的Servlet容器里(如Tomcat)运行2.Servlet与传统的应用程序的对比(1) Servlet由Web服务器(如Tomcat)进行加载。
3.Servlet能够处理Http请求和响应(1) Web客户端程序与Servlet之间通过http通信,处理客户端程序的请求并返回一系列结果,动态地生成Web页面4.Servlet的最大的优势在于它的高性能(1)首先Servlet在第一次初始化时装载并驻留在内存中,以后直接从内存中运行;(2)其次,在默认情况下Servlet以单实例多线程的方式工作,一个新请求到达后,Servlet实例开启一个新的线程服务这个请求。
5.Servlet的主要作用:实现服务器端的插件6.JSP和Servlet 在应用上的区别(1)主要的差别1) JSP中应该仅仅存放与表示层有关的内容,而所有的数据计算、数据分析、数据库连接等处理,统统是属于商业业务层,应该放在JavaBean或者Servlet中。
2) 注意:Servlet是包含HTML代码的Java程序,而JSP是包含Java 代码的HTML网页。
(2)Java Servlet的主要缺点1) 没有把网站的逻辑处理和页面的显示输出分离,为了解决Servlet 的这种缺点,SUN推出了Java Server Pages—JSP。
(3)Servlet与JSP相互配合1) Servlet写商业业务层很好,写表示层则不方便。
所以Sun推出JSP + JavaBean,用JSP写表示层,用JavaBean写商业业务层。
JSP在Servlet的基础上有所创新,它们可以互相协作,互相补充对方的不足。
注意:Servlet是可以包含HTML标签的Java程序,而JSP是可以包含Java代码的HTML网页。
理解客户端重定向(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接替进⾏处理的过程。
SpringMVC使⽤ModelAndView进⾏重定向1、Servlet重定向forward与redirect:使⽤servlet重定向有两种⽅式,⼀种是forward,另⼀种就是redirect。
forward是服务器内部重定向,客户端并不知道服务器把你当前请求重定向到哪⾥去了,地址栏的url与你之前访问的url保持不变。
redirect则是客户端重定向,是服务器将你当前请求返回,然后给个状态标⽰给你,告诉你应该去重新请求另外⼀个url,具体表现就是地址栏的url变成了新的url。
2、ModelAndView重定向:使⽤Spring MVC通常是使⽤ModelAndView⽤来返回视图。
ModelAndView其实也是⽀持Servlet中的两种重定向⽅式。
⽐如404页⾯我们⼀般采⽤redirect重定向⽅式,像下⾯的代码就是redirect重定向:public ModelAndView getPage404MV() {ModelAndView mv = new ModelAndView("redirect:/404.htm");return mv;}要使⽤forward重定向就只需把redirect换成forward即可,特别的ModelAndView默认使⽤forward重定向⽅式。
1. 需求背景需求:spring MVC框架controller间跳转,需重定向。
有⼏种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页⾯也能显⽰。
本来以为挺简单的⼀件事情,并且个⼈认为⽐较常⽤的⼀种⽅式,⼀百度全都有了,这些根本不是问题,但是⼀百度居然出乎我的意料,⼀堆都不是我想要的结果。
⽆奈啊,⾃⼰写⼀篇⽐较全都供以后⼤家⼀百度吧,哈哈哈。
是这些写的不是很全都⼈们给了我写这篇博客的动⼒。
2. 解决办法需求有了肯定是解决办法了,⼀⼀解决,说明下spring的跳转⽅式很多很多,我这⾥只是说⼀些⾃我认为好⽤的,常⽤的,spring分装的⼀些类和⽅法。
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);页面的路径是相对路径。
Servlet/JSP服务器端的重定向RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect() 方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。
这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 HttpServletResponse.sendRequest()方法。
forward和redirect的区别答:forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。
这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
a页面-------->b页面(-->代表两种方法的一种)a页面里有一个动作:request.setAttribute("temp",object);Response.forward()---->用这个方法到达b,可以在b里通过request.getAttribute("temp")得到存储的object对象,这个方法扩大了request里保存的值的作用范围;Response.redirect()---->用这个方法到达b,object对象将丢失。
如果想到达b页面(无论是哪个方法)而有想得到object对象,则最好将object对象保存在request.getSession()里,也就是Session对象里通常,在一个设计良好的Web应用中,都会综合使用Servlet和JSP技术。
Servlet控制业务流转,JSP则负责业务处理结果的显示。
此时,将大量用到重定向技术。
重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。
客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。
本文主要探讨服务器端重定向技术的实现。
服务器端的重定向相关类服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。
图1是这几个接口之间的关系图。
图 1重定向相关类关系图服务器端的重定向方式服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法。
下面对这两种方式进行介绍。
HttpServletResponse.sendRedirect()方法HttpServletResponse接口定义了可用于转向的sendRedirect()方法。
代码如下:public void sendRedirect(ng.String location)throws java.io.IOException这个方法将响应定向到参数location指定的、新的URL。
location可以是一个绝对的URL,如response.sendRedirect("")也可以使用相对的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""/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().getRequestDispatcher("/servlet/secondservlet");rd.forward(request, response);使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");rd.forward(request, response);这样也可以重定向到SecondServlet了。