标签:
与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。利用JSP动作
可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
JSP动作元素(action elements),动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包
含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。
动作元素只有一种语法,它符合XML标准:
<jsp:action_name attribute="value" />
动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素
如下:
所有的动作要素都有两个属性:id属性和scope属性。
id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext对象来调
用。这些我们会在下面的实例中进行演示。
scope属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的
寿命。 scope属性有四个可能的值:page、request、session和application,这是JSP的四个作用域。
第一类是与JavaBean有关的,包括3个动作元素:
<jsp:useBean> <jsp:getProperty> <jsp:setProperty>
第二类是JSP1.2就开始有的基本元素,包括6个动作元素:
<jsp:include> <jsp:foward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
第三类是JSP2.0新增加的元素,主要与JSP Document有关,包括6个动作元素:
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
第四类是JSP2.0新增加的元素,主要是用来动态生成XML元素标签的值,包括3个动作元素:
<jsp:attribute> <jsp:body> <jsp:element>
第五类是JSP2.0新增加的元素,主要使用在Tag Filter中,包括2个动作元素:
<jsp:invoke> <jsp:dobody>
JavaBean就是符合某种特定的规范的Java类。使用JavaBean的好处是解决代码重复编写,减少代码冗余,功能
区分明显,提高了代码的可维护性。
先使用图示来说明JavaBean的四个设计原则:
JavaBean其实就是Java程序,只不过需要在JSP页面中应用,不定义成public类型的,当不是在同一个包下时(项
目里一般会把JavaBean放在单独的文件夹下,所有不可能在同一包下了)不可以访问。
定义成私有变量实际上是出于安全性的考虑,把变量封装起来,所以需要public的getter和setter方法访问这些
私有属性。
一般不显式的写出构造方法,那么类都会默认的创建一个无参的公有构造方法,这是为了方便创建类的实例对
象。
对类的私有属性进行重构,得到这些私有属性的getter和setter方法,为的是获取属性值和设置属性值。
实例:设计一个符合JavaBean设计原则的类
package com.entity;
/**
* 用户实体类的访问属性是public
* @author Administrator
* @date 2016年7月11日
*/
public class Users {
//私有属性
private String username;
private String password;
//无参构造器
public Users(){
}
//通过重构得到setter和getter方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
实例:在JavaBean项目下的Java Resources目录下创建一个JavaBean类Users,在WebContent目录下创建
index.jsp页面。
JavaBean类Users的代码为如上个例子中创建的Users类。
index.jsp页面源代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入包 -->
<%@ page import="com.entity.Users" %>
<!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>JavaBean实例</title>
</head>
<body>
<h1>使用普通方式创建JavaBean的实例</h1>
<hr>
<%
Users user = new Users(); //创建JavaBean类的实例user
user.setUsername("admin"); //设置用户名
user.setPassword("123456"); //设置密码
%>
用户名:<%=user.getUsername() %><br>
密码:<%=user.getPassword() %><br>
</body>
</html>
运行结果:
作用:在JSP页面中实例化或者在指定范围内使用JavaBean。<jsp:useBean>动作元素用来加载一个将在JSP页
面中使用的JavaBean。这个功能非常有用,因为它使得我们可以发挥JavaBean组件复用的优势。
最简单的语法为:
<jsp:useBean id="标识符" class="Java类名" scope="作用范围" ></jsp:useBean>在JavaBean类载入后,我们既可以通过<jsp:setProperty>动作元素和<jsp:getProperty>动作元素来修改和检索Bean的属性。以下是useBean动作元素相关的属性列表:
在给出具体实例前,让我们先来看下<jsp:setProperty>动作元素和<jsp:getProperty>动作元素。
<jsp:setProperty>动作元素用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在<jsp:setProperty>动作元素的外面(后面)使用<jsp:setProperty>动作元素,如下所示:
<jsp:useBean id="myName" ... ></jsp:useBean>
...
<jsp:setProperty name="myName" property="someProperty" .../>
此时,不管<jsp:setProperty>动作元素是找到了一个现有的Bean类,还是新创建了一个Bean类例,<jsp:setProperty>动作元素都会执行。第二种用法是把<jsp:setProperty>动作元素放入<jsp:useBean>动作元素的内部,如下所示:
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
此时,<jsp:setProperty>动作元素只有在新建Bean类实例时才会执行,如果是使用现有实例则不执行<jsp:setProperty>动作元素。
<jsp:setProperty>动作元素有下面四个属性,如下表:
<jsp:getProperty>动作元素提取指定Bean类属性的值,转换成字符串,然后输出。
语法格式如下:
<jsp:useBean id="myName" ... /><jsp:useBean> ... <jsp:getProperty name="myName" property="someProperty" .../>
下表是与getProperty相关联的属性:
实例
依然使用上面例子中的JavaBean类Users类。
新建的useBean.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>JavaBean实例</title>
</head>
<body>
<h1>使用useBean方式创建JavaBean的实例</h1>
<hr>
<jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
<!-- 使用setProperty方式来设置用户名和密码 -->
<jsp:setProperty property="username" name="myUsers" value="admin"/><br>
<jsp:setProperty property="password" name="myUsers" value="123456"/><br>
<!-- 使用传统的表达式来获取用户名和密码 -->
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
<hr>
<!-- 使用getProperty方式来获取用户名和密码 -->
用户名:<jsp:getProperty property="username" name="myUsers"/><br>
密码:<jsp:getProperty property="password" name="myUsers"/><br>
</body>
</html>
运行结果:
<jsp:setProperty>动作元素作用:给已经实例化的JavaBean对象的属性赋值,一共有四种形式:
实例://跟表单关联 <jsp:setProperty name="JavaBean实例名" property="*" />
// 跟表单关联 <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" />
//手工设置属性值 <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue" />
//跟request参数关联 <jsp:setProperty name="JavaBean实例名" property="propertyName" param="request对象中的参数名" />
照常使用JavaBean类Users类。
login.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>登录页面</title>
</head>
<body>
<h1>登录表单</h1>
<hr>
<form name="loginForm" action="dologin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value="" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登录" /></td>
</tr>
</table>
</form>
</body>
</html>
dologin.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>登录页面</title>
</head>
<body>
<%
//防止中文乱码
request.setCharacterEncoding("utf-8");
%>
<h1>setProperty动作元素的使用</h1>
<hr>
<jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
<!-- 通过request对象得到属性值 -->
用户名:<%=request.getParameter("username") %><br>
密码:<%=request.getParameter("password") %><br>
<hr>
<!-- 根据表单自动匹配所有属性 -->
<jsp:setProperty property="*" name="myUsers"/>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
<hr>
<!-- 根据表单匹配部分的属性 -->
<jsp:setProperty property="username" name="myUsers"/>
<jsp:setProperty property="password" name="myUsers"/>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
<hr>
<!-- 跟表单无关,通过手动赋值给属性 -->
<jsp:setProperty property="username" name="myUsers" value="Rose" />
<jsp:setProperty property="password" name="myUsers" value="888888" />
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
</body>
</html>
运行结果:
对于最后一种我们这样修改:
在login.jsp中的表单中做出如下修改:
在dologin.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>登录页面</title>
</head>
<body>
<%
//防止中文乱码
request.setCharacterEncoding("utf-8");
%>
<h1>setProperty动作元素的使用</h1>
<hr>
<jsp:useBean id="myUsers" class="com.entity.Users" scope="page"></jsp:useBean>
<hr>
<!-- 通过URL传参数给属性赋值 -->
<jsp:setProperty property="username" name="myUsers" param="user" />
<jsp:setProperty property="password" name="myUsers" param="pass" />
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
</body>
</html>
运行后我们输入用户名:李四,密码:123456,最后的结果是:
标签:
原文地址:http://blog.csdn.net/erlian1992/article/details/51918143