`
pandonix
  • 浏览: 399792 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Servlet中的forward

 
阅读更多

众所周知,forward是常用页面重定向方式之一。以前对于forward认知,仅限于可用阶段和理解它与sendRedirect的区别。使用时,几乎每次都是可耻的copy现有代码,未从深究过forward来龙去脉。

直到最近forward的使用过程中遇到了一个路径问题,正好得空,就此略微深入了解一番。

首先来看forward常用方式:

 

request.getRequestDispatcher(path).forward(request,response);

其实稍微一深究,就会有几个疑问:

1、getRequestDispatcher出来的究竟是神马对象?它还有什么其他用途?还有其它获取方式没有?

2、path是否为相对路径?

RequestDispatcher对象(详细可参考Servlet规范中的SRV.8节ServletAPI

查看相关文档之后,答案其实很简单:

顾名思义,它起到requst的分发作用。除了Request对象中获取,还可以从ServletContext对象中获取

 

this.getServletContext().getRequestDispatcher

关于路径问题,servlet spec有这么一段解释:

The behavior of this method is similar to the method of the same name in the
ServletContext. The servlet container uses information in the request object to
transform the given relative path against the current servlet to a complete path.

简单来理解,request对象中获取的,容器会根据request上来的路径进行相对路径的处理,所以request对应的获取方法支持相对路径。然而ServletContext对应的获取方法只支持绝对路径。

在tomcat中,在ServletContext.getRequestDispatcher方法中使用相对路径,得到以下异常:

 

 

java.lang.IllegalArgumentException: Path f.htm does not start with a "/" character
	org.apache.jsp.wap20.forward_jsp._jspService(forward_jsp.java:43)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

 而在resin中,也有类似的异常:

 

java.lang.IllegalArgumentException: request dispatcher url 'f.htm' must
be absolute

 答案显而易见了。

除了forward方法,RequestDispatcher对象还有一个include方法,作用跟jsp中的<%@ include file="path" %>一样,应该是为了在servlet中使用。

 

 

 

 

分享到:
评论
1 楼 qq672076266 2013-09-04  
一直不清楚forward(request,response)到底跳转哪去了(request和response所代表的请求页面,也就是发送这个request的页面),依据什么跳转的?
Servlet API中是这样描述的:
Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server.

相关推荐

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

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

    Servlet之forward、sendRedirect、 include区别与使用实例

    Servlet之forward、sendRedirect、 include区别与使用实例 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/45169569

    java面试大全视频版

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

    javaweb的servlet的forward协作

    本项目的主要是模仿服务员、初始、送菜人展开的 使用forward定向转发数值 其中比较关键的是request.getParameter()和request.setAttribute 前者是接受,后者是传值

    Tomcat Was7 javax.servlet.forward.request_uri属性的差异

    NULL 博文链接:https://dfch84.iteye.com/blog/1254445

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

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

    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. ...

    JSP/Servlet Java面试逻辑题

    Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 ...

    JSP/Servlet

    JSP轉譯之後就是Servlet,各個隱含物件都對應於Servlet API中的某個物件,如果您對隱含物件的功能有什麼不瞭解的,查詢Servlet API文件中該物件的說明就可以瞭解了。 out request response config application ...

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

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

    本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 &lt;&#37; ...

    JSP与Servlet 技术总结

    3. Servlet 在web.xml中的配置 10 4. Servlet元素说明 11 5. 如何写一个Servlet? 11 6. 在web.xml里配置的初始化参数怎么才能读回来? 12 7. 如何获得网页中form表单中的参数 12 8. session跨请求(页面)传数据怎么...

    JSP和Servlet面试题

    常考面试题 1.讲下servlet的执行流程。 Servlet的执行流程也就是servlet的生命周期,当... 转发的url不会变,request.getRequestDispatch().forward() 重定向的url会改变,response.getRedirect().sendRedirect();

    jsp servlet 入门学习资料-新手一看就懂

    6.8 &lt;jsp:forward&gt; 6.9 使用插件 6.10 使用session对象 6.10.1 会话的概念 6.10.2 session对象可用的方法和属性 6.10.3 session对象的基本例子 6.10.4 利用session制作一个购物车 6.10.5 JavaBeans的作用域 ...

    Servlet与JSP核心编程第2版

    4.2 在servlet中读取表单数据 4.3 示例:读取3个参数 4.4 示例:读取所有参数 4.5 参数缺失或异常时默认值的应用 4.6 过滤字符串中的html特殊字符 4.7 根据请求参数自动填充java对象:表单bean 4.8 当...

    JavaWeb 面试

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

    基于servlet的购物车

    //得到书号和书本对象 int bookid =Integer.parseInt(request.getParameter("id")); Map, Book&gt; books = (Map, Book&gt;)request.... request.getRequestDispatcher("listcart.jsp").forward(request, response);

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    java web实验报告;开发环境及web基础, JSP、Servlet及JDBC、扩展JavaScript框架、Web应用综合设计

    实验1:Java Web开发环境及Web编程基础;实验2 JSP、Servlet及JDBC应用开发;实验3 扩展JavaScript框架应用;实验4 Web应用综合设计; 天津理工大学

Global site tag (gtag.js) - Google Analytics