`
zy19982004
  • 浏览: 661922 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251951
社区版块
存档分类
最新评论

Servlet学习四:redirect和forward

 
阅读更多

一. 概念

  1. redirect(从定向):客户端发送一个redirect请求的时候,服务端回复给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL(参数丢失)重新向URL对应服务器发送一个请求。
  2. forward(转发):客户端发送一个forward请求的时候,服务器内部完成转发(参数仍在这个request里面),把转发之后的结果回复给客户端。

 

二. Redirect

  1. HttpServletResponse.sendRedirect(String location)源码
    public void sendRedirect(String location) throws IOException {
    
            if (isCommitted())
                throw new IllegalStateException
                    (sm.getString("coyoteResponse.sendRedirect.ise"));
    
            // Ignore any call from an included servlet
            if (included)
                return; 
    
            // Clear any data content that has been buffered
            resetBuffer();
    
            // Generate a temporary redirect to the specified location
            try {
                 //1.将ocation转换成绝对路径
                String absolute = toAbsolute(location);
                //2.设置新的效应头部302
                setStatus(SC_FOUND);
                //3.设置Location
                setHeader("Location", absolute);
            } catch (IllegalArgumentException e) {
                setStatus(SC_NOT_FOUND);
            }
    
            // Cause the response to be finished (from the application perspective)
            setSuspended(true);
    }
     
  2. 看源码就知道sendRedirect的使用了
    1. 带http协议的,从定向到指定服务器。
      在http://localhost:8080/CoreServer/page/report/report.jsp页面
      httpServletResponse.sendRedirect("http://www.baidu.com");
      =====>
      http://www.baidu.com。 
      
       
    2. 其它类型都跳转到内部服务器。
      在http://localhost:8080/CoreServer/page/report/report.jsp页面httpServletResponse.sendRedirect("www.baidu.com");
      =====>
      http://localhost:8080/CoreServer/page/report/www.baidu.com。
      
      httpServletResponse.sendRedirect("reportList.jsp);
      =====>
      http://localhost:8080/CoreServer/page/report/reportList.jsp。 
      
       

 

 

三. forward

  1. 基于请求路径和转发路径,内部完成跳转。
    在http://localhost:8080/CoreServer/page/report/report.jsp(请求路径)页面HttpServletRequest.getRequestDispatcher("t1.jsp").forward(request, response);(转发路径)
    
    返回http://localhost:8080/CoreServer/page/report/t1.jsp的内容。
    
     

 

四. struts规范

  1. struts.xml文件里,<result>标签的type默认属性值是"dispatcher"(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。
  2. servlet 2.4规范,默认forward不经过filter。如果你要让forward的页面也经过filter,web.xml配置如下。
    	<filter>
    		<filter-name>jspFilter</filter-name>
    		<filter-class>com.cb.cbms.coreserver.servlet.JspFilter</filter-class>   
    	</filter>
    	<filter-mapping>
    		<filter-name>jspFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    		<dispatcher>REQUEST</dispatcher>  //forward要经过哪些filter,在对应filter下面加上这两行
    		<dispatcher>FORWARD</dispatcher>  
    	</filter-mapping>
     
  3. 如果在项目里出现了,
    此页面不能正确地重定向
    **浏览器检测到该服务器正在将此地址的请求循环重定向。
     请参考上述两点就行核查。

 

0
6
分享到:
评论

相关推荐

    19.Servlet中forward和redirect的区别.avi

    19.Servlet中forward和redirect的区别.avi

    JSPServlet新手学习资料

    **六、Servlet API中的forward()和redirect()** 1. **forward()**:服务器端的转发,URL不变,效率较高,常用于内部跳转,避免暴露实际路径。 2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,...

    servlet跳转的几种情况

    Servlet 跳转可以分为两大类:Redirect 跳转和 Forward 跳转。 Redirect 跳转 Redirect 跳转是指将控制权转移到另一个资源,并将 URL 修改为新的资源的 URL。Redirect 跳转可以使用 response.sendRedirect() 方法...

    forward与redirect区别

    在开发Web应用时,我们经常会遇到“forward”和“redirect”的概念,它们是两种不同的页面跳转方式。理解和掌握它们的区别对于优化用户交互和处理请求流至关重要。 **forward(转发)**: - 转发是由服务器端完成的...

    javaEE servlet 学习笔记

    Servlet在这里承担了这个角色,它接收HTTP请求,调用服务层方法处理数据,然后通过RequestDispatcher或Forward、Redirect等方式将控制权传递给JSP。 关于XML的处理: - DOM4j:是一个灵活且强大的Java XML API,...

    Servlet初学者笔记+示例代码(学习JSP之前的基础)

    在学习JSP之前,理解Servlet的基本概念和操作是至关重要的。以下是一些关于Servlet的重要知识点: 1. **Servlet的生命周期**: Servlet在服务器端有三个主要阶段:加载、初始化和销毁。当服务器首次接收到对...

    JSP和SERVLET笔试常遇到的一些问题

    JSP(JavaServer Pages)和Servlet是Java Web开发中两个核心的技术,它们主要用于构建动态网站。下面将详细阐述这两个概念以及它们在笔试中常遇到的问题。 1. JSP内置对象: - request:代表HttpServletRequest对象...

    达内教学课件SERVLET

    3.转发与重定向:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,前者在服务器端完成,后者在客户端完成。 三、Servlet通信 1. 参数传递:通过请求参数、请求属性和会话属性进行数据传递。 2. ...

    servlet学习笔记

    ### servlet学习笔记详解 #### Tomcat介绍 **Tomcat服务器**是基于Sun公司的JSWDK(Java Servlet and Web Development Kit)发展而来的杰出Servlet/JSP容器。作为Apache-Jakarta项目的一部分,Tomcat不仅能够执行...

    jsp forward与redirect实探

    当我们需要在不同的页面之间导航时,`forward`和`redirect`是两种常见的处理请求转发和重定向的方法。本文将深入探讨这两种机制及其区别。 首先,`forward`是通过服务器端内部跳转实现的。它使用`RequestDispatcher...

    servlet 源码

    - `forward()`方法将请求转发给另一个资源,而`redirect()`则告诉客户端重新发起一个新的请求。 6. **过滤器(Filter)**: - Filter是Servlet技术的一部分,可以对请求和响应进行预处理和后处理,如登录验证、...

    转发和重定向的区别 forward和redirect的区别

    在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...

    java-web学习demo--最简单的servlet jsp跳转传值

    通过这个简单的Java Web学习demo,开发者可以了解Servlet和JSP协同工作的方式,以及如何在它们之间传递数据。这有助于理解Web应用的基础架构,并为进一步深入学习和开发复杂的Java Web应用打下坚实基础。

    java中dispcter和forward的区别

    在Java的Web开发中,`Dispatcher`通常指的是`RequestDispatcher`接口,它是Servlet API的一部分,提供了请求转发和包含的功能。而`forward()`方法是`RequestDispatcher`的一个关键方法,它用于在服务器端将请求转发...

    JSP和Servlet的入门

    JSP页面跳转通常有两种方式:请求转发(Request Forward)和重定向(Redirect)。请求转发发生在服务器端,通过`RequestDispatcher`的`forward()`方法实现,页面间共享数据方便;重定向是客户端行为,使用`response....

    javaservlet指南

    8. Forward和Redirect:Servlet可以使用`RequestDispatcher`的`forward()`方法将请求转发给JSP,或者使用`response.sendRedirect()`进行重定向,实现业务逻辑和视图的分离。 9. Model-View-Controller(MVC)架构:...

    forward转发与redirect重定向的区别.zip

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...

    servlet中文帮助文档CHM格式

    5. **转发和重定向**:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,用于在服务器端将请求从一个资源转向另一个资源。 6. **多线程模型**:Servlet默认在每个请求上创建一个新的线程,理解这一...

    servlet面试题

    Servlet的生命周期主要分为三个阶段:初始化、处理请求和服务销毁。 1. **初始化**:在Servlet首次被加载到容器时,容器会自动调用`init()`方法完成Servlet实例的初始化工作。该方法只会被调用一次,并且在Servlet...

    Struts2中实现页面的跳转

    通过深入理解和正确配置上述元素,你可以有效地在Struts2框架中利用`&lt;jsp:forward/&gt;`标签实现页面的跳转,避免遇到“no found”的问题。同时,也要注意,在现代Web开发中,更多地使用`&lt;s:redirect/&gt;`标签进行重定向...

Global site tag (gtag.js) - Google Analytics