JSP教程之使用JavaBean完成业务逻辑的方法 |
|
本文实例讲述了JSP教程之使用JavaBean完成业务逻辑的方法 。分享给大家供大家参考 。具体如下: 一、目标: ① 掌握什么是JavaBean; 二、主要内容: 通过把上一讲中login_process.jsp中的验证过程进行封装形成JavaBean,然后在JSP页面中调用这个JavaBean,介绍JavaBean的编写和访问 。 1、什么是JavaBean JavaBean是使用Java语言编写的组件 。组件是组成一个大的系统的一部份,通常不同独立运行 。组件能够完成特定的功能,并且这些功能主要是共享的 。 2、例:对用户信息进行验证
package javabean;
public class User
{
private String username;
private String userpass;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getUserpass()
{
return userpass;
}
public void setUserpass(String userpass)
{
this.userpass = userpass;
}
public boolean check()
{
if(username==null || userpass==null)
return false;
if(username.equals("zhangsan") && userpass.equals("lisi"))
{
return true;
}else{
return false;
}
}
}
3、在JSP中如何调用JavaBean 首先,在Java中的调用情况:
import javabean;
…
User user = new User(); // 定义对象,并且实例化
user.setUsername("zaaaa"); // 对成员变量进行初始化
user.setUserpass("sssss"); // 对用户口令进行初始化
boolean b = user.check(); // 调用业务方法进行验证
1) 创建对象 复制代码 代码如下: <jsp:useBean id="" class="" scope=""/> 作用:实例化JavaBean的对象,或者查找到JavaBean的对象 。 id属性表示创建的对象的名字,class是JavaBean的完整类名,scope属性指出创建的变量的作用范围 。 例:<jsp:useBean id="user" class="javabean.User" scope="request"/> 编写page.jsp文件如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:set var="pageAttribute" value="pppp" scope="page"/> <c:set var="requestAttribute" value="rrrrr" scope="request"/> <c:set var="sessionAttribute" value="ssss" scope="session"/> <c:set var="applicationAttribute" value="aaaa" scope="application"/> <jsp:include page="success.jsp"/> page.jsp中输出信息:
${pageScope.pageAttribute}
${requestScope.requestAttribute}
${sessionScope.sessionAttribute}
${applicationScope.applicationAttribute}
其中:<c:set>标签用于存储信息,var指出变量的名字,value指出变量的值(可以使用表达式),scope指出变量的存储范围 。 ${pageScope.pageAttribute}用于访问page范围内的pageAttribute属性,${requestScope.requestAttribute}用于访问request范围内的requestScope属性,依次类推 。 <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> request.jsp中输出信息:
${pageScope.pageAttribute}
${requestScope.requestAttribute}
${sessionScope.sessionAttribute}
${applicationScope.applicationAttribute}
<br>
<a href="session.jsp">访问session</a>
编写session.jsp文件如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> session.jsp中输出信息:
${pageScope.pageAttribute}
${requestScope.requestAttribute}
${sessionScope.sessionAttribute}
${applicationScope.applicationAttribute}
编写application.jsp文件如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> application.jsp中输出信息:
${pageScope.pageAttribute}
${requestScope.requestAttribute}
${sessionScope.sessionAttribute}
${applicationScope.applicationAttribute}
运行过程: 运行page.jsp,得到如下结果: request.jsp中输出信息:rrrr ssss aaaa 点击"访问session"进行session.jsp session.jsp中输出信息:ssss aaaa 分析:与前面不属于同一次请求,所以不能访问request和page信息,只能访问session和application 。 重新打开一个浏览器,访问application.jsp 2) 对属性赋值 <jsp:setProperty name="" property="" value=""/> 例:<jsp:setProperty name="user" property="username" value="zhangsan"/> 如果value属性不指定,这时候会从请求对象查找名字为username的表单元素,如果有救赋值 。相当于下面的代码:
String username = request.getParameter("username");
user.setUsername(username);
如果省略了value属性,同时把property属性设置为"*",相当于:
String username = request.getParameter("username");
user.setUsername(username);
String userpass = request.getParameter("usernpass");
user.setUsernpass (userpass);
如果表单元素的名字与JavaBean属性名字不一致的时候,可以通过param属性指定使用哪个表单元素 。 3) 嵌入Java代码调用方法 <% boolean b = user.check(); %> 4) 获取JavaBean属性 复制代码 代码如下: <jsp:getProperty name="" property=""/> 4、 实例:修改login_process.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!--创建对象-->
<jsp:useBean id="user" class="javabean.User" scope="request"/>
<!--对对象进行初始化-->
<jsp:setProperty name="user" property="*"/>
<!-- 调用对象的方法 -->
<%
boolean b = user.check();
request.setAttribute("b",new Boolean(b));
// 在request中保存信息,第一个参数是名字,第二个参数对象本身
%>
<!-- 根据结果进行判断 -->
<c:if test="${b}">
<jsp:include page="success.jsp"/>
</c:if>
<c:if test="${!b}">
<jsp:include page="failure.jsp"/>
</c:if>
<br>用户信息:
<jsp:getProperty name="user" property="username"/>
<jsp:getProperty name="user" property="userpass"/>
运行:编译之前编写好的Java文件User.java 。然后把编译好的文件放在工程的WEB-INF目录的classes子目录中 。 运行之后效果是相同的 。 但是分析上面的代码,我们发现里面还是嵌入了Java代码,这是因为JSP并没有提供很好的标签对JavaBean的访问进行调用 。如果想使用标签对业务方法调用,需要编写自定义标签,比较麻烦 。下面介绍一个折中的方法 。 5、实例:重构login_process.jsp 在User.java中添加如下方法:
public boolean getResult()
{
return check();
}
虽然JSP没有提供访问业务方法的标签,但是提供了对属性进行访问的方式,所以该方法通过提供result属性来间接的调用check业务方法 。 修改login_process.jsp文件如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:useBean id="user" class="javabean.User" scope="request"/>
<jsp:setProperty name="user" property="*"/>
<c:if test="${user.result}">
<jsp:include page="success.jsp"/>
</c:if>
<c:if test="${!user.result}">
<jsp:include page="failure.jsp"/>
</c:if>
希望本文所述对大家的JSP程序设计有所帮助 。 |