Java Web 回顾总结(六) - jsp - 三大常用标签

JSP标签介绍

  JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
  区分开 jsp 指令 , 不要发生混淆
阿斯顿撒

JSP常用标签

jsp的常用标签有
<jsp:include>
<jsp:forward>
<jsp:param>

<jsp:include>标签

之前 在 指令 种 了解到过 ,这里 单独简绍 ,重在使用
动态引入 :
<jsp:include>标签用于把 另外一个资源的输出内容 插入进当前 JSP页面的输出内容之中,在 JSP页面执行时的引入
语法:
<jsp:include page=" relativeURL | <%=expression%> " flush="true|false" />
page属性指定 被引入资源相对路径,它也可以通过执行一个 表达式 来获得。
flush属性指定 在插入其他资源的 输出内容 时,是否先将当前 JSP页面的已输出的内容 刷新 到客户端。

例:使用jsp:include标签引入资源

<h1> 网页主题 </h1>
<jsp:include page="/Jsp-Include/index.jsp" flush="true">

<jsp:include>标签与include指令的区别

  <jsp:include>标签是 动态引入<jsp:include>标签涉及到的2个JSP页面会被翻译成2servlet,这2个servlet的内容在执行时进行合并。

动态包含就是指先将各个页面分别处理,处理完之后再将处理后的结果包含进来。

  而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在 源文件级别 进行合并。

  不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML全局架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。


*.jspf扩展名文件在jsp:include@include:import中的区别

  JSP规范建议使用.jspf(JSP fragments)作为 静态引入 文件的扩展名。
  一个JSP文件命名为jspf扩展名,然后 include 到另一个 jsp 文件中的,发现只有用 @include 指令的时候,jspf 文件的内容才会被解析并执行其中的 jsp指令tag
  使用jsp:includeJSTL:import都没有用,jspf文件被 当作 纯文本 文件处理了。 

jspf 文件 Tomcat服务器 被当作 纯文本文件 处理了,没有当作jsp页面来解析执行

tomcat 服务器能够解析执行 *.jspf 文件中的 java 代码标签

有如下的几种解决办法:

解决办法一:
修改 web.xml文件,添加对扩展名为 *.jspf文件的映射

如下所示:

      <!-- 让jspf扩展名同样成为JSP Servlet处理的文件。 -->
      <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jspf</url-pattern>
      </servlet-mapping>
      <!-- 让jsp扩展名同样成为JSP Servlet处理的文件。 -->
      <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jsp</url-pattern>
     </servlet-mapping>

  上面的配置方式也可以简写成这样:

     <servlet-mapping>
         <servlet-name>jsp</servlet-name>
         <url-pattern>*.jsp</url-pattern>
         <!-- 让jspf扩展名同样成为JSP Servlet处理的文件。-->
         <url-pattern>*.jspf</url-pattern>
     </servlet-mapping>

  两种写法的效果都是一样的。

添加这样的配置信息后,此时tomcat服务器就可以正常解析执行*.jspf文件了,如下所示:

解决办法二:
修改 Tomcat 服务器web.xml文件,添加对扩展名为 *.jspf文件的映射
找到 tomcat服务器的 web.xml文件,如下所示:
找到名字为 jsp的那个 Servlet,如下所示:
  <servlet>
          <servlet-name>jsp</servlet-name>
          <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
          <init-param>
              <param-name>fork</param-name>
              <param-value>false</param-value>
          </init-param>
          <init-param>
              <param-name>xpoweredBy</param-name>
             <param-value>false</param-value>
         </init-param>
         <load-on-startup>3</load-on-startup>
 </servlet>

然后根据Servlet名找到对应的servlet-mapping配置
如下所示:

     <!-- The mappings for the JSP servlet -->
     <servlet-mapping>
         <servlet-name>jsp</servlet-name>
         <url-pattern>*.jsp</url-pattern>
         <url-pattern>*.jspx</url-pattern>
     </servlet-mapping>

在这里可以看到,名字为jsp的那个Servlet只支持*.jsp*.jspx两种扩展名
因此可以在这个地方添加多一个<url-pattern>``*.jspf``</url-pattern>

    <!-- The mappings for the JSP servlet -->
     <servlet-mapping>
         <servlet-name>jsp</servlet-name>
         <url-pattern>*.jsp</url-pattern>
         <url-pattern>*.jspx</url-pattern>
         <url-pattern>*.jspf</url-pattern>
     </servlet-mapping>

经过这样的配置之后,Tomcat服务器就可以正常 解析和执行 *.jspf 文件了。


<jsp:forward>标签

  标签用于把请求转发给另外一个资源。
  语法:
  <jsp:forward page="relativeURL | <%=expression%>" />
  page 属性 用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。

使用<jsp:forward>标签跳转页面

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%--使用<jsp:forward>标签跳转到02.jsp--%>
 <jsp:forward page="/02.jsp"/>

注:

  从页面的显示效果来看,页面已经完成了跳转,但地址栏没有变化,地址栏中显示的地址仍是源网址 ,但页面显示的内容却是forward 以后的内容。
  因为此跳转属于服务器端跳转
  只要是服务器端跳转,则地址栏永远没有变化。


<jsp:param>标签

  当使用<jsp:include><jsp:forward>标签 引入 或将请求 转发 给其它资源时,可以使用<jsp:param>标签向这个资源传递参数
 
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>

注: 
<jsp:param>标签的name属性用于指定参数名value属性用于指定参数值
  
<jsp:include><jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。

使用<jsp:param>标签向被包含的页面传递参数

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <h1>参数传递</h1>
 <hr/>
 <jsp:include page="/jsp/Inc.jsp">
     <jsp:param name="parm1" value="value1" />
     <jsp:param name="parm2" value="value2" />
 </jsp:include>

Inc.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <h1>接收从03.jsp页面中传递过来的参数:</h1>
 <h2><%=request.getParameter("parm1")%></h2>
 <h2><%=request.getParameter("parm2")%></h2>

  在03.jsp页面中使用<jsp:include>标签将Inc.jsp页面包含进来
  使用<jsp:param/>标签向Inc.jsp页面传递了两个参数parm1parm2

  
例:
使用<jsp:param>标签向要跳转的页面传递参数

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%--使用<jsp:forward>标签跳转到04.jsp--%>
 <%--使用<jsp:param>标签向04.jsp传递参数--%>
 <jsp:forward page="/04.jsp">
     <jsp:param name="ref1" value="value1" />
     <jsp:param name="ref2" value="value2" />
 </jsp:forward>
 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <h1>跳转之后的页面!!</h1>
 <h1>接收从forwarddemo03.jsp传递过来的参数:</h1>
 <h1>ref1:<%=request.getParameter("ref1")%></h1>
 <h1>ref2:<%=request.getParameter("ref2")%></h1>

猜你喜欢

转载自blog.csdn.net/lendq/article/details/80072883
今日推荐