一、JavaBean出现的目的
由于只用JSP开发会发现使用了很多的Scriptlet(java脚本),会使得jsp文件非常混乱。如果使用JavaBean,则可以大大减少JSP中代码量。JSP的理想状态是只负责显示,而不负责处理。
二、JavaBean介绍
JavaBean说的通俗点就是一个Java类用于JSP中。通过<jsp:useBean>或者import导入。
JavaBean导入的类的约定:
(1)类必须是public的;
(2)必须有无参构造;
(3)属性必须是private的;
(4)必须有get和set方法,类的字段必须通过get和set方法来访问。
三、JavaBean存放位置
在tomcat中的理想目录结构如下:
JavaBean存放在WEB-INF/classes内。
注意:
(1)每次修改classes文件或web.xml后必须要重启服务器。
如果觉得很麻烦,则在开发过程中可以通过在Server.xml中设置虚拟目录的位置添加:
<Context path="..." docBase="..." reloadable="true"/>,这样就会变成自动导入模式,不必重启服务器。
但是有一个缺点,就是服务器必须时刻监视,会降低性能。
(2)在classes中放入的是class文件。
(3)类必须要有所在的包。
四、<jsp:useBean>用法:
一般的形式:<jsp:useBean id="实例化名称" scope="page" class="包.类名"/>,id是实例化对象;scope中可以是
(1)page:在一页中保存
(2)request:服务器端跳转仍保存;
(3)session:跳转仍保存;
(4)application:服务器没有关闭仍保存;
class为实例化对象的类的完整名称;
使用<jsp:useBean>的好处是自动帮助你创建一个名为id的值的对象。
注意:JavaBean中一定要有无参构造函数。
五、<jsp:setProperty>用法:
一般形式有四种:
(1)<jsp:setProperty name="实例化名称" property="*"/>:自动调用set方法;
(2)<jsp:setProperty name="实例化名称" property="name1"/>:对于name1属性自动调用set方法;
(3)<jsp:setProperty name="实例化名称" property="name1" value="value1"/>:对于name1属性赋予value1值;
(4)<jsp:setProperty name="实例化名称" property="name1" param="param1"/>:把param1的值赋给name1属性;
但是一般使用第一种方法最多。
六、<jsp:getProperty>用法
一般形式:<jsp:getProperty name="c1" propety="name1"/>自动调用c1对象的getName1()方法,并返回;
其实效果和getter方法是一样的;
七、JavaBean删除
通过pageConext.removeAttribute("JavaBean名称");删除scope为page的JavaBean对象。依次类推。
八、有了JavaBean以后,我们怎么在JSP页面中访问它呢?
方法有2种: 直接访问和JSP标签访问 (不过我们推荐通过标签来访问)
1)直接访问
a) 声明bean
在页面顶部导入JavaBean类: <%@ page import="mytrain.formbean.userBean" %>
在JSP段实例化类: <% userBean user = new userBean(); %>
b) 访问bean
<% user.setXXX(aa); %>
<%=user.getXXX();%>
2)标签访问(推荐)
a) 声明bean
使用userBean标签:
<jsp:useBean id="user" class="mytrain.formbean.userBean"/>
b) 访问bean
通过setProperty标签来设置:<jsp:setProperty name="user" property="name" param="mUserName"/>
通过getProperty标签来取得:<jsp:getProperty name="user" property="name"/>
下面我们来看一下完整的代码。
package mytrain.formbean;
public class UserBean {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
login.html:
<%@ page language="java" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>表单Bean例子2</title>
</head>
<body>
<form action="register.jsp" method="post">
用户名:
<input type="text" name="mUserName" size="20">
<br>
密码:
<input type="password" name="mPassword" size="20">
<br>
<input type=submit value="submit" />
</form>
</body>
</html>
标签访问法:register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<jsp:useBean id="user" class="mytrain.formbean.UserBean" />
<jsp:setProperty name="user" property="name" param="mUserName" />
<jsp:setProperty name="user" property="password" param="mPassword" />
<hr />
用户名:<jsp:getProperty name="user" property="name" />
<br>
密 码:<jsp:getProperty name="user" property="password" />
</body>
</html>
标签访问法:register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="mytrain.formbean.UserBean" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
UserBean user = new UserBean();
user.setName(request.getParameter("mUserName"));
user.setPassword(request.getParameter("mPassword"));
%>
<hr />
用户名:<%=user.getName()%>
<br>
密 码:<%=user.getPassword()%>
</body>
</html>