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

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

【Java.Web】JSP —— 语法基础 —— Action, Standard Action_第1张图片


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

【Java.Web】JSP —— 语法基础 —— Action, Standard Action_第2张图片


<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进行异常的捕获。







你可能感兴趣的:(java,Web)