java web 练习demo。生成简单验证码前端是jsp
·
目录结构
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三层架构设计:
-
模型层(Model)
- entity包:存放实体类,如User.java
- dao包:数据访问层,负责与数据库交互
- service包:业务逻辑层,处理业务需求
-
视图层(View)
- web目录下的JSP页面:负责用户界面展示
- CSS、JS等前端资源:美化页面和增强交互性
-
控制层(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主要有以下几个用途:
- 学习Java Web开发基础 :作为入门级项目,帮助初学者理解Java Web的基本概念和开发流程
- 实践MVC架构 :展示如何在实际项目中应用MVC设计模式
- 掌握数据库操作 :学习如何使用JDBC和连接池进行数据库操作
- 理解分层设计 :体会分层架构在项目维护和扩展中的优势
- 熟悉前后端交互 :了解Web应用中前后端数据交互的方式
- 实现用户管理功能 :完整实现了一个简单用户管理系统的增删改查功能
典型应用场景
这个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>
<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>×</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
更多推荐


所有评论(0)