Servlet实现日志管理

来源:互联网 发布:局域网电话软件 编辑:程序博客网 时间:2024/06/05 06:25

//本文主要实现学员日志管理功能,表单以及前端等样式代码省略,主要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{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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();}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}@Overrideprotected 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);//设置urlbds.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());}}