JSP教程之使用JavaBean完成业务逻辑的方法

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • 使用JSP + JAVABEAN + XML 开发的一个例子

    本例子是参考了一些网站上有关JSP 对 XML 的操作的相关文档,又结合了一些个人的体会.例子涉及的内容是,开发的一个企业内部定餐系统后台管理端的部分代码,功能主要集中在对于餐馆基本信息的管理. 该例子本身开发的起因是我在原公司和同事们一个玩笑的一部分.特此也表达对那些一起共事的朋友们的想念. 例子本身是在TOMCAT4.01 平台下运行的B/S结构的程式.有关TOMCAT 的配置,这里不做说明.只讲解一下相关文件及文件夹的目录结构. 目录结构说明:/tomcat/webapps/canyin/

  • JSP JavaBean的setProperty属性

    1.包: 复制代码 代码如下: package PaintBrush; /** * * @author lucifer */ public class PaintBrush { private String curcolor = "red"; public String getColor(){ return curcolor; } public void setColor(String color){ curcolor = color; } } 2.JSP代码: 复制代码 代码如下:

  • spring实例化javabean的三种方式分享

    第一种:直接配置javabean文件 bean.xml 复制代码 代码如下: <bean id="sayhello" class="test.service.impl.HelloBean"/> personDao.java 复制代码 代码如下: package springdao;public class personDao { private String name; private String dep; public String getName(

  • JSP+Servlet+JavaBean实现登录网页实例详解

    本文实例讲述了JSP+Servlet+JavaBean实现登录网页的方法.分享给大家供大家参考.具体如下: 这里涉及到四个文件: 1. 登录页面:login.html 2. 登录成功欢迎页面:login_success.jsp 3. 登录失败页面:login_failure.jsp 4. Servlet处理文件:LoginServlet.java 其实还涉及到一个文件:web.xml,这个后面再说: 下面分别介绍这几个文件: 1. 登录页面:login.html <!-- 该Login页面是一个

  • java使用jaxb操作xml示例

    首先定义两个示例类ClassA,ClassB,用于后续的示例演示 复制代码 代码如下: package cn.lzrabbit; public class ClassA {     private int classAId;     private String classAName; private ClassB classB; public int getClassAId() {         return classAId;     } public void setClassAId(i

  • Jaxb2实现JavaBean与xml互转的方法详解

    本文实例讲述了Jaxb2实现JavaBean与xml互转的方法.分享给大家供大家参考,具体如下: 一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档. Jaxb 2.0是JDK 1.6的组成部分.我们不需要下载第三方jar包 即可做到轻松转换.Jaxb2使用了JD

  • java反射实现javabean转json实例代码

    ObjectToJson.java 复制代码 代码如下: package com.ObjectToJson; import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Iterator; public class ObjectToJson {

  • JavaBean实现多文件上传的两种方法

    摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现.首先讲述了http协议传送多个文件的基本格式和实现上传的详细过程,之后简单介绍了使用ftpclient 类实现了ftp方式的上传,最后对这两种方法进行了比较. 关键字:JavaBean .http .ftp .ftpclient JavaBean是一种基于Java的软件组件.JSP对于在Web 应用中集成JavaBean组件提供了完善的支持.这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的

  • 深入jaxb xjc编码问题的详细介绍

    平时喜欢根据写一个xjc批处理命令,根据xsd批量生成java类,觉得很方便也很酷.但是有时候xsd生成的java类中含有汉字,结果总是有些问题.可是xjc命令参数又没有encoding参数之类的.在网上搜了一通,忽然发现了一个好东东:xjc是由com.sun.tools.internal.xjc.Driver实现的,因此批处理命令可以如下:java -Dfile.encoding=UTF-8 -cp D:\java\jdk1.6.0_03\lib\tools.jar com.sun.tools

  • jsp+servlet+javabean实现数据分页方法完整实例

    本文实例讲述了jsp+servlet+javabean实现数据分页方法.分享给大家供大家参考,具体如下: 这里秉着且行且记的心态,记录下学习过程,学得快忘得快,生怕遗忘,以备日后使用. 用到的部分代码是自己在网上查找,并自己修改,加上自己的理解.也不知道算不算原创,只做自己学习记录. 使用相关:PostgreSQL数据库.dom4j.JSP.Servlet 一.首先是工程格局,来个全局视图方便读者与自己查看与使用 思路为: 以config.xml文件记录配置信息,以方便数据库更改,方便移植与重用

  • JavaBean(EJB) 3.0 全新体验

    引言 期待以久的EJB3.0规范在最近发布了它的初稿.在本文中将对新的规范进行一个概要性的介绍,包括新增的元数据支持,EJBQL的修改,实体Bean模型访问bean上下文的新方法和运行时环境等等.作者还讨论了EJB在未来要作出的调整以及EJB3.0与其他开发规范之间的关系. 开始 无论如何由于EJB的复杂性使之在J2EE架构中的表现一直不是很好.EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力的组建.EJB3.0规范正尝试在这方面作出努力以减轻其开发的复杂性.EJB3.0减轻

  • JavaBean和Map转换封装类的方法

    实例如下: package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.ut

随机推荐