//本文主要实现学员日志管理功能,表单以及前端等样式代码省略,主要servlet方法实现的功能的如下:
package com.softeem.dao;
import java.util.List;
public interface BaseDAO<T> {
public boolean save(T t);
public boolean delete(T t);
public boolean update(T t);
public T findById(int id);
public T findProperty(T t);
public List<T> findByProperties(T t);
public List<T> findAll();
}
package com.softeem.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.softeem.dao.impl.DailyDAO;
import com.softeem.dto.Daily;
import com.softeem.dto.Student;
@WebServlet("/daily")
public class DailyServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flag = req.getParameter("flag");
switch(flag){
case "add":
submit(req,resp);
break;
case "modify":
modify(req,resp);
break;
case "queryAll":
queryAll(req,resp);
break;
case "queryById":
queryById(req,resp);
break;
}
}
private void queryById(HttpServletRequest req, HttpServletResponse resp) {
// TODO Auto-generated method stub
}
private void queryAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从session中取出当前用户
Student stu = getSession(req);
if(stu!=null){
//查询当前学生的日志
Daily d = new Daily();
d.setStudent(stu);
DailyDAO dao = new DailyDAO();
List<Daily> list = dao.findByProperties(d);
//将日志集合缓存到request中
req.setAttribute("list", list);
req.getRequestDispatcher("dailyList.jsp").forward(req, resp);
}else{
req.setAttribute("error", "你还没有登录,请登录再试!");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
private void modify(HttpServletRequest req, HttpServletResponse resp) {
// TODO Auto-generated method stub
}
private void submit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从session中取出学生对象,有数据代表已经登录
Student stu = getSession(req);
if(stu!=null){
String content = req.getParameter("content");
Daily daily = new Daily();
daily.setContent(content);
daily.setStudent(stu);
DailyDAO dao = new DailyDAO();
if(dao.save(daily)){
//成功后直接跳转到列表页面,显示日志列表
resp.sendRedirect("daily?flag=queryAll");
}else{
//失败
}
}else{
req.setAttribute("error", "你还没有登录,请登录再试!");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
//从session中获取缓存的当前登录学生信息
private Student getSession(HttpServletRequest request){
Object obj = request.getSession().getAttribute("user");
return obj != null?(Student)obj:null;
}
}
package com.softeem.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.softeem.dao.impl.StudentDAO;
import com.softeem.dto.Student;
import com.softeem.encrypt.MD5;
@WebServlet("/login")
public class LoginServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取表单数据(账号,密码)
String sno = request.getParameter("username");
String pass = request.getParameter("password");
Student stu = new Student();
stu.setSno(sno);
stu.setPassword(pass);
StudentDAO dao = new StudentDAO();
stu = dao.findProperty(stu);
//对提交的密码加密
// MD5 md5 = new MD5();
// pass = md5.getMD5ofStr(pass);
if(stu != null){
if(stu.getPassword().equals(pass)){
//成功
//将登录的学生信息存储到session中
request.getSession().setAttribute("user", stu);
response.sendRedirect("index.jsp");
}else{
//密码错误
request.setAttribute("error", "密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}else{
//学号错误
request.setAttribute("error", "学号错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
package com.softeem.utils;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Properties;
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
/**
* DBCP数据库连接工具类
* 依赖
* 1.mysql驱动
* 2.dbcp相关插件
* @author mrchai
*
*/
public class DBUtils {
//连接数据库基本属性
private static String driverClass="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://127.0.0.1:3306/oa";
private static String username="root";
private static String password="123456";
//连接池属性
private static int initSize=10;
private static int maxSize=50;
private static int maxIdle=30;
private static long maxWait=10000;
//数据源
private static BasicDataSource bds;
//初始化数据源配置
static{
init();
}
public static void init(){
try {
//创建数据源对象
bds = new BasicDataSource();
//加载属性文件,获取属性信息
Properties props = new Properties();
props.load(DBUtils.class.getResourceAsStream("jdbc.properties"));
driverClass = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("user");
password = props.getProperty("password");
initSize = Integer.parseInt(props.getProperty("initSize"));
maxSize = Integer.parseInt(props.getProperty("maxSize"));
maxIdle = Integer.parseInt(props.getProperty("maxIdle"));
maxWait = Long.parseLong(props.getProperty("maxWait"));
//设置驱动类路径
bds.setDriverClassName(driverClass);
//设置url
bds.setUrl(url);
//设置用户名
bds.setUsername(username);
//设置密码
bds.setPassword(password);
//设置初始连接数
bds.setInitialSize(initSize);
//设置最大连接
bds.setMaxTotal(maxSize);
//设置最大闲置连接数
bds.setMaxIdle(maxIdle);
//等待获取连接的最大时间(MS)
bds.setMaxWaitMillis(maxWait);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConn(){
try {
if(bds == null || bds.isClosed()){
init();
}
return bds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//封装资源回收的方法
public static void close(ResultSet rs,Statement stat,Connection conn){
try {
if(rs != null) rs.close();
if(stat != null) stat.close();
if(conn != null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 通用增删改
* @param conn
* @param sql
* @param objs
* @return
*/
public static boolean execUpdate(Connection conn,String sql,Object ...objs){
try {
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i < objs.length; i++) {
ps.setObject(i+1, objs[i]);
}
int i = ps.executeUpdate();
return i>0 ? true:false;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
/**
* C++钩子函数 回调函数
* 集合查询
* @param sql
* @param call
* @param params
* @return
*/
public static <T> List<T> queryList(String sql,CallBack<T> call,Object...params){
Connection conn = DBUtils.getConn();
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
for(int i = 0;i<params.length;i++)
{
ps.setObject(i+1, params[i]);
}
ResultSet rs = ps.executeQuery();
return call.getDatas(rs);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 查询一条记录
* @param sql
* @param call
* @param params
* @return
*/
public static <T> T queryOne(String sql,CallBack<T> call,Object...params)
{
Connection conn = DBUtils.getConn();
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
for(int i = 0;i<params.length;i++)
{
ps.setObject(i+1, params[i]);
}
ResultSet rs = ps.executeQuery();
return call.getData(rs);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//查询返回接口 jdk1.8支持
// public interface CallBack<T>{
// default List<T> getDatas(ResultSet rs){
// return null;
// }
// default T getData(ResultSet rs){
// return null;
// }
// }
//jdk1.8以下使用抽象类
public static abstract class CallBack<T>{
public List<T> getDatas(ResultSet rs){
return null;
}
public T getData(ResultSet rs){
return null;
}
}
public static void main(String[] args) {
System.out.println(getConn());
}
}