您的位置:首页 > 编程语言 > Java开发

【Java.Web】JSP —— 语法基础 —— Action, Standard Action

2014-10-05 20:45 621 查看

动作 Action

动作Action被编译成某个操作的Java代码。

例如访问某个Java对象,或者调用某个方法。action会影响输出的结果,同时也会使用,创建或者修改对象。

action依赖与JSP Page所接收到的request对象的具体细节。

标准动作 Standard Action

JSP规范包含了一些标准的action,这些action必须被JSP容器所实现。

例如我们在前面使用过的标准action:<jsp:include>,<jsp:forward>。

<jsp:useBean>

这个动作将创建一个与某个Java对象相关的脚本变量。它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一。但是有了向定制标签和Expression Language这类技术之后,现在已经很少使用useBena了。

jsp:useBean动作在给定的scope范围内,与一个java对象相关联,并可通过一个id值在JSP脚本中来引用这个对象。

jsp:useBean 属性:

id —— 用来标识在指定的scope范围内的对象实例;大小写敏感;同时必须遵循当前使用语言(java)的命名规则
scope —— 当前引用的对象的使用scope;默认值为page,可选值为page,request,session,application。该bean实例将会属性写入到PageContext对象中,参数为对应的scope(参见PageContext一节)。
class —— 该引用对象的类型的全名;大小写敏感
beanName ——
type ——

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>


body内的内容当action所指定的对象被创建的时候会被调用;通常,body会包含一个java程序片段或者<jsp:setProperty>标签等,用来修改新建的对象。

使用示例:

在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);
}
}


<jsp:setProperty>

setProperty动作是在一个Java对象中保存一个属性。setProperty中属性name所指定对象必须在这个action使用之前被定义。

jsp:setProperty属性为:

name —— 在<jsp:useBean>中或其他action中定义的bean的实例的名称。这个bean必须包含要设置的属性;定义bean的action必须出现在<jsp:setProperty>之前(在同一个文件中)
property —— 需要设置值的属性的名称;
param —— 将request中对应参数的值赋值给指定的属性值;request来自页面的请求;
value —— 赋给属性的值
这个action不能同时设置param和value属性,只能保留一个

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,浏览器显示为:



<jsp:getProperty>

getProperty则是获取一个Java对象的属性。

jsp:getProperty动作获取bean实例的属性并转换为一个String对象,将其隐式的输入到out对象中。

<jsp:getProperty>的语法:

<jsp:getProperty name=”name” property=”propertyName” />




<jsp:getProperty>的属性为:


name —— 获取属性的对象实例的名称
property —— 获取的属性

使用示例:

修改上面的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,浏览器显示为:



<jsp:include>

include动作用于的哦你太包含另一个Web组件;具体参见
包含 一节。

当使用include动作时,应为包含是发生在发生请求时,因此,可以利用include动作传递参数,include指令不能。

当使用include指令时,被包含资源的文件扩展名并不重要;而使用include动作时,文件扩展名必须为jsp,以便它能够作为一个JSP页面进行处理。

<jsp:include>的语法为:

<jsp:include page=”urlSpec” flush="true|false">
{ <jsp:param .... /> }*
</jsp:include>


<jsp:include>的属性为:

page —— URL字符串
flush —— 可选的属性,是否立即输出buffer中的内容;默认为false

<jsp:forward>

forward动作是将当前页面跳转到另一个不同的页面,具体参见
转发 一节。

forward动作同样可以包含param参数。

<jsp:forward>的语法为:

<jsp:forward page=”urlSpec”>
{ <jsp:param .... /> }*
</jsp:forward>


<jsp:forward>的属性为:

page —— URL字符串

<jsp:param>

jsp:element元素用来提供key/value的信息。这个动作用于jsp:include,jsp:forward,jsp:params元素内部。

<jsp:param>的语法为:

<jsp:param name="name" value="value" />


<jsp:plugin>

<jsp:params>

<jsp:fallback>

<jsp:attribute>

<jsp:body>

<jsp:invoke>

<jsp:doBody>

<jsp:element>

<jsp:text>

<jsp:output>

其他标准actions

动作的异常处理

对于使用动作action所产生的异常,可以使用JSP 的 errorPage,isErrorPage进行异常的捕获。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: