从零开始的JSP(3)

JavaBean

JavaBean简介

JavaBean就是符合某种特定的规范的Java类,使用JavaBean的好处是解决代码的重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。

JavaBean的设计原则
包含以下4点:

  1. 公有类
  2. 无参数的公有构造函数
  3. getter和setter函数
  4. 私有属性域
1
2
3
4
5
6
7
8
public class Students{
public Students(){
}
public void setName(String name){this.name=name;}
public String getName() {return name;}
private String name;
}

JSP动作元素
JSP动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选内容、与开始标签匹配的结束标签。

JavaBean的使用

普通方法

如上面的Students知道创建JavaBean类的就像普通的Java类一样(在设计规范的规定下)。

1
2
3
4
5
6
7
8
9
<%@ page import="com.ackerman.Students"%>
<h1>使用普通方法创建JavaBean的实例</h1>
<%
Students stupid = new Students();
stupid.setName("Ackerman");
%>
输出效果:<%= stupid.getName() %><br/>

JSP动作标签方法

< jsp:useBean >:在JSP页面中实例化JavaBean对象

1
<jsp:useBean id="标示符" class="java包和类名" scope="作用范围">

####:在给已经实例化的JavaBean对象的属性赋值,一共有四中方式

1
2
3
4
5
6
7
<jsp:setProperty name="JavaBean实例名" property="*">(与表单关联)
<jsp:setProperty name="JavaBean实例名" property="具体的属性名">(与表单关联)
<jsp:setProperty name="student1" property="name" value="yoyocheckenow"/>(手工设置)
<jsp:setProperty name="student1" property="name" param="传递的参数"/>(与request请求的数据有关)

下面是用法展示:
先写一个登录login.jsp的页面

1
2
3
4
5
6
7
8
9
10
11
<form action="dologin.jsp" name="loginForm" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit"></td>
</tr>
</table>
</form>

将login.jsp的参数传递到dologin.jsp页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//实例化Students对象
<jsp:useBean id="student1" class="com.ackerman.Students" scope="page"/>
<h1>setProperty动作元素使用方法</h1>
//第一种方法:根据表单匹配所有的属性
//login.jsp表单的name="name"属性值要与Students中的name私有域保持一致
<jsp:setProperty name="student1" property="*"/>
//第二种方法:根据表单匹配对象的属性
<jsp:setProperty name="student1" property="name"/>
//第三种方法:设置Students私有域name的值为yoyochecknow
<jsp:setProperty name="student1" property="name" value="yoyocheckenow"/>
//第四种方法:通过URL传参数
//在login.jsp做如下的修改:
//<form action="dologin.jsp?ff=hello" name="loginForm" method="post">
//这样就可以将URL传递的ff属性值赋值给Students的私有域name
<jsp:setProperty name="student1" property="name" param="ff"/>
得到的name属性值:<%= student1.getName() %>

< jsp:getProperty >:获取制定JavaBean对象的属性值

1
<jsp:getProperty name="JavaBean实例名" property="属性名">

修改dologin.jsp中的代码,获取JavaBean对象的属性值

1
得到的name属性值:<jsp:getProperty name="student1" property="name">

JavaBean的四个作用域范围

说明:使用useBean的scope属性可以用来指定JavaBean的作用范围。

  1. page 默认值,仅在当前页面有效
  2. request 可以通过HttpReqeust.getAttribute()方法取得JavaBean对象
  3. session 可以通过HttpSession.getAttribute()方法取得JavaBean对象
  4. application 可以通过application.getAttribute()方法取得JavaBean对象
1
<jsp:useBean id="student1" class="com.ackerman.Students" scope="作用域范围">