动作Action被编译成某个操作的Java代码。
例如访问某个Java对象,或者调用某个方法。action会影响输出的结果,同时也会使用,创建或者修改对象。
action依赖与JSP Page所接收到的request对象的具体细节。
JSP规范包含了一些标准的action,这些action必须被JSP容器所实现。
例如我们在前面使用过的标准action:<jsp:include>,<jsp:forward>。
这个动作将创建一个与某个Java对象相关的脚本变量。它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一。但是有了向定制标签和Expression Language这类技术之后,现在已经很少使用useBena了。
jsp:useBean动作在给定的scope范围内,与一个java对象相关联,并可通过一个id值在JSP脚本中来引用这个对象。
jsp:useBean 属性:
jsp:useBean的语法为:
<jsp:useBean id="name" scope="page|request|session|application" typeSpec /> typeSpec ::= class=”className” | class=”className” type=”typeName” | type=”typeName” class=”className” | beanName=”beanName” type=”typeName” | type=”typeName” beanName=”beanName” | type=”typeName”
jsp:useBean可以包含一个body:
<jsp:useBean id="name" scope="page|request|session|application" typeSpec > body </jsp:useBean>
使用示例:
在standardactions.jsp中使用jsp:userBean,
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <%-- jsp:useBean--%> <jsp:useBean id="today" class="java.util.Date"></jsp:useBean> <%= today %> <br/> </body> </html>
在浏览器中访问url:
http://localhost:8080/base-webapp/jsp/standardactions.jsp
页面显式如下:
在生成的java类中,jsp:useBean对应的java代码为:
java.util.Date today = null; synchronized (_jspx_page_context) { today = (java.util.Date) _jspx_page_context.getAttribute("today", PageContext.PAGE_SCOPE); if (today == null){ today = new java.util.Date(); _jspx_page_context.setAttribute("today", today, PageContext.PAGE_SCOPE); } }
setProperty动作是在一个Java对象中保存一个属性。setProperty中属性name所指定对象必须在这个action使用之前被定义。
jsp:setProperty属性为:
jsp:setProperty的语法为:
<jsp:setProperty name="beanName" prop_expr /> prop_expr ::= property="*" | property=”propertyName”| property=”propertyName” param="parameterName"| property=”propertyName” value=”propertyValue” propertyValue ::= string
使用示例:
创建一个JavaBean:
package com.gof.test.bean; public class TestBean { private String id; private String firstName; private String lastName; public String getId() { return id; } public void setId(String id){ this.id= id; } public String getFirstName(){ return firstName; } public void setFirstName(String firstName){ this.firstName = firstName; } public String getLastName(){ return lastName; } public void setLastName(String lastName){ this.lastName = lastName; } }
修改上面的jsp文件为:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <%-- jsp:useBean--%> jsp:useBean<br/> <jsp:useBean id="today" class="java.util.Date"></jsp:useBean> <%= today %> <br/> <%-- jsp:setProperty --%> jsp:setProperty<br/> <jsp:useBean id="testBean" class="com.gof.test.bean.TestBean" /> <jsp:setProperty property="id" name="testBean" value="1" /> <jsp:setProperty property="firstName" name="testBean" value="my first name" /> <jsp:setProperty property="lastName" name="testBean" value="my last name" /> id is <%= testBean.getId() %> <br/> firstName is <%= testBean.getFirstName() %><br/> lastName is <%= testBean.getLastName() %> <br/> <br/> </body> </html>
访问该JSP,浏览器显示为:
getProperty则是获取一个Java对象的属性。
jsp:getProperty动作获取bean实例的属性并转换为一个String对象,将其隐式的输入到out对象中。
<jsp:getProperty>的语法:
<jsp:getProperty name=”name” property=”propertyName” />
<jsp:getProperty>的属性为:
使用示例:
修改上面的jsp文件为:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <%-- jsp:useBean--%> jsp:useBean<br/> <jsp:useBean id="today" class="java.util.Date"></jsp:useBean> <%= today %> <br/> <%-- jsp:setProperty --%> jsp:setProperty<br/> <jsp:useBean id="testBean" class="com.gof.test.bean.TestBean" /> <jsp:setProperty property="id" name="testBean" value="1" /> <jsp:setProperty property="firstName" name="testBean" value="my first name" /> <jsp:setProperty property="lastName" name="testBean" value="my last name" /> id is <%= testBean.getId() %> <br/> firstName is <%= testBean.getFirstName() %><br/> lastName is <%= testBean.getLastName() %> <br/> getProperty - id is <jsp:getProperty property="id" name="testBean"/><br/> getProperty - firstName is <jsp:getProperty property="firstName" name="testBean"/><br/> getProperty - lastName is <jsp:getProperty property="lastName" name="testBean"/> <br/> <br/> </body> </html>
访问jsp,浏览器显示为:
include动作用于的哦你太包含另一个Web组件;具体参见 包含 一节。
当使用include动作时,应为包含是发生在发生请求时,因此,可以利用include动作传递参数,include指令不能。
当使用include指令时,被包含资源的文件扩展名并不重要;而使用include动作时,文件扩展名必须为jsp,以便它能够作为一个JSP页面进行处理。
<jsp:include>的语法为:
<jsp:include page=”urlSpec” flush="true|false"> { <jsp:param .... /> }* </jsp:include>
<jsp:include>的属性为:
forward动作是将当前页面跳转到另一个不同的页面,具体参见 转发 一节。
forward动作同样可以包含param参数。
<jsp:forward>的语法为:
<jsp:forward page=”urlSpec”> { <jsp:param .... /> }* </jsp:forward>
<jsp:forward>的属性为:
jsp:element元素用来提供key/value的信息。这个动作用于jsp:include,jsp:forward,jsp:params元素内部。
<jsp:param>的语法为:
<jsp:param name="name" value="value" />
对于使用动作action所产生的异常,可以使用JSP 的 errorPage,isErrorPage进行异常的捕获。