学生管理系统之简化学生版(练习版)

学生管理系统之简化学生版(练习版)

JAVA代码

Controller层

StuController

import com.gl.sms.service.impl.StuServiceImpl;
import com.gl.sms.servlet.BaseServlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

@WebServlet("/StuController")
public class StuController extends BaseServlet {

    private StuServiceImpl stuService = new StuServiceImpl();

    public void register(HttpServletRequest request, HttpServletResponse response) throws IOException, InvocationTargetException, IllegalAccessException, ServletException {

        boolean register = stuService.register(request, response);
        if(register){
            response.sendRedirect("login.jsp");
        }else{
            //重定向是发送两次请求,发送第二次请求时,第一次请求对象已经被销毁了,说明jsp中不能获取第一次请求对象中的数据
            //response.sendRedirect("register.jsp");
            request.getRequestDispatcher("register.jsp").forward(request,response);
        }

    }

    public void initModify(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        stuService.initModify(request,response);
        request.getRequestDispatcher("stuinfo.jsp").forward(request,response);
    }

    public void modify(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        stuService.modify(request,response);

        String role = (String) request.getSession().getAttribute("role");
        if("student".equals(role)){
            response.sendRedirect("index.jsp");
        }else if("teacher".equals(role)){
            response.sendRedirect("StuController?action=getStuList&curPage=1");
        }

    }

    public void getStuList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        stuService.getStuList(request);
        request.getRequestDispatcher("stulist.jsp").forward(request,response);
    }

    public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        stuService.delete(request);
        response.sendRedirect("StuController?action=getStuList&curPage=1");
    }
}

TeaController

import com.gl.sms.servlet.BaseServlet;

import javax.servlet.annotation.WebServlet;

@WebServlet("/TeaController")
public class TeaController extends BaseServlet {
}

UserController

import com.gl.sms.service.impl.UserServiceImpl;
import com.gl.sms.servlet.BaseServlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/UserController")
public class UserController extends BaseServlet {

    private UserServiceImpl userService = new UserServiceImpl();

    public void drawCode(HttpServletRequest request, HttpServletResponse response){
        userService.drawCode(request,response);
    }

    public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        boolean login = userService.login(request, response);
        if(login){//登录成功
            response.sendRedirect("index.jsp");
        }else {//登录失败
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }

    }

    public void safeExit(HttpServletRequest request, HttpServletResponse response) throws IOException {
        userService.safeExit(request,response);
        response.sendRedirect("welcome.html");
    }

    public void repassword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        boolean repassword = userService.repassword(request, response);
        if(repassword){//修改密码成功
            response.sendRedirect("UserController?action=safeExit");
        }else{//修改密码失败
            request.getRequestDispatcher("repassword.jsp").forward(request,response);
        }
    }
}

Mapper层

interface接口

IStuMapper
import com.gl.sms.pojo.vo.Student;

import java.util.List;

public interface IStuMapper {

    public int add(Student stu);

    public int delete(String username);

    public int update(Student stu);

    public Student query(String username);

    public Student query(String username,String password);

    public List<Student> query(int offset,int limit);

    public int getCount();
}
ITeaMapper
import com.gl.sms.pojo.vo.Teacher;

public interface ITeaMapper {

    public int update(Teacher tea);

    public Teacher query(String username);

    public Teacher query(String username, String password);

}

Impl

StuMapperImpl
import com.gl.sms.mapper.IStuMapper;
import com.gl.sms.pojo.vo.Student;
import com.gl.sms.utils.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class StuMapperImpl implements IStuMapper {

    @Override
    public int add(Student stu) {
        String sql = "insert into student(username,password,name,sex,age,hobbys) values(?,?,?,?,?,?)";
        int num = DBUtil.commonUpdate(sql,stu.getUsername(),stu.getPassword(),stu.getName(),stu.getSex(),stu.getAge(),stu.getHobbys());
        return num;
    }

    @Override
    public int delete(String username) {
        String sql = "delete from student where username=?";
        int num = DBUtil.commonUpdate(sql,username);
        return num;
    }

    @Override
    public int update(Student stu) {
        String sql = "update student set password=?,name=?,sex=?,age=?,hobbys=? where username=?";
        int num = DBUtil.commonUpdate(sql,stu.getPassword(),stu.getName(),stu.getSex(),stu.getAge(),stu.getHobbys(),stu.getUsername());
        return num;
    }

    @Override
    public Student query(String username) {
        String sql = "select * from student where username=?";
        Student stu = DBUtil.commonQueryOfObj(Student.class, sql, username);
        return stu;
    }

    @Override
    public Student query(String username, String password) {
        String sql = "select * from student where username=? and password=?";
        Student stu = DBUtil.commonQueryOfObj(Student.class, sql, username,password);
        return stu;
    }

    @Override
    public List<Student> query(int offset, int limit) {

        String sql = "select * from student limit ?,?";
        List<Student> stuList = DBUtil.commonQueryOfList(Student.class, sql, offset, limit);

//        String sql = "select * from student limit " + offset+ "," + limit;
//        List<Student> stuList = DBUtil.commonQueryOfList(Student.class, sql);
        return stuList;
    }

    @Override
    public int getCount() {

        String sql = "select count(username) from student";
        int count = DBUtil.getCount(sql);
        return count;
    }

    //填假数据
    public static void main(String[] args) throws Exception {

//        StuMapperImpl stuMapper = new StuMapperImpl();
//
//        for (int i = 1; i < 100; i++) {
//            stuMapper.add(new Student("yetao"+i,"123123","叶涛"+i ,"man",21,"football, basketball, shop"));
//        }

        Connection connection = DBUtil.getConnection();

        String sql = "select * from student limit ?,?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,0);
        statement.setInt(2,10);
        ResultSet resultSet = statement.executeQuery();
        while(resultSet.next()){
            String username = resultSet.getString("username");
            System.out.println(username);
        }
    }
}
TeaMapperImpl
import com.gl.sms.mapper.ITeaMapper;
import com.gl.sms.pojo.vo.Teacher;
import com.gl.sms.utils.DBUtil;

public class TeaMapperImpl implements ITeaMapper {
    @Override
    public int update(Teacher tea) {
        String sql = "update teacher set password=?,name=?,sex=?,age=?,course=? where username=?";
        int num = DBUtil.commonUpdate(sql, tea.getPassword(), tea.getName(), tea.getSex(), tea.getAge(), tea.getCourse(), tea.getUsername());
        return num;
    }

    @Override
    public Teacher query(String username) {
        String sql = "select * from teacher where username=?";
        Teacher tea = DBUtil.commonQueryOfObj(Teacher.class, sql, username);
        return tea;
    }

    @Override
    public Teacher query(String username, String password) {
        String sql = "select * from teacher where username=? and password=?";
        Teacher tea = DBUtil.commonQueryOfObj(Teacher.class, sql, username,password);
        return tea;
    }
}

pojo实体

dto

StuDto
import com.gl.sms.pojo.vo.Student;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class StuDto {

    private Student stu;
    private String sex;
    private String hobbys;
}

vo

Page
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Page<T> {

    private String url;
    private int curPage;
    private int totalPage;
    private int curCount;
    private List<T> list;

}
Student
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student extends User{

    private String hobbys;

    public Student(String username, String password, String name, String sex, int age, String hobbys) {
        super(username, password, name, sex, age);
        this.hobbys = hobbys;
    }
}
Teacher
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Teacher extends User{

    private String course;

}
User
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {

    private String username;
    private String password;
    private String name;
    private String sex;
    private int age;

}

Service层

interface接口

IStuService
import com.gl.sms.pojo.vo.Student;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.InvocationTargetException;

public interface IStuService {

    public boolean isRegister(String username);

    public boolean register(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException;

    public Student login(HttpServletRequest request, HttpServletResponse response);

    public void initModify(HttpServletRequest request, HttpServletResponse response);

    public void modify(HttpServletRequest request, HttpServletResponse response);

    public boolean repassword(HttpServletRequest request, HttpServletResponse response);

    public void delete(HttpServletRequest request);

    public void getStuList(HttpServletRequest request);

    public int getTotalPage(int curCount);
}
ITeaService
import com.gl.sms.pojo.vo.Teacher;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface ITeaService {

    public Teacher login(HttpServletRequest request, HttpServletResponse response);

    public Teacher initModify(HttpServletRequest request, HttpServletResponse response);

    public boolean modify(HttpServletRequest request, HttpServletResponse response);

    public boolean repassword(HttpServletRequest request, HttpServletResponse response);

}
IUserService
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface IUserService {

    public boolean login(HttpServletRequest request, HttpServletResponse response);

    public void drawCode(HttpServletRequest request, HttpServletResponse response);

    public void rememberMe(HttpServletRequest request, HttpServletResponse response,String name,String role,String username);

    public void safeExit(HttpServletRequest request, HttpServletResponse response);

    public boolean repassword(HttpServletRequest request, HttpServletResponse response);
}

Impl

StuServiceImpl
import com.gl.sms.mapper.impl.StuMapperImpl;
import com.gl.sms.pojo.dto.StuDto;
import com.gl.sms.pojo.vo.Page;
import com.gl.sms.pojo.vo.Student;
import com.gl.sms.service.IStuService;
import com.gl.sms.utils.CookieUtil;
import com.gl.sms.utils.DtoUtil;
import com.gl.sms.utils.HobbysUtil;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

public class StuServiceImpl implements IStuService {

    private StuMapperImpl stuMapper = new StuMapperImpl();

    @Override
    public boolean isRegister(String username) {
        Student stu = stuMapper.query(username);
        if(stu == null){
            return  true;
        }
        return false;
    }

    @Override
    public boolean register(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException {
        //获取请求中的数据
        Map<String, String[]> parameterMap = request.getParameterMap();
        Student stu = new Student();
        BeanUtils.populate(stu,parameterMap);

        //判断是否可以注册
        boolean register = isRegister(stu.getUsername());
        if(register){//允许注册
            stuMapper.add(stu);
            return true;
        }else{//不允许注册

            //将展示信息存入请求对象中
            request.setAttribute("msg","注册失败 -- 账号已存在...");
            return false;
        }
    }

    @Override
    public Student login(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        Student stu = stuMapper.query(username, password);
        return stu;
    }

    @Override
    public void initModify(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        Student stu = stuMapper.query(username);
        request.setAttribute("stu",stu);
    }

    @Override
    public void modify(HttpServletRequest request, HttpServletResponse response) {

        String username = request.getParameter("username");
        String name = request.getParameter("name");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        String[] hobbys = request.getParameterValues("hobbys");

        Student stu = stuMapper.query(username);
        stu.setName(name);
        stu.setSex(sex);
        stu.setAge(Integer.parseInt(age));
        stu.setHobbys(HobbysUtil.getHobbys(hobbys));
        stuMapper.update(stu);

        String role = (String) request.getSession().getAttribute("role");
        if("student".equals(role)){
            request.getSession().setAttribute("name",name);
            response.addCookie(CookieUtil.createCookie("name",name,60*60*24*10));
        }

    }

    @Override
    public boolean repassword(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String newpassword = request.getParameter("newpassword");
        String repassword = request.getParameter("repassword");

        if(!newpassword.equals(repassword)){
            request.setAttribute("msg","修改密码失败 -- 新密码与确认密码不一致");
            return false;
        }
        if(password.equals(newpassword)){
            request.setAttribute("msg","修改密码失败 -- 原密码与新密码一致");
            return false;
        }
        Student stu = stuMapper.query(username, password);
        if(stu == null){
            request.setAttribute("msg","修改密码失败 -- 原密码错误");
            return false;
        }
        stu.setPassword(newpassword);
        stuMapper.update(stu);
        return true;
    }

    @Override
    public void delete(HttpServletRequest request) {
        String username = request.getParameter("username");
        stuMapper.delete(username);
    }

    @Override
    public void getStuList(HttpServletRequest request) {
        //获取当前页
        int curPage = Integer.parseInt(request.getParameter("curPage"));

        //当页的数据条数
        int curCount = 10;

        //计算偏移量
        int offset = (curPage-1)*curCount;

        //获取总页数
        int totalPage = getTotalPage(curCount);

        //获取学生对象的集合
        List<Student> stuList = stuMapper.query(offset, curCount);
        //将学生对象集合转换为学生Dto的集合
        List<StuDto> stuDtoList = DtoUtil.getStuDtoList(stuList);

        //url
        String url = "StuController?action=getStuList&curPage=";

        //将数据存入到请求对象中
        Page<StuDto> page = new Page<>(url, curPage, totalPage, curCount, stuDtoList);
        request.setAttribute("page",page);
    }

    @Override
    public int getTotalPage(int curCount) {

        int count = stuMapper.getCount();
        if(count % curCount == 0){
            return count/curCount;
        }else{
            return count/curCount + 1;
        }
    }
}
TeaServiceImpl
import com.gl.sms.mapper.impl.TeaMapperImpl;
import com.gl.sms.pojo.vo.Teacher;
import com.gl.sms.service.ITeaService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TeaServiceImpl implements ITeaService {

    private TeaMapperImpl teaMapper = new TeaMapperImpl();

    @Override
    public Teacher login(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        Teacher tea = teaMapper.query(username, password);
        return tea;
    }

    @Override
    public Teacher initModify(HttpServletRequest request, HttpServletResponse response) {
        return null;
    }

    @Override
    public boolean modify(HttpServletRequest request, HttpServletResponse response) {
        return false;
    }

    @Override
    public boolean repassword(HttpServletRequest request, HttpServletResponse response) {
        return false;
    }
}
UserServiceImpl
import com.gl.sms.pojo.vo.User;
import com.gl.sms.service.IUserService;
import com.gl.sms.utils.CookieUtil;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class UserServiceImpl implements IUserService {

    private StuServiceImpl stuService = new StuServiceImpl();
    private TeaServiceImpl teaService = new TeaServiceImpl();

    @Override
    public boolean login(HttpServletRequest request, HttpServletResponse response) {

        //判断验证码
        String code = request.getParameter("code");
        String systemCode = (String) request.getSession().getAttribute("systemCode");
        if(systemCode.equalsIgnoreCase(code)){//验证码正确

            //判断角色
            String role = request.getParameter("role");
            User user = null;
            if("student".equals(role)){//学生角色
                user = stuService.login(request, response);
            }else if("teacher".equals(role)){//老师角色
                user = teaService.login(request, response);
            }

            if(user != null){//登录成功

                //将index.jsp中需要的数据存入Session对象中
                HttpSession session = request.getSession();
                session.setAttribute("name",user.getName());
                session.setAttribute("role",role);
                session.setAttribute("username",user.getUsername());

                //判断用户是否勾选记住我功能
                String rememberMe = request.getParameter("rememberMe");
                if(rememberMe != null){
                    rememberMe(request,response,user.getName(),role,user.getUsername());
                }
                return true;
            }else{//账号或密码错误
                request.setAttribute("msg","登录失败 -- 账号或密码错误...");
            }
        }else{//验证码错误
            request.setAttribute("msg","登录失败 -- 验证码错误...");
        }
        return false;
    }

    @Override
    public void drawCode(HttpServletRequest request, HttpServletResponse response) {
        int width = 120;
        int height = 50;

        //创建画布
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        //获取画笔
        Graphics graphics = image.getGraphics();

        //设置画布的背景颜色 -- 先设置画笔的颜色,再填充矩形
        graphics.setColor(Color.BLUE);
        graphics.fillRect(0,0,width,height);

        //设置验证码
        Random ran = new Random();
        Color[] colors = {Color.GREEN,Color.PINK,Color.RED,Color.CYAN,Color.WHITE,Color.ORANGE};
        String[] codes = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
        StringBuffer sb = new StringBuffer();//记录系统生成的验证码
        for (int i = 0; i < 4; i++) {

            //随机出颜色
            Color color = colors[ran.nextInt(colors.length)];
            //设置画笔颜色
            graphics.setColor(color);
            //设置字体
            graphics.setFont(new Font("宋体",Font.BOLD,20+ran.nextInt(20)));

            //随机出数据
            String code = codes[ran.nextInt(codes.length)];
            //累加验证码
            sb.append(code);

            //将验证码画到画布上
            graphics.drawString(code,25+20*i,20+ran.nextInt(20));
        }

        //将验证码存入当前会话对象中
        HttpSession session = request.getSession();//获取会话对象
        session.setAttribute("systemCode",sb.toString());

        //设置干扰线
        graphics.setColor(Color.YELLOW);
        for (int i = 0; i < 5; i++) {
            graphics.drawLine(ran.nextInt(width),ran.nextInt(height),ran.nextInt(width),ran.nextInt(height));
        }

        //将画布以jpg格式通过IO流传输给客户端
        try {
            ImageIO.write(image,"jpg",response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void rememberMe(HttpServletRequest request, HttpServletResponse response,String name,String role,String username) {
        response.addCookie(CookieUtil.createCookie("name",name,60*60*24*10));
        response.addCookie(CookieUtil.createCookie("role",role,60*60*24*10));
        response.addCookie(CookieUtil.createCookie("username",username,60*60*24*10));
    }

    @Override
    public void safeExit(HttpServletRequest request, HttpServletResponse response) {
        //删除Cookie
        response.addCookie(CookieUtil.createCookie("name","",0));
        response.addCookie(CookieUtil.createCookie("role","",0));
        response.addCookie(CookieUtil.createCookie("username","",0));
        //删除Session
        HttpSession session = request.getSession();
        session.removeAttribute("name");
        session.removeAttribute("role");
        session.removeAttribute("username");
    }

    @Override
    public boolean repassword(HttpServletRequest request, HttpServletResponse response) {

        String role = request.getParameter("role");
        boolean repassword = false;
        if("student".equals(role)){
            repassword = stuService.repassword(request, response);
        }else if("teacher".equals(role)){
            repassword = teaService.repassword(request,response);
        }
        return repassword;
    }
}

Servlet

BaseServlet

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String action = request.getParameter("action");

        //获取class对象
        Class<? extends BaseServlet> clazz = this.getClass();
        try {
            //获取方法对象
            Method method = clazz.getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            //设置访问权限
            method.setAccessible(true);
            //调用方法
            method.invoke(this,request,response);

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

utilS工具类

DBUtil

import com.alibaba.druid.pool.DruidDataSource;

import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

//数据库工具类
public class DBUtil {

    private static DruidDataSource dataSource;

    static{
        //获取配置文件对象
        Properties properties = new Properties();
        try {
            //加载配置文件
            properties.load(DBUtil.class.getClassLoader().getResourceAsStream("DBConfig.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        String driverName = properties.getProperty("driverName");
        String url = properties.getProperty("url");
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        int maxCapacity = Integer.parseInt(properties.getProperty("maxCapacity"));

        //创建连接池对象
        dataSource = new DruidDataSource();
        //设置参数
        dataSource.setDriverClassName(driverName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMaxActive(maxCapacity);

    }

    private static ThreadLocal<Connection> local = new ThreadLocal<>();

    //开启事务
    public static void startTransaction() throws SQLException {
        Connection connection = getConnection();
        connection.setAutoCommit(false);
    }

    //提交事务
    public static void commit() throws SQLException {
        Connection connection = local.get();
        if(connection != null){
            connection.commit();
            connection.close();
            local.set(null);
        }
    }

    //回滚事务
    public static void rollback() throws SQLException {
        Connection connection = local.get();
        if(connection != null){
            connection.rollback();
            connection.close();
            local.set(null);
        }
    }

    //获取连接对象
    public static Connection getConnection() throws SQLException {
        Connection connection = local.get();
        if (connection == null) {
            //获取连接池中的连接对象
            connection = dataSource.getConnection();

            //设置隔离级别
            connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

            local.set(connection);
        }
        return connection;
    }

    //关闭资源
    public static void close(Connection connection, Statement statement, ResultSet resultSet){
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                if(connection.getAutoCommit()){//没有开启事务,MySQL自动管理提交
                    connection.close();
                    local.set(null);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    //sql -- insert into xxx(username,name,password,salary,age) values(?,?,?,?,?)
    //参数

    //更新数据 -- (添加、删除、修改)
    public static int commonUpdate(String sql,Object... params){

        Connection connection = null;
        PreparedStatement statement = null;
        try {
            connection = getConnection();
            statement = connection.prepareStatement(sql);
            setParameter(statement,params);
            int num = statement.executeUpdate();
            return num;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
           close(connection,statement,null);
        }
        return -1;
    }

    //主键回填
    public static int commonInsert(String sql,Object... params){
        Connection connection = null;
        PreparedStatement statement = null;
        try {
            connection = getConnection();
            statement = connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
            setParameter(statement,params);
            statement.executeUpdate();

            //获取主键
            ResultSet resultSet = statement.getGeneratedKeys();
            if(resultSet.next()){
                int primaryKey = resultSet.getInt(1);
                return primaryKey;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(connection,statement,null);
        }
        return -1;
    }

    //查询数据 -- 返回集合
    public static <T> List<T> commonQueryOfList(Class<T> clazz,String sql,Object... params){

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            connection = getConnection();
            statement = connection.prepareStatement(sql);
            setParameter(statement,params);

            resultSet = statement.executeQuery();

            //创建集合
            List<T> list = new ArrayList<>();

            //获取表信息
            ResultSetMetaData metaData = resultSet.getMetaData();
            //获取表中字段的个数
            int columnCount = metaData.getColumnCount();

            while(resultSet.next()){//1 叶涛 男 22 12000 java 00000000

                //利用反射创建实体类对象
                T obj = clazz.newInstance();

                //循环获取字段名,并利用反射机制添加到实体类对象中
                for (int i = 1; i <= columnCount; i++) {
                    //字段名
                    String columnName = metaData.getColumnName(i);
                    //获取字段名对应的值
                    Object columnValue = resultSet.getObject(columnName);

                    //获取属性对象
                    Field field = getField(clazz, columnName);
                    if(field != null){
                        field.setAccessible(true);
                        field.set(obj,columnValue);
                    }
                }
                list.add(obj);
            }
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            close(connection,statement,resultSet);
        }
        return null;
    }

    //查询数据 -- 返回对象
    public static <T> T commonQueryOfObj(Class<T> clazz,String sql,Object... params){

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            connection = getConnection();
            statement = connection.prepareStatement(sql);
            setParameter(statement,params);

            resultSet = statement.executeQuery();

            //获取表信息
            ResultSetMetaData metaData = resultSet.getMetaData();
            //获取表中字段的个数
            int columnCount = metaData.getColumnCount();

            if(resultSet.next()){

                //利用反射创建实体类对象
                T obj = clazz.newInstance();

                //循环获取字段名,并利用反射机制添加到实体类对象中
                for (int i = 1; i <= columnCount; i++) {
                    //字段名
                    String columnName = metaData.getColumnName(i);
                    //获取字段名对应的值
                    Object columnValue = resultSet.getObject(columnName);

                    //获取属性对象
                    Field field = getField(clazz, columnName);
                    if(field != null){
                        field.setAccessible(true);
                        field.set(obj,columnValue);
                    }
                }
                return obj;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            close(connection,statement,resultSet);
        }
        return null;
    }

    //设置sql参数的方法
    private static void setParameter(PreparedStatement statement,Object... params) throws SQLException {
        for (int i = 0; i < params.length; i++) {
            statement.setObject(i+1,params[i]);
        }
    }

    //利用反射获取实体类中的属性对象
    private static Field getField(Class<?> clazz,String fieldName){

        for(Class<?> c = clazz;c != null;c=c.getSuperclass()){
            try {
                Field field = c.getDeclaredField(fieldName);
                return field;
            } catch (NoSuchFieldException e) {
            }
        }
        return null;
    }

    //获取当前表中的个数
    public static int getCount(String sql) {

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtil.getConnection();
            statement = connection.prepareStatement(sql);
            resultSet = statement.executeQuery();
            if(resultSet.next()){
                int count = resultSet.getInt(1);
                return count;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(connection,statement,resultSet);
        }
        return -1;
    }
}

DtoUtil

import com.gl.sms.pojo.dto.StuDto;
import com.gl.sms.pojo.vo.Student;

import java.util.ArrayList;
import java.util.List;

public class DtoUtil {

    public static StuDto getStuDto(Student stu){
        StuDto stuDto = new StuDto();

        stuDto.setStu(stu);

        if(stu.getSex().equals("man")){
            stuDto.setSex("男");
        }else if(stu.getSex().equals("woman")){
            stuDto.setSex("女");
        }

        String hobbys = stu.getHobbys();
        hobbys = hobbys.replaceAll("football","足球");
        hobbys = hobbys.replaceAll("basketball","篮球");
        hobbys = hobbys.replaceAll("shop","购物");
        stuDto.setHobbys(hobbys);

        return stuDto;
    }

    public static List<StuDto> getStuDtoList(List<Student> stuList){
        ArrayList<StuDto> stuDtoList = new ArrayList<>();
        for (Student stu : stuList) {
            StuDto stuDto = getStuDto(stu);
            stuDtoList.add(stuDto);
        }
        return stuDtoList;
    }
}

HobbysUtil

public class HobbysUtil {

    public static String getHobbys(String[] hobbys){

        StringBuffer sb = new StringBuffer();

        //解决方案一:
//        for (String hobby:hobbys) {
//            if(sb.length() != 0){
//                sb.append(",");
//            }
//            sb.append(hobby);
//        }

        //解决方式二:
        for (String hobby:hobbys) {
            sb.append(hobby);
            sb.append(",");
        }
        sb.deleteCharAt(sb.length()-1);//删除最后一个逗号
        return sb.toString();
    }
}

resources配置文件

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/javaee?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
username=root
password=root
maxCapacity=20

Web前端

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <welcome-file-list>
    <welcome-file>welcome.html</welcome-file>
  </welcome-file-list>

</web-app>

pop.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gl.sms</groupId>
  <artifactId>xueshengguanlixitong</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>xueshengguanlixitong Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.25</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.3</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>Day38_01</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

welcome.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>欢迎页面</h1>

    <a href="login.jsp">登录</a>
    <a href="register.jsp">注册</a>

</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>

    ${msg}

    <body>
        <h1>注册</h1>

        <form action="StuController?action=register" method="post">

            账号:<input name="username" type="text" placeholder="请输入账号"/><br />
            密码:<input name="password" type="password" placeholder="请输入密码"/><br />
            姓名:<input name="name" type="text" placeholder="请输入姓名"/><br />
            性别:
            <input type="radio" name="sex" value="man" checked="checked"/><input type="radio" name="sex" value="woman"/><br />
            年龄:<input name="age" type="text" placeholder="请输入年龄"/><br />
            爱好:
            <input type="checkbox" name="hobbys" value="football"/>足球
            <input type="checkbox" name="hobbys" value="basketball"/>篮球
            <input type="checkbox" name="hobbys" value="shop"/>购物
            <br />

            <input type="submit" value="注册"/>
        </form>
    </body>
</html>

login.jsp

<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <!--物理包含:导入外界代码,底层只有一个文件-login_jsp.java -->
    <%@include file="rememberMe.jsp"%>

    ${msg}

<h1>登录</h1>

<form action="UserController?action=login" method="post">

    账号:<input name="username" type="text" placeholder="请输入账号"/><br />
    密码:<input name="password" type="password" placeholder="请输入密码"/><br />
    角色:
    <select name="role">
        <option value="student">学员</option>
        <option value="teacher">教师</option>
    </select>
    <br />
    验证码:<input name="code" type="text" placeholder="请输入验证码"/><img src="UserController?action=drawCode" width="120px" height="50px" onclick="refreshImg()"><a onclick="refreshImg()">看不清</a><br />
    记住我:<input type="checkbox" name="rememberMe"/><br />

    <input type="submit" value="登录"/>
</form>

<script type="text/javascript">
    var img = document.getElementsByTagName("img")[0];
    function refreshImg() {
        img.src = "UserController?action=drawCode&time=" + new Date();
    }
</script>
</body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <input type="button" value="安全退出" onclick="safeExit()"/>
    <h1>详情页面</h1>
    <h3>欢迎${name}${role eq "student" ? "学员":""}${role eq "teacher" ? "教师":""}进入到学生管理系统</h3>

    <a href="repassword.jsp">修改密码</a>

    <c:if test="${role eq 'student'}">
        <a href="StuController?action=initModify&username=${username}">修改信息</a>
    </c:if>
    <c:if test="${role eq 'teacher'}">
        <a href="#">修改信息</a>
        <a href="StuController?action=getStuList&curPage=1">查看学员列表</a>
    </c:if>

    <script type="text/javascript">
        function safeExit() {
            location = "UserController?action=safeExit";
        }
    </script>
</body>
</html>

repassword.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>

    ${msg}

    <body>
        <h1>修改密码</h1>

        <form action="UserController?action=repassword" method="post">

            <input type="hidden" name="username" value="${username}"/>
            <input type="hidden" name="role" value="${role}"/>

            账号:${username}<br />
            原密码:<input name="password" type="password" placeholder="请输入原密码"/><br />
            新密码:<input name="newpassword" type="password" placeholder="请输入新密码"/><br />
            确认密码:<input name="repassword" type="password" placeholder="请输入确认密码"/><br />

            <input type="submit" value="注册"/>
        </form>
    </body>
</html>

rememberMe.jsp

<%@ page import="java.net.URLDecoder" %><%
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        int num = 0;
        for (Cookie cookie:cookies) {
            String name = cookie.getName();
            String value = URLDecoder.decode(cookie.getValue(),"UTF-8");
            if("name".equals(name)){
                session.setAttribute("name",value);
                num++;
            }
            if("role".equals(name)){
                session.setAttribute("role",value);
                num++;
            }
            if("username".equals(name)){
                session.setAttribute("username",value);
                num++;
            }
        }
        if(num == 3){
            response.sendRedirect("index.jsp");
        }
    }
%>

page.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>
<a href="${page.url}1">首页</a>
<c:if test="${page.curPage>1}">
    <a href="${page.url}${page.curPage-1}">上一页</a>
</c:if>
<c:if test="${page.curPage<page.totalPage}">
    <a href="${page.url}${page.curPage+1}">下一页</a>
</c:if>
<a href="${page.url}${page.totalPage}">尾页</a>

stuinfo.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ page isELIgnored="false"%>

<html>
<head>
    <title>Title</title>
</head>

    <body>
        <h1>修改学生信息</h1>

        <form action="StuController?action=modify" method="post">
            <input type="hidden" name="username" value="${stu.username}"/>
            账号:${stu.username}<br />
            姓名:<input name="name" type="text" value="${stu.name}"/><br />
            性别:
            <input type="radio" name="sex" value="man" <c:if test="${stu.sex eq 'man'}">checked='checked'</c:if>/><input type="radio" name="sex" value="woman" <c:if test="${stu.sex eq 'woman'}">checked='checked'</c:if>/><br />
            年龄:<input name="age" type="text" value="${stu.age}"/><br />
            爱好:
            <input type="checkbox" name="hobbys" value="football" <c:if test="${fn:contains(stu.hobbys,'football')}">checked='checked'</c:if>/>足球
            <input type="checkbox" name="hobbys" value="basketball" <c:if test="${fn:contains(stu.hobbys,'basketball')}">checked='checked'</c:if>/>篮球
            <input type="checkbox" name="hobbys" value="shop" <c:if test="${fn:contains(stu.hobbys,'shop')}">checked='checked'</c:if>/>购物
            <br />

            <input type="submit" value="修改信息"/>
        </form>
    </body>
</html>

stulist.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>

<html>
<head>
    <title>Title</title>
</head>

    <body>
        <h1>学生列表</h1>

        <table width="80%" border="1">
            <tr>
                <th>账号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>爱好</th>
                <th>操作</th>
            </tr>

            <c:forEach items="${page.list}" var="stuDto" >
                <tr>
                    <th>${stuDto.stu.username}</th>
                    <th>${stuDto.stu.name}</th>
                    <th>${stuDto.sex}</th>
                    <th>${stuDto.stu.age}</th>
                    <th>${stuDto.hobbys}</th>
                    <th>
                        <a href="StuController?action=initModify&username=${stuDto.stu.username}">修改</a>
                        <a href="StuController?action=delete&username=${stuDto.stu.username}">删除</a>
                    </th>
                </tr>
            </c:forEach>
        </table>

        <!--逻辑包含:导入外界代码,底层有两个文件-stulist_jsp.java和page_jsp.java -->
        <jsp:include page="page.jsp"/>
    </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨霖先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值