JSP
标签介绍
JSP
标签也称之为Jsp Action
(JSP动作
)元素,它用于在Jsp
页面中提供业务逻辑功能,避免在JSP
页面中直接编写java
代码,造成jsp
页面难以维护。
区分开 jsp 指令
, 不要发生混淆
JSP
常用标签
-
<jsp:include>
<jsp:forward>
<jsp:param>
jsp
的常用标签有
<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
页面会被翻译成2
个servlet
,这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:include
和JSTL
的: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
页面传递了两个参数parm1
和parm2
例:
使用<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>