1、概述
JSP规范中定义了一系列的标准动作,Web容器按照规范进行了实现,可以解析并执行标准动作。而标准动作使用的是标准的xml语法,看上去也比较直观易懂,下面来看一个结构例子:
<jsp:action_name attribute1="value1" attribute2="value2"></jsp:acion_name>
1
1
<jsp:action_name attribute1="value1" attribute2="value2"></jsp:acion_name>
上面的代码中,action_name表示标准动作的名字,而attribute1和attribute2是标准动作的若干个属性。
2、三种常用的标准动作
2.1 forward
forward动作,用于在JSP页面进行请求转发,如下代码示例:
<jsp:forward page="loginSuccess.jsp"></jsp:forward>
1
1
<jsp:forward page="loginSuccess.jsp"></jsp:forward>
上述代码将把请求转发到loginSuccess.jsp页面,类似在Servlet中调用RequestDispatcher的forward方法进行请求转发。即在JSP页面中 <jsp:forward page="loginSuccess.jsp"></jsp:forward> 和 <% request.getRequestDispatcher("loginSuccess.jsp").forward(request, response); %> 是一样的效果。
包含该动作的页面,在你访问时,则会被请求转发到 loginSuccess.jsp 页面当中去。
2.2 include
形如:
<jsp:include page="head.jsp"></jsp:include>
1
1
<jsp:include page="head.jsp"></jsp:include>
include动作则表示在JSP页面中进行动态包含,这和JSP指令中的静态包含是稍有不同的。动态包含,即在运行期间访问被包含的页面,并将响应结果同包含页面的响应结果合并,生成最终的响应。类似在Servlet中调用RequestDispatcher的include方法进行包含。
和include指令的静态包含不同的在于,静态包含发生在翻译阶段,被包含的JSP文件不会生成Java类,而是翻译后包含在主体文件的Java类中,即静态包含最终只会生成一个Java类。而动态包含,则各自的JSP页面会生成各自的Java类,只是最终响应的结果会进行合并。
2.3 param
param动作往往是作为forward和include动作的子动作进行使用,用以传递参数。如下代码示例:
<jsp:forward page="copyright.jsp">
<jsp:param name="author" value="zhangsan"/>
</jsp:forward>
<jsp:include page="head.jsp">
<jsp:param name="time" value="2018-01-30"/>
</jsp:include>
x
1
<jsp:forward page="copyright.jsp">
2
<jsp:param name="author" value="zhangsan"/>
3
</jsp:forward>
4
5
<jsp:include page="head.jsp">
6
<jsp:param name="time" value="2018-01-30"/>
7
</jsp:include>
8
上述代码使用param为forward和include动作传递参数,参数将被作为请求参数进行传递。如此处为head.jsp传递了参数time,那么在head.jsp页面中,则可以通过类似 <%=request.getParameter("time") %>的方式进行获取显示。
3、JavaBean相关的标准动作
所谓JavaBean,是用Java语言描述的软件组件模型,实际上就是一个JavaSE的类,该类遵循一定的规范:
- 必须是public类
- 必须有一个无参的public构造方法
- 返回属性的方法为getXxx
- 设置属性的方法为setXxx
而在JSP中,则有三个标准动作和JavaBean有关,由于现在更多使用JSTL、EL表达式,所以这些标准动作使用较少。
3.1 useBean
<jsp:useBean id="" class="" scope="" ></jsp:useBean>
1
1
<jsp:useBean id="" class="" scope="" ></jsp:useBean>
使用useBean标准动作,可以获取(或创建)一个在 {scope} 范围内名为 {id} 的 {class} 类,scope范围可以为page、request、session、application。
<jsp:useBean id="zhangsan" class="com.learn.Person" scope="request" ></jsp:useBean>
1
1
<jsp:useBean id="zhangsan" class="com.learn.Person" scope="request" ></jsp:useBean>
如上例的含义为:调用request.getAttribute("zhangsan"),如果没有zhangsan,则调用Person的无参构造方法创建,并setAttribute("zhangsan", new Person())。
3.2 setProperty
<jsp:setProperty name="" property="" param|value="" />
1
1
<jsp:setProperty name="" property="" param|value="" />
setProperty用来对JavaBean对象的属性进行赋值,替代setXxx方法。其中:
- name 表示JavaBean对象的id值
- property 表示JavaBean对象的属性名
- param 如果希望注入的值是请求参数,则使用param属性
- value 如果希望注入的值是一个常量,则使用value属性
3.3 getProperty
<jsp:getProperty name="" property="" />
1
<jsp:getProperty name="" property="" />
getProperty用来调用JavaBean对象的getXxx方法获取对应属性值,其中:
- name 表示JavaBean对象的id值
- property 表示JavaBean对象的属性名
4、其他
以上就是常见的几种JSP标准动作了,还有一部分用得就更少了,如果有兴趣可以自行了解。
5、写在后面的话
但是如今,谁还用什么JSP标准动作啊???