当前位置: 代码迷 >> 综合 >> java_web 快速入门之第八章 applicationJavaBean封装
  详细解决方案

java_web 快速入门之第八章 applicationJavaBean封装

热度:77   发布时间:2023-12-05 09:26:24.0

一:application(全局应用程序对象)

        不同用户的sesion对象互不相同,但有时候用户之间可能需要一个共享对象,当Web服务器对象启动后就产生了这样一个唯一的内置对象application。
      任何用户在访问同一Web服务目录的各个页面时,共享一个application对象,直到服务器关闭,这个application对象被取消为止。
        application对象也可以进行数据的存储。
       application对象在整个应用区域中都有效,而session只是在当前客户的会话范围内有效,当超过保存时间则被收回。
        application对象为多个应用程序保存信息,对于一个容器而言每个用户都共同使用一个                  application,这和session对象是不一样的。服务器启动后,就会自动创建application对象,这个对象一直会保持,直到服务器关闭为止。

注意:application对象同时也是jsp中四大作用域(域对象)之一
          作用域|域对象:临时的存储数据,范围不同而已。
           四个域对象:pageContext、request、session、application
           application的访问范围是最大的。(当服务器开启的那一刻application就创建了)

常用方法:

getAttribute(String name)
  
 返回有name指定的名字的application对象的属性的值
setAttribute(String name,Object object)
 
设置有name指定名字的application对象的属性的值object
Enumeration getAttributeNames()
   
返回所有可用属性名的枚举
getServerInfo() 返回jsp(servlet)
  引擎及版本号

方法演示:

  • 通过application保存一个用户
application.setAttribute("username", "dongfangbubai");
  • 当前服务器引擎版本
<%=application.getServerInfo() %>
  • 获取application保存的用户
username: <%=application.getAttribute("username") %>

案例:根据application内置对象来模拟网站人数在线统计

?
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新闻官网</title>
</head>
<body><%//假设application保存了一个变量统计网站的人数Integer count = (Integer)application.getAttribute("count");//out.println("count = "+count);//判断非空if(null == count){//说明这是第一次访问了这个网站application.setAttribute("count", new Integer(1));out.println("这是第一个人");}else{out.println("这个不是第一个人了");count++;application.setAttribute("count", count);}%><hr/>老铁,你是第<%=application.getAttribute("count") %>个人访问该网站的。</body>
</html>?

备注:

                Cookie是一个普通对象,不属于jsp内置对象,作用:存储数据
                sssion:内置对象,域对象,存储数据(范围:在同一个会话中有效)
                application:内置对象,域对象,存储数据(范围:只要服务器没有关闭,都有效)
                request:内置对象,域对象,存储数据(范围:只针对同一个请求范围内有效)
                pageContext:内置对象,域对象,存储数据(范围:只针对当前页面)

二:JavaBean封装

     基本概念:

         javabean是一种组件技术

         javabean技术有助于将JSP页面中的处理业务的逻辑代码与展示页面效果的显示代码分离

         JavaBean就是一个普通的java类,也称之为简单java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想

         web中的javabean开发模式---DAO模式一样的

JavaBean的定义:

  1. 有无参的构造函数
  2. 成员属性私有化
  3. public修饰的类,public无参构造
  4. 所有属性值都是private,并且提供get()/set()方法
  5. 封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法

为什么需要使用Javabean?

  1. 封装,重用,可读
  2.  减轻jsp的复杂度
  3. 功能区分明确,相同功能写在一个类中。相似功能放在同一个包中
  4. 提高代码的可维护性
  5. 减少代码冗余,相同功能的代码不必重复编写。

使用层面

  • 封装业务逻辑的javabean
  • 用于操作一个封装数据的javabean
  • 封装数据的javabena
  • 对应数据库的一张表,比传参方便

案例:使用javaBean封装使用JDBC查询的数据

        定义用户users类

?
package com.zking.news.entity;
/*** 用户实体类* 	目的:封装数据表中的数据* @author Administrator**/
public class Users {private int userid;private String username;private String password;private String sex;private String hobby;private String address;private int urole;private String udate;public Users() {}public Users(String username, String password) {super();this.username = username;this.password = password;}public Users(String username, String password, String sex, String hobby, String address, int urole, String udate) {super();this.username = username;this.password = password;this.sex = sex;this.hobby = hobby;this.address = address;this.urole = urole;this.udate = udate;}public Users(int userid, String username, String password, String sex, String hobby, String address, int urole,String udate) {super();this.userid = userid;this.username = username;this.password = password;this.sex = sex;this.hobby = hobby;this.address = address;this.urole = urole;this.udate = udate;}public int getUserid() {return userid;}public void setUserid(int userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getUrole() {return urole;}public void setUrole(int urole) {this.urole = urole;}public String getUdate() {return udate;}public void setUdate(String udate) {this.udate = udate;}@Overridepublic String toString() {return "Users [userid=" + userid + ", username=" + username + ", password=" + password + ", sex=" + sex+ ", hobby=" + hobby + ", address=" + address + ", urole=" + urole + ", udate=" + udate + "]";}}?

       定义数据库帮助类(DBHelper)

package com.zking.news.utils;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** * 数据库帮助类* * @author Administrator**/
public class DBHelper {private static final String url = "jdbc:oracle:thin:@localhost:1521:orcl";private static final String user = "scott";private static final String password = "123";// 加载驱动static {try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (Exception e) {e.printStackTrace();}}/*** 方法功能:建立数据库连接* * @return conn 连接对象*/public static Connection getConn() {Connection conn = null;try {conn = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();}return conn;}/*** 方法功能:关闭数据库服务* * @param conn*            连接对象* @param ps*            执行对象* @param rs*            结果集对象*/public static void myClose(Connection conn, PreparedStatement ps, ResultSet rs) {try {if (conn != null && !conn.isClosed()) {conn.close();}if (ps != null) {ps.close();}if (rs != null) {rs.close();}} catch (Exception e) {e.printStackTrace();}}}

     定义用户模块的DAO接口类(IUsersDao)

package com.zking.news.dao;import com.zking.news.entity.Users;/*** 用户模块的DAO接口* @author Administrator**/
public interface IUsersDao {//用户登录:返回类型--boolean    当前登录Users用户/*** 方法功能登录操作*/public Users adminUsersLogin(Users users);/*** 注册功能*/public int addUsersLogin(Users users);/*** 修改密码功能*/public int setUsersPassword(Users users,String newPassword);}

    定义用户模块的DAO接口类(UsersDaoImpl)

package com.zking.news.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import com.zking.news.dao.IUsersDao;
import com.zking.news.entity.Users;
import com.zking.news.utils.DBHelper;/*** 用户模块的DAO接口* @author Administrator**/
public class UsersDaoImpl implements IUsersDao{@Overridepublic Users adminUsersLogin(Users users) {//1.定义所需的对象及变量Connection conn = null;PreparedStatement ps =null;ResultSet rs = null;String sql = "select * from tb_news_users where username = ? and password = ?";Users u = null;//2.赋值try {//获取数据库连接conn = DBHelper.getConn();//将定义的sql语句传入方法返回执行对象ps = conn.prepareStatement(sql);//给占位符赋值ps.setString(1, users.getUsername());ps.setString(2, users.getPassword());//返回结果集对象rs = ps.executeQuery();//判断if(rs.next()) {u = new Users(rs.getInt("userid"), rs.getString("username"),rs.getString("password"), rs.getString("sex"), rs.getString("hobby"), rs.getString("address"), rs.getInt("urole"), rs.getString("udate"));}} catch (Exception e) {e.printStackTrace();}finally {DBHelper.myClose(conn, ps, rs);}//返回return u;}public static void main(String[] args) {Users adminUsersLogin = new UsersDaoImpl().adminUsersLogin(new Users("admin","123"));System.out.println(adminUsersLogin);}@Overridepublic int addUsersLogin(Users users) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int setUsersPassword(Users users, String newPassword) {// TODO Auto-generated method stubreturn 0;}}