目录结构

demo\
├── WEB-INF\
│   └── weblogic.xml  # WebLogic服务器配置文件
├── demo.iml         # IntelliJ IDEA项目配置文件
├── lib\             # Java EE核心依赖库
│   ├── javax.annotation.jar
│   ├── javax.ejb.jar
│   ├── javax.jms.jar
│   ├── javax.persistence.jar
│   ├── javax.resource.jar
│   ├── javax.servlet.jar
│   ├── javax.servlet.jsp.jar
│   └── javax.transaction.jar
├── src\             # 源代码目录
│   ├── com\
│   │   └── demo\
│   │       ├── dao\              # 数据访问层
│   │       │   ├── UserDao.java   # 用户数据访问接口
│   │       │   └── impl\         # 数据访问实现类(待实现)
│   │       ├── entity\           # 实体类
│   │       │   └── User.java      # 用户实体类
│   │       ├── service\          # 业务逻辑层
│   │       │   ├── UserService.java  # 用户业务接口
│   │       │   └── impl\         # 业务逻辑实现类(待实现)
│   │       ├── test\             # 测试类
│   │       │   └── TestUser.java  # 用户测试类
│   │       ├── utils\            # 工具类
│   │       │   ├── DateUtils.java     # 日期工具类
│   │       │   ├── DownLoadUtils.java # 下载工具类
│   │       │   └── JDBCUtils.java     # 数据库连接工具类
│   │       └── web\              # Servlet控制器
│   │           ├── AddServlet.java     # 添加用户控制器
│   │           ├── CheckCodeServlet.java # 验证码控制器
│   │           ├── DelServlet.java     # 删除用户控制器
│   │           ├── FindServlet.java    # 查找用户控制器
│   │           ├── ListServlet.java    # 用户列表控制器
│   │           ├── LoginServlet.java   # 登录控制器
│   │           └── UpdateServlet.java  # 更新用户控制器
│   └── druid.properties  # Druid连接池配置文件
└── web\             # Web资源目录
    ├── WEB-INF\
    │   └── lib\     # 项目依赖库
    │       ├── c3p0-0.9.1.2.jar              # 另一个连接池
    │       ├── commons-beanutils-1.8.3.jar   # Bean操作工具
    │       ├── commons-dbutils-1.4.jar       # 数据库操作工具
    │       ├── commons-logging-1.1.1.jar     # 日志工具
    │       ├── druid-1.0.9.jar               # Druid连接池
    │       ├── hamcrest-core-1.3.jar         # 测试断言库
    │       ├── javax.servlet.jsp.jstl.jar    # JSTL核心库
    │       ├── jstl-impl.jar                 # JSTL实现
    │       ├── junit-4.12.jar                # 单元测试框架
    │       ├── mysql-connector-j-8.0.33.jar  # MySQL驱动(新版)
    │       ├── mysql-connector-java-5.1.18-bin.jar # MySQL驱动(旧版)
    │       ├── spring-beans-4.2.4.RELEASE.jar # Spring Beans
    │       ├── spring-core-4.2.4.RELEASE.jar  # Spring核心
    │       ├── spring-jdbc-4.2.4.RELEASE.jar  # Spring JDBC
    │       └── spring-tx-4.2.4.RELEASE.jar    # Spring事务
    ├── add.jsp       # 添加用户页面
    ├── css\          # 样式文件
    │   ├── bootstrap-theme.css  # Bootstrap主题
    │   └── bootstrap.css        # Bootstrap核心样式
    ├── fonts\        # 字体文件
    │   ├── glyphicons-halflings-regular.eot
    │   ├── glyphicons-halflings-regular.svg
    │   ├── glyphicons-halflings-regular.ttf
    │   ├── glyphicons-halflings-regular.woff
    │   └── glyphicons-halflings-regular.woff2
    ├── index.jsp     # 首页
    ├── js\           # JavaScript文件
    │   ├── bootstrap.js        # Bootstrap JavaScript
    │   └── jquery-2.1.0.min.js # jQuery库
    ├── list.jsp      # 用户列表页面
    ├── login.jsp     # 登录页面
    └── update.jsp    # 更新用户页面

项目架构说明

这是一个典型的Java Web项目,采用MVC三层架构设计:

  1. 模型层(Model)

    • entity包:存放实体类,如User.java
    • dao包:数据访问层,负责与数据库交互
    • service包:业务逻辑层,处理业务需求
  2. 视图层(View)

  • web目录下的JSP页面:负责用户界面展示
  • CSS、JS等前端资源:美化页面和增强交互性
  1. 控制层(Controller)

    • web包下的Servlet类:处理HTTP请求,调用业务逻辑,返回响应

技术栈

  • 后端 :Java、Servlet/JSP、JDBC
  • 数据库 :MySQL
  • 连接池 :Druid
  • 框架 :Spring部分组件(Beans、Core、JDBC、TX)
  • 前端 :HTML、CSS、JavaScript、jQuery、Bootstrap
  • 开发工具 :IntelliJ IDEA
  • 应用服务器 :WebLogic

主要功能模块

这是一个用户管理系统,包含以下主要功能:

  • 用户登录认证,图形验证码
  • 用户信息的增、删、改、查
  • 验证码生成与验证
    项目使用Druid数据库连接池管理数据库连接,使用Spring JDBC简化数据库操作,前端采用Bootstrap框架实现响应式布局。

练习Demo的知识点分析

这个项目是一个典型的Java Web入门级练习Demo,主要用于学习和实践Java Web开发的基础知识点。以下是详细的知识点总结:

1. Java Web核心技术

  • Servlet技术 :通过多个Servlet类(LoginServlet、ListServlet、AddServlet等)处理HTTP请求和响应
  • JSP页面 :实现用户界面展示,包括登录、列表、添加、修改等功能页面
  • 请求与响应处理 :处理GET/POST请求、设置请求编码、获取请求参数
  • 会话管理 :使用HttpSession存储用户信息和验证码
  • 请求转发与重定向 :实现页面跳转和数据传递
  • 注解配置 :使用 @WebServlet 注解配置Servlet映射

2. MVC三层架构设计

  • Model层 :包含实体类(User.java),定义数据模型
  • View层 :JSP页面,负责用户界面展示
  • Controller层 :Servlet类,处理请求,调用业务逻辑,返回响应

3. 分层设计模式

  • DAO层(数据访问层) :UserDao接口定义数据访问方法
  • Service层(业务逻辑层) :UserService接口封装业务逻辑
  • Web层(控制器层) :Servlet处理用户请求和响应

4. 数据库操作技术

  • JDBC基础 :使用JDBC API连接和操作数据库
  • Druid连接池 :通过JDBCUtils工具类管理数据库连接池
  • 数据库配置 :使用druid.properties外部配置文件管理数据库连接信息

5. 前端技术

  • HTML/CSS/JavaScript :基础前端技术
  • jQuery :简化DOM操作和AJAX请求
  • Bootstrap框架 :实现响应式布局和美观界面
  • 表单验证 :前端数据输入验证

6. 验证码功能

  • 实现了验证码的生成与验证功能,通过CheckCodeServlet类

项目用途

这个Demo主要有以下几个用途:

  1. 学习Java Web开发基础 :作为入门级项目,帮助初学者理解Java Web的基本概念和开发流程
  2. 实践MVC架构 :展示如何在实际项目中应用MVC设计模式
  3. 掌握数据库操作 :学习如何使用JDBC和连接池进行数据库操作
  4. 理解分层设计 :体会分层架构在项目维护和扩展中的优势
  5. 熟悉前后端交互 :了解Web应用中前后端数据交互的方式
  6. 实现用户管理功能 :完整实现了一个简单用户管理系统的增删改查功能

典型应用场景

这个Demo模拟了一个简单的用户管理系统,可以用于:

  • 管理员登录认证
  • 查看所有用户列表
  • 添加新用户
  • 修改现有用户信息
  • 删除用户
  • 搜索特定用户
    通过这个练习Demo,初学者可以全面了解Java Web开发的基本流程和核心技术,为更复杂的Web应用开发打下基础

项目文件汇总

生成时间:2025-09-01 14:27:46
项目根目录:D:\test\runjar\data\static\data\demo


一、后端代码文件

实体类(Entity)

src\com\demo\entity\User.java
package com.demo.entity;

public class User {
    private Integer id;
    private String name;
    private String gender;
    private Integer age;
    private String address;
    private String qq;
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", qq='" + qq + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

数据访问层(DAO接口)

src\com\demo\dao\UserDao.java
package com.demo.dao;

import com.demo.entity.User;

import java.util.List;

public interface UserDao {
    //登陆验证
    public User checkUser(String username,String password)throws  Exception;
      //查询全部
    public List<User> getUserList()throws  Exception;
    //查询单个
    public User getUserById(Integer id) throws Exception;
    //添加用户
    public int addUser(User user)throws Exception;
    //修改用户
    public int updateUser(User user)throws  Exception;
    //删除用户
    public int deleteUserById(String id) throws Exception;

}

数据访问层(DAO实现)

src\com\demo\dao\impl\UserDaoImpl.java
package com.demo.dao.impl;

import com.demo.dao.UserDao;
import com.demo.entity.User;
import com.demo.utils.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.util.List;

public class UserDaoImpl implements UserDao {
    private final String CHECK_USER="SELECT * FROM T_LOGIN WHERE USERNAME=?AND PASSWORD=?";
    private final String GET_USERLIST="SELECT * FROM USER";
    private final String GET_USDERBYID="SELECT * FROM USER WHERE ID=?";
    private final String ADD_USER="INSERT INTO USER(NAME,GENDER,AGE,ADDRESS,QQ,EMAIL) VALUES(?,?,?,?,?,?)";
    private final String UPDATE_USER="UPDATE USER SET NAME=?,GENDER=?,AGE=?,ADDRESS=?,QQ=?,EMAIL=? WHERE ID=?";
    private final String  DELETE_USERBYID="DELETE FROM USER WHERE ID=?";
         //获取连接池对象
    private  QueryRunner queryRunner= new QueryRunner(JDBCUtils.getDataSource());
    @Override
    public User checkUser(String username, String password) throws Exception {
        return queryRunner.query(CHECK_USER,new BeanHandler<User>(User.class),username,password);
    }

    @Override
    public List<User> getUserList() throws Exception {
        return queryRunner.query(GET_USERLIST,new BeanListHandler<User>(User.class));
    }

    @Override
    public User getUserById(Integer id) throws Exception {
        return queryRunner.query(GET_USDERBYID,new BeanHandler<User>(User.class),id);
    }

    @Override
    public int addUser(User user) throws Exception {
        return queryRunner.update(ADD_USER,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
    }

    @Override
    public int updateUser(User user) throws Exception {
        return queryRunner.update(UPDATE_USER,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
    }

    @Override
    public int deleteUserById(String id) throws Exception {
        return queryRunner.update(DELETE_USERBYID,id);
    }
}

业务逻辑层(Service接口)

src\com\demo\service\UserService.java
package com.demo.service;

import com.demo.entity.User;

import java.util.List;

public interface UserService {
    //登陆验证
    public boolean checkUser(String username, String password)throws  Exception;
    //查询全部
    public List<User> getUserList()throws  Exception;
    //查询单个
    public User getUserById(String id) throws Exception;
    //添加用户
    public boolean addUser(User user)throws Exception;
    //修改用户
    public boolean updateUser(User user)throws  Exception;
    //删除用户
    public boolean deleteUserById(String id) throws Exception;
}

业务逻辑层(Service实现)

src\com\demo\service\impl\UserServiceImpl.java
package com.demo.service.impl;

import com.demo.dao.UserDao;
import com.demo.dao.impl.UserDaoImpl;
import com.demo.entity.User;
import com.demo.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
    //创建userDao对象
   private UserDao userDao=new UserDaoImpl();
    @Override
    public boolean checkUser(String username, String password) throws Exception {
        return userDao.checkUser(username,password)!=null?true:false;

    }

    @Override
    public List<User> getUserList() throws Exception {
        return userDao.getUserList();
    }

    @Override
    public User getUserById(String id) throws Exception {
        return userDao.getUserById(Integer.getInteger(id));
    }

    @Override
    public boolean addUser(User user) throws Exception {
        return userDao.addUser(user)>0?true:false;
    }

    @Override
    public boolean updateUser(User user) throws Exception {
        return userDao.updateUser(user)>0?true:false;
    }

    @Override
    public boolean deleteUserById(String id) throws Exception {
        return userDao.deleteUserById(id)>0?true:false;
    }
}

工具类(Utils)

src\com\demo\utils\DateUtils.java
package com.demo.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {
    /*
    date  需要格式化的日期
    return 字符串类型的日期
     */
    public String fromDateToString(Date date){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String strDate = format.format(date);
        return strDate;
    }
    /*
    strDate 字符串类型的日期
    return Date类型的日期
     */
    public Date fromStringToDate(String strDate) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = format.parse(strDate);
        return   date;

    }
}
src\com\demo\utils\DownLoadUtils.java
package com.demo.utils;


import sun.misc.BASE64Encoder;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class DownLoadUtils {
public static String getFileName(String agent,String filename) throws UnsupportedEncodingException {
               if (agent.contains("MSIE")){
                    //IE浏览器
                   filename=URLEncoder.encode(filename,"utf-8");
                   filename=filename.replace("+"," ");
               }else if (agent.contains("Firefox")){
                     //火狐浏览器
                   BASE64Encoder base64Encoder = new BASE64Encoder();
                   filename="=?utf-8?B?"+base64Encoder.encode(filename.getBytes("utf-8"))+"?=";
               } else {
                   //其他浏览器
                   filename=URLEncoder.encode(filename,"utf-8");
               }

    return filename;
}
}
src\com\demo\utils\JDBCUtils.java
package com.demo.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

//JDBC工具类 使用Durid连接池
public class JDBCUtils {
    private static DataSource ds;

       static {
           try {
           //1.加载配置文件
           Properties pro=new Properties();
           //使用ClassLoader加载配置文件,获取字节输入流
           InputStream is=JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");

               pro.load(is);
               ds=DruidDataSourceFactory.createDataSource(pro);
           } catch (IOException e) {
               e.printStackTrace();
           } catch (Exception e) {
               e.printStackTrace();
           }

       }

    //获取连接池对象
    public static DataSource getDataSource(){
        return  ds;
    }
    //获取链接Connection对象
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }

}

测试类(Test)

src\com\demo\test\TestUser.java
package com.demo.test;

import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;
import org.junit.Test;

import java.util.List;

public class TestUser {
       //查询全部
    @Test
    public void testUserList(){
        UserService userService=new UserServiceImpl();
        try {
            List<User> list = userService.getUserList();
            for (User user:list) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //查询单个
    @Test
    public void testUserById(){
            UserService userService=new UserServiceImpl();
        try {
            User user = userService.getUserById("3");
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //添加
    @Test
    public void testAddUser(){
        UserService userService=new UserServiceImpl();
        User user =new User();
        user.setName("mo");
        user.setGender("男");
        user.setAge(18);
        user.setAddress("河南");
        user.setQq("821428181");
        user.setEmail("821428181@qq.com");
        boolean flag=false;
        try {
            flag=userService.addUser(user);
            if (flag){
                System.out.println("添加成功!");
            }else {
                System.out.println("添加失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //修改
    @Test
    public void testUpdateUser(){
        UserService userService=new UserServiceImpl();
        User user =new User();
        user.setName("momo");
        user.setGender("女");
        user.setAge(19);
        user.setAddress("河南");
        user.setQq("821428181");
        user.setEmail("821428181@qq.com");
        user.setId(7);
        boolean flag=false;
        try {
            flag=userService.updateUser(user);
            if (flag){
                System.out.println("修改成功!");
            }else {
                System.out.println("修改失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //删除
    @Test
    public void testDeleteUser(){
        UserService userService=new UserServiceImpl();
        try {
            boolean flag=userService.deleteUserById("21");
            if (flag){
                System.out.println("删除成功!");
            }else {
                System.out.println("删除失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

web类

src\com\demo\web\AddServlet.java
package com.demo.web;

import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;

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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet( "/addServlet")
public class AddServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        try {
            //设置编码方式
            request.setCharacterEncoding("utf-8");
            //获取参数
            Map<String,String[]> map=request.getParameterMap();
            //封装对象
            User user=new User();
            //拷贝数据map--->user
            BeanUtils.populate(user,map);
            //调用service保存数据
            UserService userService=new UserServiceImpl();
            boolean flag=userService.addUser(user);
            //判断是否添加成功
            if (flag){
                //添加成功,跳转资源
                response.sendRedirect(request.getContextPath()+"/listServlet");
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
src\com\demo\web\CheckCodeServlet.java
package com.demo.web;

import javax.imageio.ImageIO;
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 javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        int width = 100;
        int height = 50;
        //1、创建一个对象,用来生成验证码图片
        BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        //2、美化
        //2.1填充背景颜色
        Graphics graphics = bufferedImage.getGraphics();//画图对象
        graphics.setColor(Color.PINK);
        graphics.fillRect(0,0,width,height);

        //2.2画边框
        graphics.setColor(Color.BLUE);
        graphics.drawRect(0,0,width-1,height-1);

        //2.3实现验证码随机生成

        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        //随机生成角标
        Random random = new Random();
        //存储生成的验证码
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 1; i <=4 ; i++) {
            int index = random.nextInt(str.length());
            char c = str.charAt(index);
            stringBuilder.append(c);
            graphics.drawString(c+"",width/5 * i,height/2);
        }
        String checkCode_session = stringBuilder.toString();
        //存储验证码到session中
        HttpSession session = request.getSession();
        session.setAttribute("checkCode_session",checkCode_session);

        //2.4画干扰线
        graphics.setColor(Color.GREEN);
        for (int i = 0; i < 10 ; i++) {
            int x1 = random.nextInt(width);
            int x2 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int y2 = random.nextInt(height);
            graphics.drawLine(x1,x2,y1,y2);
        }

        //3、输出验证码到浏览器
        ImageIO.write(bufferedImage,"jpg", response.getOutputStream());

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
               this.doPost(request,response);
    }
}
src\com\demo\web\DelServlet.java
package com.demo.web;

import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;

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 java.io.IOException;

@WebServlet("/delServlet")
public class DelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String id=request.getParameter("id");
        UserService service=new UserServiceImpl();
        try {
            service.deleteUserById(id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.sendRedirect(request.getContextPath()+"/listServlet");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
src\com\demo\web\FindServlet.java
package com.demo.web;

import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;

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 java.io.IOException;

@WebServlet( "/findServlet")
public class FindServlet extends HttpServlet {
    //根据id查询
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String id=request.getParameter("id");
        UserService service=new UserServiceImpl();
        User user=null;
        try {
            user =service.getUserById(id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        request.setAttribute("user",user);
        request.getRequestDispatcher("/update.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
src\com\demo\web\ListServlet.java
package com.demo.web;

import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;

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 java.io.IOException;
import java.util.List;

@WebServlet( "/listServlet")
public class ListServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              //查询全部
        //创建一个UserService实例
        UserService userService=new UserServiceImpl();
        try {
            List<User> userList = userService.getUserList();
            //把userList传递给页面list.jsp进行显示
            request.setAttribute("userList",userList);
            //跳转页面
            request.getRequestDispatcher("/list.jsp").forward(request,response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
src\com\demo\web\LoginServlet.java
package com.demo.web;

import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码方式
        request.setCharacterEncoding("utf-8");
        //获取参数
        String username = request.getParameter("user");
        String password = request.getParameter("password");
//用户如入的信息
        String verifycode = request.getParameter("verifycode");
//3.获取验证码
        HttpSession session = request.getSession();
        String checkCode_session = (String) session.getAttribute("checkCode_session");
        //4、判断用户输入的验证码和生成的验证码是否一致
        //判断输入的验证码不能为空
        if (verifycode != null && verifycode.equalsIgnoreCase(checkCode_session)) {
            // 验证码正确
            //判断用户名和密码发是否正确
            //1、创建UserService实例对象
            UserService userService = new UserServiceImpl();
            try {
                boolean flag = userService.checkUser(username, password);
                if (flag) {
                    //用户合法
                    //存储用户信息到session中
                    session.setAttribute("username", username);
                    //跳转页面index.jsp
                    response.sendRedirect(request.getContextPath() + "/index.jsp");
                } else {
                    //非法用户
                    //用户名或者密码错误,给用户返回提示信息
                    request.setAttribute("msg_error", "用户名或者密码错误");
//跳转页面(转发)
                    request.getRequestDispatcher("/login.jsp").forward(request, response);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        } else {
//验证码错误,给用户返回提示信息
            request.setAttribute("msg_error", "验证码错误!");
//跳转页面(转发)
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
src\com\demo\web\UpdateServlet.java
package com.demo.web;

import com.demo.entity.User;
import com.demo.service.UserService;
import com.demo.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;

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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet( "/updateServlet")
public class UpdateServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User user=null;
        try {
            //设置编码方式
            request.setCharacterEncoding("utf-8");
            //获取参数
            Map<String,String[]>map=request.getParameterMap();
            //封装对象
            user=new User();
            //拷贝数据
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //保存数据
        UserService service=new UserServiceImpl();
        try {
            service.updateUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //跳转资源
        response.sendRedirect(request.getContextPath()+"/listServlet");

    }

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

前端库文件

  • 📄 web\js\bootstrap.js
  • 📄 web\js\jquery-2.1.0.min.js

依赖JAR包

  • 📄 lib\javax.annotation.jar
  • 📄 lib\javax.ejb.jar
  • 📄 lib\javax.jms.jar
  • 📄 lib\javax.persistence.jar
  • 📄 lib\javax.resource.jar
  • 📄 lib\javax.servlet.jar
  • 📄 lib\javax.servlet.jsp.jar
  • 📄 lib\javax.transaction.jar
  • 📄 web\WEB-INF\lib\c3p0-0.9.1.2.jar
  • 📄 web\WEB-INF\lib\commons-beanutils-1.8.3.jar
  • 📄 web\WEB-INF\lib\commons-dbutils-1.4.jar
  • 📄 web\WEB-INF\lib\commons-logging-1.1.1.jar
  • 📄 web\WEB-INF\lib\druid-1.0.9.jar
  • 📄 web\WEB-INF\lib\hamcrest-core-1.3.jar
  • 📄 web\WEB-INF\lib\javax.servlet.jsp.jstl.jar
  • 📄 web\WEB-INF\lib\jstl-impl.jar
  • 📄 web\WEB-INF\lib\junit-4.12.jar
  • 📄 web\WEB-INF\lib\mysql-connector-j-8.0.33.jar
  • 📄 web\WEB-INF\lib\mysql-connector-java-5.1.18-bin.jar
  • 📄 web\WEB-INF\lib\spring-beans-4.2.4.RELEASE.jar
  • 📄 web\WEB-INF\lib\spring-core-4.2.4.RELEASE.jar
  • 📄 web\WEB-INF\lib\spring-jdbc-4.2.4.RELEASE.jar
  • 📄 web\WEB-INF\lib\spring-tx-4.2.4.RELEASE.jar

二、前端代码文件

JSP页面

web\add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>添加用户</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <center><h3>添加联系人页面</h3></center>
    <form action="${pageContext.request.contextPath}/addServlet" method="post">
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
        </div>

        <div class="form-group">
            <label>性别:</label>
            <input type="radio" name="gender"  value="" checked="checked"/><input type="radio" name="gender"  value=""/></div>

        <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
        </div>

        <div class="form-group">
            <label for="address">籍贯:</label>
            <select name="address" class="form-control" id="address">
                <option value="河南">河南</option>
                <option value="广东">广东</option>
                <option value="广西">广西</option>
                <option value="湖南">湖南</option>
            </select>
        </div>

        <div class="form-group">
            <label for="qq">QQ:</label>
            <input type="text" class="form-control" name="qq" id="qq" placeholder="请输入QQ号码"/>
        </div>

        <div class="form-group">
            <label for="email">Email:</label>
            <input type="text" class="form-control" name="email" id="email" placeholder="请输入邮箱地址"/>
        </div>

        <div class="form-group" style="text-align: center">
            <input class="btn btn-primary" type="submit" value="提交" />
            <input class="btn btn-default" type="reset" value="重置" />
            <input class="btn btn-default" type="button" value="返回" />
        </div>
    </form>
</div>
</body>
</html>
web\index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
      <meta name="viewport" content="width=device-width, initial-scale=1"/>
      <title>首页</title>
      <!-- 1. 导入CSS的全局样式 -->
      <link href="css/bootstrap.min.css" rel="stylesheet">
      <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
      <script src="js/jquery-2.1.0.min.js"></script>
      <!-- 3. 导入bootstrap的js文件 -->
      <script
              src="js/bootstrap.min.js"></script>
      <script type="text/javascript"></script>
  </head>
  <body>
        <div align="center">
          <a
                  href="${pageContext.request.contextPath}/listServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
          </a>
        </div>
  </body>
</html>
web\list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
    <script>
        function deleteuser(id) {
            if (confirm("确定要删除吗?")) {
                location.href="${pageContext.request.contextPath}/delServlet?id="+id;
            }
        }
    </script>
</head>
<body>
<div class="container">
    <h5 style="text-align: center">用户信息列表</h5>
    <table border="1" class="table table-bordered
 table-hover">
        <tr class="success">
               <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>籍贯</th>
            <th>QQ</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
        <c:forEach items="${userList}" var="list">
            <tr>
                <td>${list.id}</td>
                <td>${list.name}</td>
                <td>${list.gender}</td>
                <td>${list.age}</td>
                <td>${list.address}</td>
                <td>${list.qq}</td>
                <td>${list.email}</td>
                <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findServlet?id=${list.id}">修改</a>&nbsp;
                    <a class="btn btn-default btn-sm" href="javascript:deleteuser(${list.id})">删除</a></td>

            </tr>
        </c:forEach>
        <tr>
            <td colspan="8" align="center"><a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a></td>
        </tr>
    </table>
</div>

</body>
</html>
web\login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>管理员登录</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <script type="text/javascript">
        function refreshCode(){
            //获取验证码的元素对象
            var vcode = document.getElementById("vcode");
            //设置验证码的src属性
            vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?" + new Date().getTime();
        }
    </script>
</head>
<body>
<div class="container" style="width: 400px;">
    <h3 style="text-align: center;">管理员登录</h3>
    <form action="${pageContext.request.contextPath}/loginServlet" method="post">
        <div class="form-group">
            <label for="user">用户名:</label>
            <input type="text" name="user" class="form-control" id="user" placeholder="请输入用户名"/>
        </div>

        <div class="form-group">
            <label for="password">密码:</label>
            <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
        </div>

        <div class="form-inline">
            <label for="vcode">验证码:</label>
            <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
            <a href="javascript:refreshCode()"><img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a>
        </div>
        <hr/>
        <div class="form-group" style="text-align: center;">
            <input class="btn btn btn-primary" type="submit" value="登录">
        </div>
    </form>

    <!-- 出错显示的信息框 -->
    <div class="alert alert-warning alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" >
            <span>&times;</span></button>
        <strong>登录失败!</strong>
    </div>
</div>
</body>
</html>
web\update.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%--<base href="<%=basePath%>"/>--%>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>修改用户</title>

    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/jquery-2.1.0.min.js"></script>
    <script src="js/bootstrap.min.js"></script>

</head>
<body>
<div class="container" style="width: 400px;">
    <h3 style="text-align: center;">修改联系人</h3>
    <form action="${pageContext.request.contextPath}/updateServlet" method="post">
        <input type="hidden" name="id" value="${user.id}">
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" class="form-control" id="name" name="name" value="${user.name}" readonly="readonly" placeholder="请输入姓名" />
        </div>

        <div class="form-group">
            <label>性别:</label>
            <c:if test="${user.gender =='男'}" >
                <input type="radio" name="gender"  value="${user.gender}" checked /><input type="radio" name="gender" id="${user.gender}" value="${user.gender}"  /></c:if>
            <c:if test="${user.gender =='女'}">
                <input type="radio" name="gender" id="gender" value="${user.gender}"  /><input type="radio" name="gender"  value="${user.gender}" checked /></c:if>
        </div>

        <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" class="form-control" id="age"  name="age" value="${user.age}" placeholder="请输入年龄" />
        </div>

        <div class="form-group">
            <label for="address">籍贯:</label>
            <select name="address" id="address" class="form-control" >
                <c:if test="${user.address =='狭西'}" >
                    <option value="狭西" selected>狭西</option>
                    <option value="河南">河南</option>
                    <option value="北京">北京</option>
                </c:if>
                <c:if test="${user.address =='河南'}" >
                    <option value="狭西">狭西</option>
                    <option value="河南" selected>河南</option>
                    <option value="北京">北京</option>
                </c:if>
                <c:if test="${user.address =='北京'}">
                    <option value="狭西">狭西</option>
                    <option value="河南">河南</option>
                    <option value="北京" selected>北京</option>
                </c:if>
            </select>
        </div>

        <div class="form-group">
            <label for="qq">QQ:</label>
            <input type="text" class="form-control" id="qq" name="qq" value="${user.qq}" placeholder="请输入QQ号码"/>
        </div>

        <div class="form-group">
            <label for="email">Email:</label>
            <input type="text" class="form-control" id="email" name="email" value="${user.email}" placeholder="请输入邮箱地址"/>
        </div>

        <div class="form-group" style="text-align: center">
            <input class="btn btn-primary" type="submit" value="提交" />
            <input class="btn btn-default" type="reset" value="重置" />
            <input class="btn btn-default" type="button" value="返回"/>
        </div>
    </form>
</div>
</body>
</html>

三、 配置文件


driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=1234
#初始化连接池
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐