本文实例讲述了JSP教程之使用JavaBean完成业务逻辑的方法。分享给大家供大家参考。具体如下:
一、目标:
① 掌握什么是JavaBean;
② 掌握如何编写JavaBean;
③ 掌握如何在JSP中访问JavaBean;
④ 理解JSP中对象的4个作用范围。
二、主要内容:
通过把上一讲中login_process.jsp中的验证过程进行封装形成JavaBean,然后在JSP页面中调用这个JavaBean,介绍JavaBean的编写和访问。
通过简单实例介绍JavaBean对象的4个作用范围。
1、什么是JavaBean
JavaBean是使用Java语言编写的组件。组件是组成一个大的系统的一部份,通常不同独立运行。组件能够完成特定的功能,并且这些功能主要是共享的。
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属性指出创建的变量的作用范围。
scope的作用范围有4个:page request session application
page表示当前页面,实际上是当前的JSP文件对应的Java类的对象;
request表示一次请求,从我们发送出去请求开始到系统对我们进行响应,这之间就是一次请求。如果一次请求只涉及一个JSP页面,page和request的效果是相同的。
例如:登录功能,显示第一个页面的时候,这时候page和request的作用范围是相同的。提交之后,如果登录成功,这时候涉及两个文件login_process.jsp和success.jsp,每个文件对应一个page,但是两个文件属于一个request。
session,表示会话。对于Web应用的每个客户端来说都对应一个对象,这个对象就是session,如果JavaBean对象的作用范围设置为session,相当于把JavaBean对象保存在了session对象中,在客户端的整个访问过程中都可以访问这个对象。
application,表示应用。如果把JavaBean对象的作用范围设置为application,这个应用的所有的用户在所有的界面都可以访问这个对象。
例:<jsp:useBean id="user" class="javabean.User" scope="request"/>
测试(关于4个作用范围):
编写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属性,依次类推。
编写request.jsp文件如下:
<%@ 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
page.jsp中输出信息:pppp rrrr ssss aaaa
分析:因为page.jsp和request.jsp属于同一次请求,所以共享request对象,session对象和application对象,但是不能显示page中存储的信息。
点击"访问session"进行session.jsp
session.jsp中输出信息:ssss aaaa
分析:与前面不属于同一次请求,所以不能访问request和page信息,只能访问session和application。
重新打开一个浏览器,访问application.jsp
application.jsp中输出信息:aaaa
分析:属于不同的客户端,所以只能共享application对象,只能看到application中的信息。
2) 对属性赋值
<jsp:setProperty name="" property="" value=""/>
name指出JavaBean对象的名字,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程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]