一、application
1、application是什么?
application是jsp的内置对象之一,作用于服务器端 类似于全局变量
作用域在服务器的打开和关闭之间有效
application范围:在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享
注意:application可以跨浏览器
常用方法:
void
setAttribute(String key,Object value)
以key/value的形式保存对象值
Object
getAttribute(String key)
通过key获取对象值
String
getRealPath(String path)
返回相对路径的真实路径
案例:
3.1 application的方法演示-----建application.jsp页面
<!-- 使用application对象setAttribute()保存信息 -->
<%
application.setAttribute("city","长沙市");//所在城市
application.setAttribute("postCode","410000");//邮编号码
application.setAttribute("email","15084961293@163.com");//邮箱
%><br/>
<!-- 使用application对象getAttribute()保存信息 -->
所在城市:<%=application.getAttribute("city") %><br/>
<!-- 使用application对象getAttributeNames()获取所有属性包括系统内置属性 -->
application对象中的属性有:<%
Enumeration<String> attributes = application.getAttributeNames();
//遍历枚举
while(attributes.hasMoreElements()){//如果存在下一条数据
out.println(attributes.nextElement()+"<br/>");
}
%><br/>
JSP(SERVLET)引擎名及版本号:<%=application.getServerInfo() %>
统计网站访客:
<!-- 使用application实现统计网站访客 -->
<%
//判断application对象中有没有保存为count的参数
//如果没有,在application对象中新增一个名为count的参数
if(application.getAttribute("count")!=null){
application.setAttribute("count",new Integer(0));
}
使用application对象读取count参数的值,再在原值基础上累加1
Integer count = (Integer)application.getAttribute("count");
application.setAttribute("count", new Integer(count.intValue()+1));
%>
欢迎,您是第:<%=application.getAttribute("count") %>位访问者
二、JavaBean封装
1.为什么要使用JavaBean
1、传统业务参数多,大多数为对象属性的话会很麻烦,容易出错。2、因为JavaBean能解决代码重复编写,减少代码冗余
3、功能区分明确,避免业务逻辑处理与页面显示处理集中在一起造成的混乱
4、提高代码性能
2.JavaBean及其分类封装数据:
1、 按照面向对象原则,属性与数据库表字段相对应
2、 属性私有
3、具有public的set/get方法
封装业务:
1、具有实现特定功能的方法和方法实现
2、通常与一个封装数据的JavaBean对应
数据库帮助类
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";
// 1.加载驱动 静态代码块进行封装 优先级别最高(静态代码块>普通代码块>构造函数)
static {
try {
// OracleDriver
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
// 2.建立数据库连接
public static Connection getConn() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, "scott", "123");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
// System.out.println(DBHelper.getConn());
}
// 3.关闭服务
/**
* 方法功能:数据库服务关闭
*
* @param conn
* 连接对象
* @param ps
* 执行对象
* @param rs
* 结果集对象
*/
public static void myClose(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (null != conn && !conn.isClosed()) {
conn.close();
}
if (null != ps) {
ps.close();
}
if (null != rs) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
增删改查通用Basebao
package com.zking.news.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
//protected 访问控制符 受保护的
protected Connection conn =null;
protected PreparedStatement ps = null;
protected ResultSet rs = null;
/**
* 方法功能:通用增删改方法
*/
public int executeUpdate(String sql,Object...x) {
int n = 0;
try {
// a.获取数据库连接
conn = DBHelper.getConn();
// b.sql传入方法返回执行对象
ps = conn.prepareStatement(sql);
//新增的sql语句 有占位符
if(null!=x) {
//拿到可变参数中的2个值
for(int i = 0;i<x.length;i++) {
//System.out.println(x[i]);
ps.setObject(i+1, x[i]);
}
}
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(conn, ps, null);
}
return n;
}
/**
* 方法功能:通用查询 查询所有 查询一个 模糊查询
*/
public ResultSet executeQuery(String sql,Object...x) {
int n = 0;
try {
// a.获取数据库连接
conn = DBHelper.getConn();
// b.sql传入方法返回执行对象
ps = conn.prepareStatement(sql);
//新增的sql语句 有占位符
if(null!=x) {
//拿到可变参数中的2个值
for(int i = 0;i<x.length;i++) {
//System.out.println(x[i]);
ps.setObject(i+1, x[i]);
}
}
rs = ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}finally {
//不能关闭 通用的查询base方法 不能实现数据库关闭
//DBHelper.myClose(conn, ps, null);
}
return rs;
}
}
接口实现类UserdaoImpl
/**
* 接口实现类
*
* @author zjjt
*
* 2022年4月6日19:33:58
*/
public class UserDaoImpl extends BaseDao implements IUsersDao {
/**
* 登录dao
*/
@Override
public Users usersLogin(Users users) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Users u = null;
try {
conn = DBHelper.getconn();
String sql = "select * from tb_t281_news_users where username=? and password=?";
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(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
rs.getString(6), rs.getInt(7), rs.getString(8));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBHelper.myClose(conn, ps, rs);
}
return u;
}
/**
* 新增dao
*/
@Override
public int userRegister(Users users) {
String sql = "insert into tb_t281_news_users values (?,?,?,?,?,?,?,to_date(?,'yyyy-mm-dd hh24:mi:ss'))";
return this.executeUpdate(sql, new Object[] { users.getUserid(), users.getUsername(), users.getPassword(),
users.getUsex(), users.getUaddress(), users.getUtelphone(), users.getUrole(), users.getUdate() });
//删除dao
@Override
public int deleteDelete(int userid) {
return this.executeUpdate("delete from tb_t281_news_users where userid=?", new Object[] { userid });
}
//查询所有dao
@Override
public List<Users> queryUserAll() {
Users u = null;// 实体对象
List<Users> list = new ArrayList<Users>();
String sql = "select * from tb_t281_news_users";
ResultSet rs = this.executeQuery(sql);
try {
while (rs.next()) {
u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"),
rs.getString("usex"), rs.getString("uaddress"), rs.getString("utelphone"), rs.getInt("urole"),
rs.getString("udate"));
list.add(u);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBHelper.myClose(conn, ps, rs);
}
return list;
}