文章目录
最终的图
数据库创建一个表
根据上面的表,我们可以写一个简单的easyUI的界面,下面是EasyUI界面的简单的实现
前台代码的实现
首先,我引入了这些,为我下面的页面的搭建做准备
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
看我搭建的页面,代码如下
<%@ 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">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/icon.css">
<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
<title>管理员管理</title>
</head>
<body style="margin: 5px;">
<table id="dg" title="管理员信息管理" class="easyui-datagrid" fitColumns="true" pagination="true"
pagination="true" rownumbers="true" fit="true" url="managerList">
<thead>
<tr>
<th field="cb" checkbox="true"></th>
<th field="id" width="8%">编号</th>
<th field="userName" width="20%">管理员姓名</th>
<th field="password" width="72%">管理员密码</th>
</tr>
</thead>
</table>
</body>
</html>
效果图
值得注意的是,我们的数据库中的表明要和前端界面的id名一致,下面的所有有关这三个元素的都这样命名,就不多累赘的讲了,一定一定要注意一致性,养出好习惯
后台搭建model层的user实体
看图
代码如下
package model;
/**
* 用户实体,主要是用于登录的用户实体
* 为后台管理员登录用的
* @author 我是一个点
*
*/
public class User {
private int id; // 编号
private String userName; // 用户名
private String password; // 密码
public User() {//生成构造方法
super();//继承父类的
}
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
dao层实现数据库的操作
先简单的说一下,login方法是我用来登录用的,大家不用管,如果只想完成最终的效果,可以忽略,我想,如果你真正的理解了,一定会知道哪里的代码是没有用的,因为我讲的这个博客的知识点是我从自己写的一个商城后台管理系统中抽离出来的,所以都进行了封装,你们做小知识点的学习没必要这样,不过,个人觉得,好的学习习惯是很重要的!
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import model.PageBean;
import model.User;
import util.StringUtil;
/**
* 用戶Dao类
* @author 我是一个点
*
*/
public class UserDao {
public User login(Connection con,User user) throws Exception{
User resultUser=null;
String sql="select * from t_user where userName=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){//查到之后对它进行实例化,
resultUser=new User();
resultUser.setId(rs.getInt("id"));
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassword(rs.getString("password"));
}
return resultUser;
}
//主要用户页面初始化的时候获得所有的数据
public ResultSet userList(Connection con,PageBean pageBean,User user)throws Exception{
StringBuffer sb=new StringBuffer("select * from t_user");
if(user!=null&&StringUtil.isNotEmpty(user.getUserName())){
sb.append(" and userName like '%"+
user.getUserName()+"%'");
}
//这里是分页的条件
if(pageBean!=null){
sb.append(" limit "+pageBean.getStart()+","+pageBean.getRows());
}
PreparedStatement pstmt=con.prepareStatement(sb.toString().replace("and","where"));
return pstmt.executeQuery();
}
//获得数据库中t_buyerUser这个表中的数据的个数
public int userCount(Connection con,User user)throws Exception{
//下面的sql这句话的意义就是一条获取数据库中的数据总数的sql语句
StringBuffer sb=new StringBuffer("select count(*) as total from t_user");
if(StringUtil.isNotEmpty(user.getUserName())){
//数据库中的模糊查找:1>通过_限制,2>通过%限制
sb.append(" and userName like '%"+
user.getUserName()+"%'");
}
PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and", "where"));
ResultSet rs=pstmt.executeQuery();
//如果有记录存在的话,返回存在的记录的数量
if(rs.next()){
return rs.getInt("total");
}else{
return 0;
}
}
}
建立与前台相对应的servlet
在前面,细心的同学已经发现,我的前端代码中有个url=“managerList” ,现在我们在web.xml文件中创建如下配置
Servlet代码
<servlet>
<servlet-name>managerListServlet</servlet-name>
<servlet-class>web.ManagerListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>managerListServlet</servlet-name>
<url-pattern>/managerList</url-pattern>
</servlet-mapping>
完成了基本的配置,就该正式写Servlet了
package web;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.UserDao;
import model.PageBean;
import model.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import util.DbUtil;
import util.JsonUtil;
import util.ResponseUtil;
public class ManagerListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
DbUtil dbUtil=new DbUtil();
UserDao userDao=new UserDao();
public ManagerListServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这个是前台的EasyUI隐藏的自带的属性,可以直接获取页面的属性
String page=request.getParameter("page");
String rows=request.getParameter("rows");
String userName=request.getParameter("userName");
//如果是空的,默认搜索条件是空
if(userName==null){
userName="";
}
User user=new User();
user.setUserName(userName);
PageBean pageBean=new PageBean(Integer.parseInt(page), Integer.parseInt(rows));
Connection con=null;
try {
con=dbUtil.getCon();
JSONObject result=new JSONObject();
JSONArray jsonArray=JsonUtil.formatRsToJsonArray(userDao.userList(con, pageBean, user));
int total=userDao.userCount(con, user);
result.put("rows", jsonArray);
result.put("total", total);
ResponseUtil.write(response, result);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
简单的说一下这个代码,我们在写代码的时候,应该创建一个包,叫util,这个包中放的是我们整个项目的工具类,在这个servlet中,我一共用到了四个工具类,关于数据库的dbutil.java,关于数据处理的JsonUtil.java,关于数据上传的ResponseUtil.java,关于数据空否判断的StringUtil.java,还有附带写了一个实体,页码实体,用于处理数据分页的,PageBean.java
大家看这个代码的结构图
下面我把Servlet中用到的四个类的代码放在下面,很简单,要理解模块化编程的意义所在
PageBean.java
package model;
public class PageBean {
private int page;//第几页
private int rows;//每页的记录数
//private int start;//起始页
public PageBean(int page, int rows) {
super();
this.page = page;
this.rows = rows;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getStart() {
return (page-1)*rows;
}
}
JsonUtil.java
package util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Date;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonUtil {
public static JSONArray formatRsToJsonArray(ResultSet rs)throws Exception{
//能够获取列信息,是纵向的集合,ResultSet是获得的横向的
ResultSetMetaData md=rs.getMetaData();
int num=md.getColumnCount();
//定义一个返回数组
JSONArray array=new JSONArray();//定义一个json类型的数组
//rs是横向的,通过rs遍历,每次都是一行的数据
while(rs.next()){
JSONObject mapOfColValues=new JSONObject();
//纵向的
for(int i=1;i<=num;i++){
Object o=rs.getObject(i);//判断这一列是不是data数据类型的
if(o instanceof Date){
//获取的是列名
mapOfColValues.put(md.getColumnName(i), DateUtil.formatDate((Date)o, "yyyy-MM-dd"));
}else{
//把每个纵向的键值队封装进去
mapOfColValues.put(md.getColumnName(i), rs.getObject(i));
}
}
//把JSONObject的对象添加到JSONArray这个数组对象中去
array.add(mapOfColValues);
}
return array;
}
}
DbUtil.java
package util;
import java.sql.Connection;
import java.sql.DriverManager;
/**
*数据库工具类
* @author 我是一个点
*
*/
public class DbUtil {
//获取服务器路径与数据库名
private String dbUrl="jdbc:mysql://localhost:3306/db_studentInfo?useUnicode=true&characterEncoding=utf-8"; // 数据库连接地址,这个是后面加上的,注意
private String dbUserName="root"; // 连接的用户名
private String dbPassword="填你自己的"; // 密码
private String jdbcName="com.mysql.jdbc.Driver"; //驱动名称
/**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getCon() throws Exception{
Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
return con;
}
/**
* 关闭数据库库连接
* @param con
* @throws Exception
*/
public void closeCon(Connection con) throws Exception{
if(con!=null){
con.close();
}
}
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {//抛出异常的处理
dbUtil.getCon();
System.out.println("数据库连接成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库连接失败!");
}
}
}
ResponseUtil.java
package util;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
/**
* 作用:往回传,ajax的数据回写
* @author 我是一个点
*
*/
public class ResponseUtil {
public static void write(HttpServletResponse response,Object o) throws IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//这个是往界面上输,字符串的形式,一维的,那边读取的时候是二维的
out.println(o.toString());
//输完了就刷新一下
out.flush();
out.close();
}
}
StringUtil.java
package util;
/**
* 字符串工具类
* @author 2017117116
*
*/
public class StringUtil {
/**
* 判断是否是空的
* @param str
* @return
*/
public static boolean isEmpty(String str){
if(str==null||"".equals(str.trim())){
return true;
}else{
return false;
}
}
/**
* 判断是不是都是空
* @param str
* @return
*/
public static boolean isNotEmpty(String str){
if((str!=null)&&!"".equals(str.trim())){
return true;
}else{
return false;
}
}
}
与本次学习有关的jar包
一共有如下的jar包需要用,数据库的驱动以及JSON数据类型使用的时候引入的包,不会的简单的百度一下,JSON的我也忘记了,我把自己加载的jar驱动放在下面吧,自己简单的参考一下