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

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

    servlet2.4doc

    forward(ServletRequest, ServletResponse) - Method in interface javax.servlet.RequestDispatcher Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. ...

    JAVA基础知识点汇总

    10、Servlet中的forward和redirect有什么区别: Forward是服务器内部的重定向,服务器直接访问目标地址的url,地址不变。 Redirect:客户端的重定向,完全跳转,地址改变。 11、JSP的内置对象: 1)require(请求对象...

    大厂面试题知识点讲解汇总

    怎么启动线程怎么区分线程、bat面试题之forward和redirect的区别、bat面试题之内置对象和四大作用域和页面传值、bat面试题之设计模式和常用的设计模式、bat面试题之实现一个拷贝文件的类使用字节流还是字符串、bat...

    JavaWeb 面试

    1、jsp有哪些内置对象?作用分别是什么? 2、jsp有哪些动作?作用分别是什么?...7、JAVA SERVLET API中forward() 与redirect()的区别? 8、Servlet的基本架构 。。。。。。。。。。。。。。。。。。。。。。

    java面试大全视频版

    Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet的相同点和不同点 Java面试题21.内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和...

    java面试题

    forward和redirect的区别? 答:forward是转发,浏览器跳转后不显示新的地址。 redirect是重定向,浏览器跳转后显示新的地址。 对比之下forward更加高效,并且它有助于隐藏实际地址,但是有些情况则必须使用...

    JAP编程学习100例

    14、&lt;c:forEach&gt; varStatus 的四种属性 15、&lt;c:forEach&gt; 的用法 16、从客户端传送数据至服务端 17、使用Unicode转义字符 18、使用朝鲜语字符集 19、JSP中最简单的国际化程序 20、错误检测 21、抛出异常 22、&lt;c:if&gt; ...

    JavaWeb重点叙述

    JavaWeb重点叙述里包括 jsp部分 servlet的生命周期 简述forward和redirect的区别 理解jsp的运行原理 jsp include指令和include动作的区别 创建servlet的步骤 了解Tomcat jsp的九个内置对象和四大作用域等

    网页教程《跟姐姐学JSP》

    3.4. forward和redirect的问题 3.4.1. 绝对路径与相对路径 3.4.1.1. 相对路径 3.4.1.2. 绝对路径 3.4.2. forward导致找不到图片 4. 四个作用域 4.1. 何为作用域 4.2. 例子:在线列表 5. 结合javabean实现CRUD ...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet的相同点和不同点 Java面试题21.内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和...

    千方百计笔试题大全

    174、JAVA SERVLET API中forward() 与redirect()的区别? 42 178、如何现实servlet的单线程模式 42 179、页面间对象传递的方法 42 180、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 42 181、四种会话...

    中软公司JAVA培训资料.doc

    中软公司JAVA培训资料.一、Java语言 1、面向对象的三个基本特征 2、方法重载和方法重写的概念和区别 3、接口和内部类、抽象类的特性 ... ** 2、forward 和redirect的区别 3、JSP的常用指令 三、servlet doc

    史上最全Java面试大全

    10. 描述forward 和redirect的区别 25 11.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收 26 12 EJB的优点有哪些? 26 13在Servlet处理请求的方式为 27 14如何...

    JSP实例编程100例

    14、&lt;c:forEach&gt; varStatus 的四种属性 15、&lt;c:forEach&gt; 的用法 16、从客户端传送数据至服务端 17、使用Unicode转义字符 18、使用朝鲜语字符集 19、JSP中最简单的国际化程序 20、错误检测 21、抛出异常 22、&lt;c:if&gt; ...

    超级有影响力霸气的Java面试题大全文档

    22、forward 和redirect的区别  forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址...

    java面试宝典

    174、JAVA SERVLET API中forward() 与redirect()的区别? 42 178、如何现实servlet的单线程模式 42 179、页面间对象传递的方法 42 180、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 42 181、四种会话...

    涵盖了90%以上的面试题

    forward与redirect区别 页面请求的工作流程 HTTP中的GET和POST方法有什么区别 什么是Servlet servlet是线程安全的吗 Servlet的生命周期 JSP和Servlet的区别和联系 什么是MVC模型 TCP的连接和释放过程 什么是长连接...

Global site tag (gtag.js) - Google Analytics