JSP中的指令只是用来设定页面信息的,而动作是在请求处理时起作用的一些行为,其格式总是这样的XML形式:
<jsp:动作名称 属性=属性值/>
include动作
之前学的include指令是在JSP文件被转换成Servlet的时候导入静态文件,是在编译的时候就导入了的;而include动作则是在页面被请求时才导入的静态或者动态的文件。
include动作的page属性指出文件的URL,而flush属性可以决定是否在导入文件前刷新缓冲区:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8">
</head>
<body>
jsp:include
<jsp:include page="testIncld.jsp"/>
</body>
</html>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
都能随着刷新改变:
但include指令只是简单的代码重用,include动作在运行时会产生请求,所以能实时检查被包含内容的变化。并且include指令的URL不支持带参数。
两者之间,include指令的速度会稍微快一些,但include动作的可维护性好很多,所以尽量使用include动作。因为导入页面的时机不同,有些时候只能使用include指令而无法使用include动作:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8">
</head>
<body>
<%@include file="testIncld.jsp" %>
<%
out.println(a);//a的声明在导入的文件中,在编译前必须导进来
%>
</body>
</html>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%!int a=1856;%>
JavaBean
JavaBean是一种规范的Java类,具有可以用get和set方法读写的一系列属性,以及无参构造函数,并实现可以序列化的结构。为什么要使用这个规范还不清楚,在知乎上查到了一个用户的评论,留存一下:
以Struts2为例,如果Action不是JavaBean,就不能自动接收参数。就不能在ognl中方便的访问。Hibernate如果不是JavaBean,就不能正确的映射。Spring如果不是JavaBean,就不能正确的注入。
书写一个符合JavaBean规范的类:
package myPckg;
import java.io.Serializable;
public class Student implements Serializable{
private String name;
private int age;
public Student(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
其中的get方法也称为访问器,set方法也称为写入器。
useBean动作
该动作加载一个JavaBean给JSP页面使用,如加载刚刚的JavaBean:
<%--加载myPckg包下的Student类,以Std为id使用它--%>
<jsp:useBean id="Std" class=myPckg.Student/>
useBean动作还有一些其它的参数,以后用到再学。
getProperty和setProperty动作
这两个动作可以用name属性和useBean的id属性关联,以去使用指定的JavaBean的访问器和写入器:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8">
</head>
<body>
<%--加载myPckg包下的Student类,以Std为id使用它--%>
<jsp:useBean id="Std1" class="myPckg.Student"/>
<jsp:useBean id="Std2" class="myPckg.Student"/>
<jsp:setProperty property="name" name="Std1" value="SB"/>
<jsp:setProperty property="name" name="Std2" value="刘知昊"/>
<jsp:setProperty property="age" name="Std2" value="20"/>
<jsp:setProperty property="age" name="Std1" value="200"/>
<table border="1" width="300">
<tr>
<th>name</th>
<th>age</th>
</tr>
<tr>
<td><jsp:getProperty name="Std1" property="name"/></td>
<td><jsp:getProperty name="Std1" property="age"/></td>
</tr>
<tr>
<td><jsp:getProperty name="Std2" property="name"/></td>
<td><jsp:getProperty name="Std2" property="age"/></td>
</tr>
</table>
</body>
</html>