一、什么是jsp封装
jsp封装就是把我们写在jsp中的java代码封装出去,用专门的类来定义方法,然后再jsp中调用此方法,以此来实现我们的功能,是我们看得更加方便,整洁。
二、封装步骤
1、首先先建三个包,分别为:entity实体类,dao类和untilDBHelper类
2、首先就是我们的util类,写我们DBHelper类也就是我们的连接数据库。
DBHelper是我们连接oracle数据库的代码
源代码展示:
package com.zking.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBHelper {
private static String user="scott";
private static String password="1234";
private static String cname="oracle.jdbc.driver.OracleDriver";
private static String url="jdbc:oracle:thin:@localhost:1521:orcl";
//注册驱动类
static {
try {
Class.forName(cname);
} catch (Exception e) {
e.printStackTrace();
}
}
//连接数据库
public static Connection getCon() {
Connection con=null;
try {
con=DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
//关闭连接
public static void ColseDb(Connection con,PreparedStatement ps,ResultSet rs) {
try {
if(con!=null) {
con.close();
}
if(ps!=null) {
ps.close();
}
if(rs!=null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下一个获取下一个编号的方法
* @return 下一个编号
*/
public static int getNextId(String tableName,String col) {
int id = 1;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = DBHelper.getCon();
ps = con.prepareStatement("select max("+col+") from "+tableName);
rs = ps.executeQuery();
if(rs.next()) {
id = rs.getInt(1)+1;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.ColseDb(con, ps, rs);
}
return id;
}
}
ps:其中有有一个获取下一个编号的方法,这个就是在我们添加数据时因为oracle没有主键自增的功能,所有我们在这里写了一个方法首先找到最大的编号,然后再最大编号的基础加一,成为我们要添加的数据的编号。
3、其次是实体类(News新闻,Ptext评论,Subject主题,User用户)——这个是我们新闻所需的实体类(先写属性,然后创建get和set方法还有构造函数)
ps:这个是实现我们对对象的封装,然后可以对一些字段定义和状态进行判断和过滤,可以把实体类作为参数传递。
4、首先我们的新闻界面应该是我们的登录和注册,所以首先需要写下我们的User类和UserDao类。给我们的用户名和密码进行封装。
USer的源代码展示:
package com.zking.entity;
public class User {
private int uuid;
private String uname;
private String upwd;
private String uinfo;
public User() {
super();
}
public User(int uuid, String uname, String upwd, String uinfo) {
super();
this.uuid = uuid;
this.uname = uname;
this.upwd = upwd;
this.uinfo = uinfo;
}
public int getUuid() {
return uuid;
}
public void setUuid(int uuid) {
this.uuid = uuid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public String getUinfo() {
return uinfo;
}
public void setUinfo(String uinfo) {
this.uinfo = uinfo;
}
@Override
public String toString() {
return "User [uuid=" + uuid + ", uname=" + uname + ", upwd=" + upwd + ", uinfo=" + uinfo + "]";
}
}
5、第三个就是我们的dao类,在dao类中我们需要写我们要实现的功能的方法。(newsdao,ptextdao,subjectdao,userdao)
ps:这个说我们新闻系统所需要用到的dao类,每一个dao类应用到的是根据我们表来的方法,比如newsdao对应的就是我们新闻的增删改查,而今在我们dao比较重要的方法就是我们的模糊查询和分页方法。
UserDao源代码展示:
package com.zking.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.zking.entity.User;
import com.zking.util.DBHelper;
public class UserDao {
//用户登录-根据账号和密码进行查询
/**
* 用户登录
* @param uname 用户名
* @param upwd 用户密码
* @return 登录成功返回用户对象,失败返回null
*/
public User login(String uname,String upwd) {
User user=null;
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=DBHelper.getCon();
ps=con.prepareStatement("select * from T277 where uname=? and upwd=?");
ps.setString(1, uname);
ps.setString(2, upwd);
rs = ps.executeQuery();
//操作数据
if(rs.next()) {
int uuid = rs.getInt(1);
String uinfo = rs.getString(4);
user = new User(uuid, uname, upwd, uinfo);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.ColseDb(con, ps, rs);
}
return user;
}
/**
* 用户注册
* @param user 注册的用户对象
* @return
*/
public int register(User user) {
int i = 0;
Connection con = null;
PreparedStatement ps = null;
try {
con = DBHelper.getCon();
ps = con.prepareStatement("insert into T277 values(?,?,?,?)");
ps.setInt(1, DBHelper.getNextId("T277","uuid"));
ps.setString(2, user.getUname());
ps.setString(3, user.getUpwd());
ps.setString(4, user.getUinfo());
i = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.ColseDb(con, ps, null);
}
return i;
}
}
6、最后在我们的jsp页面中只需要调用方法即可。
例如我们的删除(dodelnews):
<%@page import="com.zking.dao.NewsDao"%>
<%@page import="com.zking.util.DBHelper"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int nid = Integer.valueOf(request.getParameter("nid"));
NewsDao dd = new NewsDao();
int i = dd.delete(nid);
if (i > 0) {
out.print("<script>alert('删除成功');location.href='admin.jsp'</script>");
} else {
out.print("<script>alert('删除失败');location.href='admin.jsp'</script>");
}
%>