JSP请求转发

JSP请求

  • JSP使用<jsp:forward page="URL" />标签来转发请求
  • 转发的目标组件可以是HTMLJSPServlet
  • 转发点和Servlet一样,所有源组件的响应正文都不会被发送给浏览器,共享HttpServletRequestHttpServletResponse对象
  • Servlet中,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”)来分别获取值Tom12345

JSP包含

  • JSP可以使用<jsp:include page="URL" />标签和include指令来包含其他文件

    • 标签包含语法
      <jsp:include page="URL" />

    • 指令包含的语法
      <%@ include file="URL"%>

  • include指令用于静态包含,<jsp:include>标签用于动态包含,无论是静态包含还是动态包含,都共享请求范围内的数据

  • 静态包含和动态包含
    • 静态包含
      • 服务器在解析一个包含另一个JSP文件的JSP文件时,解析到include指令,就把这个指令指定的文件的整个内容完全包含到当前JSP文件中,然后在把整个JSP翻译为一个Servlet,编译,运行
      • 由于静态包含是把整个文件内容包含到当前文件中,所以,被包含文件可以访问包含文件的定义的局部变量
      • 被包含文件可以是JSPHTML,但不能是Servlet
      • 静态包含发生在解析期
    • 动态包含
      • 服务器在解析一个包含另一个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异常

  • 使用前面博客所讲的JSPpage指令来完成JSP异常的处理
  • <%@ page isErrorPage="true">表示当前JSP文件为异常处理文件
  • <%@ page errorPage="URL">表示当前页面发生异常,要转到的异常处理的页面。
  • 抛出异常的JSP文件和处理异常的JSP文件之间是请求转发的关系,共享同一HttpServletRequestHttpServletResponse对象
  • 1
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

hyetpang

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值