jsp 指令
指令的语法规则:<%@ 指令名 属性1="值1" 属性2="值2" ... %>
1. page 指令
页面指令。page 指令天天都会看到,只要创建了 jsp 文件,那么第一行就是 page 指令。
1.1 最常见的3个属性
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
1.2 其他常用的属性
1. import 属性:和 Java 中 import 关键字一样,用于引入类文件。
例如,在 jsp 文件中引入java.util.List
文件的代码:import="java.util.List"
,之后就可以在 jsp 文件中使用 List了
如果想要引入多个类文件,多个类文件之间用逗号分隔import="java.util.List,java.util.ArrayList"
2. isELIgnored 属性:是否忽略 EL 表达式,因为有的浏览器会忽略 EL 表达式,所以常常需要加上这个属性isELIgnored="false"
3. session 属性:是否使用 session,其默认值是 true,表示使用 session,一般不会去设置。
对应的标签写法:
<jsp:directive.page import="" />
2. taglib 指令
标签库指令在使用 jstl 时会用到的 (jstl —— jsp standard tag lib,jsp 标准标签库)
3. include 指令
包含指令,将子文件内容放到主文件中。例如,<%@ include file=""%>
,其中 file 的路径填写请求转发路径(不带有工程名)
示例: 在如下所示的目录结构中,希望在 testJsp 文件中包含 yanzhengma 文件
代码:
<%@ include file="/D20210222/yanzhengma.jsp" %>
对应的标签格式
<jsp:directive.include file="/D20210222/yanzhengma.jsp" />
jsp 动作(/行为)元素
语法 | 描述 |
---|---|
jsp:include | 在当前页面中包含一个静态or动态的资源 |
jsp:useBean | 寻找和初始化一个 JavaBean 组件 |
jsp:setProperty | 设置 JavaBean 组件的值 |
jsp:getProperty | 将 JavaBean 组件的值插入到 output 中 |
jsp:forward | 从一个 JSP 文件向另一个文件传递一个包含用户请求的 request 对象 |
jsp:plugin | 用于在生成的 HTML 页面中包含 Applet 和 JavaBean 对象 |
jsp:element | 动态创建一个 XML 元素 |
jsp:attribute | 定义动态创建的 XML 元素的属性 |
jsp:body | 定义动态创建的 XML 元素的主题 |
jsp:text | 用于封装模板数据 |
1. include 动作
代码示例:<jsp:include page="/D20210222/yanzhengma.jsp">
include指令 | include动作 | |
---|---|---|
属性 | file | page |
路径 | 请求转发路径 | 请求转发路径 |
过程 | 静态包含 | 动态包含 |
静态包含:被包含的文件被原封不动的放入到包含页面中使用该指令的位置,然后 JSP 编译器再对这个合成文件进行编译,所以在一个 JSP 页面中使用 include 指令来包含另一个 JSP 页面,最后编译的文件只有一个。
动态包含:当执行 include 动作后,JSP 程序会将请求转发到被包含页面,并将执行结果输出到浏览器中,然后返回页面继续执行后面的代码,因为 Web 容器执行的是两个文件,所以 JSP 编译器会分别对这两个文件进行编译。
注意:include 动作通常用于那些经常改动的文件,因为被包含的文件改动不会影响到包含文件,因此不需要对包含文件进行重新编译。
2. forward 动作
forward 动作就是请求转发,使用 page 属性来指示请求转发的路径。
代码示例:
<jsp:forward page="/D20210221/D20210222A.jsp" />
需要注意的:
- 即使写在 javascript 中,jsp 文件依旧会先解析成 Java 类文件,此时 javascript 中的 Java 相关的代码会编译执行
例如:在 javascript 中只是定义的 test() 方法中使用了 jsp 的 forward 动作,但是没有调用 test() 方法,打开网页时,依旧会进行请求转发,这就是因为 jsp 文件的执行过程决定的。
<script type="text/javascript">
function test() {
<jsp:include page="/D20210221/form.html" />
}
</script>
- 同理,html 注释和 javascript 注释中的 jsp 代码会执行,只有 jsp 注释中的 jsp代码不会执行。
3. useBean 动作
该动作就是在网页端使用 Java 端的实体类。
1. 无对象 → 则创建对象
2. 有对象 → 则获取对象
<jsp:useBean id="pm1" class="D20210220.PersonModel" scope="request" />
如果在request域中没有 pm1 这个对象,那么上面代码的作用相当于 Java 代码中对实体类对象的操作
PersonModel pm = new PersonModel();
request.setAttribute("pm1",pm);
如果有 pm1 这个对象,那么就是获取这个对象。
4. setProperty 动作
<jsp:setProperty name="pm1" property="age" value="22" />
<%-- 相当于Java代码:pm1.setAge(22); --%>
5. getProperty 动作
<jsp:getProperty name="pm1" property="age" />
<%-- 相当于Java代码:pm1.getAge(22); --%>
下面三条语句的作用都是在网页端显示 PersonModel 对象 pm1 的 age属性值。
<%-- jsp 动作显示 --%>
<jsp:getProperty name="pm1" property="age" />
<%-- jsp 表达式显示 --%>
<%=pm1.getAge()%>
<%-- jsp 内置对象显示 --%>
<%out.println(pm1.getAge());%>