一: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的定义:
有无参的构造函数
成员属性私有化
public修饰的类,public无参构造
所有属性值都是private,并且提供get()/set()方法
封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法
为什么需要使用Javabean?
封装,重用,可读
减轻jsp的复杂度
功能区分明确,相同功能写在一个类中。相似功能放在同一个包中
提高代码的可维护性
减少代码冗余,相同功能的代码不必重复编写。
使用层面
封装业务逻辑的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;
}
@Override
public 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{
@Override
public 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);
}
@Override
public int addUsersLogin(Users users) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int setUsersPassword(Users users, String newPassword) {
// TODO Auto-generated method stub
return 0;
}
}