JSP请求
- JSP使用
<jsp:forward page="URL" />
标签来转发请求 - 转发的目标组件可以是
HTML
、JSP
、Servlet
- 转发点和Servlet一样,所有源组件的响应正文都不会被发送给浏览器,共享
HttpServletRequest
、HttpServletResponse
对象 Servle
t中,HttpServletResponse
对象的sendRedirect(String location)
方法进行请求转发之后的代码也会执行,但是在JSP
中,转发标签之后的代码不会被执行在标签
<jsp:forward page="URL" />
之间可以加一个或多个<jsp:para 属性="值"/>
来向转发的目标组件传递参数<jsp:forward page="/hello.jsp"> <jsp:param name="username" value="Tom" /> <jps:param name="password" value="12345" /> </jsp:forward>
在目标组件中可以通过request.getParameter(“username”)和request.getParameter(“password”)来分别获取值
Tom
和12345
JSP包含
JSP可以使用
<jsp:include page="URL" />
标签和include
指令来包含其他文件标签包含语法
<jsp:include page="URL" />
指令包含的语法
<%@ include file="URL"%>
include
指令用于静态包含,<jsp:include>
标签用于动态包含,无论是静态包含还是动态包含,都共享请求范围内的数据- 静态包含和动态包含
- 静态包含
- 服务器在解析一个包含另一个JSP文件的JSP文件时,解析到
include
指令,就把这个指令指定的文件的整个内容完全包含到当前JSP文件中,然后在把整个JSP翻译为一个Servlet,编译,运行 - 由于静态包含是把整个文件内容包含到当前文件中,所以,被包含文件可以访问包含文件的定义的局部变量
- 被包含文件可以是
JSP
、HTML
,但不能是Servlet
- 静态包含发生在解析期
- 服务器在解析一个包含另一个JSP文件的JSP文件时,解析到
- 动态包含
- 服务器在解析一个包含另一个JSP文件的JSP文件时,先把当前JSP翻译为Servlet,解析包含语句
<jsp:include page="URL" />
,翻译为org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "包含的文件名", out, false)
这条语句,翻译完之后,运行这个Servlet,运行Servlet时碰到上述包含语句org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "包含的文件名", out, false)
,再开始解析被包含文件的内容,把它翻译为一个Servlet,在运行这个Servlet,运行完,回到当前Servlet继续运行直到结束 - 动态包含是各自JSP文件生成各自对应的Servlet文件,两个文件时独立的,所以,被包含文件不能访问包含文件声明的变量
- 被包含文件可以是HTML、JSP、Servlet文件
- 动态包含发生在运行时
- 服务器在解析一个包含另一个JSP文件的JSP文件时,先把当前JSP翻译为Servlet,解析包含语句
- 如何抉择
- 静态包含一般用来包含不会发生变化的网页内容
- 动态包含一般用来包含会发生变化的网页内容
- 静态包含
最后谈谈JSP
异常
- 使用前面博客所讲的
JSP
的page
指令来完成JSP
异常的处理 <%@ page isErrorPage="true">
表示当前JSP
文件为异常处理文件<%@ page errorPage="URL">
表示当前页面发生异常,要转到的异常处理的页面。- 抛出异常的
JSP
文件和处理异常的JSP
文件之间是请求转发的关系,共享同一HttpServletRequest
和HttpServletResponse
对象