1、环境配置

Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10

2、需求分析

①用户登录注册注销(查找、增加)

②显示用户列表(查找)

③显示用户信息(查找)

④编辑用户信息(修改)

⑤删除用户(删除)

3、目录结构



说明:

①在创建动态网站项目时需要勾选生成web.xml文件,如下图所示。





②User类对应数据库(数据库名:mydb)中的一张表(表名:tbusers),如下图所示。





③DBHelper工具类(用于连接、打开和关闭数据库)

④ServletUser类继承HttpServlet类实现数据库增删改查操作、JSP写前端代码。

在本项目中我对MVC的理解:M-->bean  V-->jsp  C-->servlet

4、具体实现

①DBHelper工具类

package utility;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class DBHelper {
public static Connection getConnection() {
String DRIVER = "com.mysql.cj.jdbc.Driver";
String URL = "jdbc:mysql://localhost:3306/mydb?user=root&password=123456&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
try{
Class.forName(DRIVER);
return DriverManager.getConnection(URL);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static void Close(ResultSet rs, PreparedStatement ps, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

②User类

package bean;

import java.sql.Date;

public class User {
private int id;
private String name;
private String psw;
private int sex;
private String hobby;
private Date birthday;
private String education;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getEducation() {
return education;
}
public void setEducation(String education) {
this.education = education;
}
}

③ServletUser类

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import bean.User;
import utility.DBHelper; @SuppressWarnings("serial")
public class ServletUser extends HttpServlet {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
String action = req.getParameter("action");
if (action.equals("login")) {
login(req, resp);
} else if (action.equals("insert")) {
insert(req, resp);
} else if (action.equals("logout")) {
logout(req, resp);
} else {
HttpSession session = req.getSession();
Object username = session.getAttribute("username");
PrintWriter out = resp.getWriter();
if (username==null) {
out.println("<script>alert('您还没有登录,请先登录!');window.location.href='JSP/userLogin.jsp'</script>");
} else {
if (action.equals("queryAll")) {
queryAll(req, resp);
} else if (action.equals("queryById")) {
queryById(req, resp);
} else if (action.equals("delete")) {
delete(req, resp);
} else if (action.equals("update")) {
update(req, resp);
}
}
}
}
private void logout(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpSession session = req.getSession();
if (session != null) {
session.removeAttribute("username");
}
PrintWriter out = resp.getWriter();
out.println("<script>alert('注销成功!返回登录!');window.location.href='JSP/userLogin.jsp';</script>");
}
private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {
int id = Integer.parseInt(req.getParameter("id"));
int flag = 0;
PrintWriter out = resp.getWriter();
String psw = req.getParameter("userpsw1");
int sex = (req.getParameter("sex").equals("male")) ? 1 : 2;
String hobby = req.getParameter("hobbyText");
hobby = hobby.substring(0, hobby.length()-1); // 去掉最后的逗号
String education = req.getParameter("education");
String birthday = req.getParameter("birthday");
String sql = "update tbusers set userpsw=?, usersex=?, userhobby=?, usereducation=?, userbirthday=? where userid=?";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, psw);
ps.setInt(2, sex);
ps.setString(3, hobby);
ps.setString(4, education);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date birth = new Date(sdf.parse(birthday).getTime());
ps.setDate(5, birth);
} catch (ParseException e) {
e.printStackTrace();
}
ps.setInt(6, id);
flag = ps.executeUpdate();
if (flag!=0) {
out.println("<script>alert('更新成功!返回用户列表!');window.location.href='ServletUser?action=queryAll';</script>");
} else {
out.println("<script>alert('更新失败!');</script>");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
}
private void delete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
int id = Integer.parseInt(req.getParameter("id"));
int flag = 0;
PrintWriter out = resp.getWriter();
String sql = "delete from tbusers where userid=?";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
flag = ps.executeUpdate();
if (flag!=0) {
out.println("<script>alert('删除成功!');window.location.href='ServletUser?action=queryAll';</script>");
} else {
out.println("<script>alert('删除失败!');window.location.href='ServletUser?action=queryAll';</script>");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
}
private void queryById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int id = Integer.parseInt(req.getParameter("id"));
String flag = req.getParameter("flag");
User u = new User();
String sql = "select * from tbusers where userid=?";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
if (rs.next()) {
u.setId(rs.getInt("userid"));
u.setName(rs.getString("username"));
u.setPsw(rs.getString("userpsw"));
u.setSex(rs.getInt("usersex"));
u.setHobby(rs.getString("userhobby"));
u.setBirthday(rs.getDate("userbirthday"));
u.setEducation(rs.getString("usereducation"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
req.setAttribute("user", u);
if (flag.equals("show")) {
req.getRequestDispatcher("JSP/userIndex.jsp").forward(req, resp);
} else if (flag.equals("edit")) {
req.getRequestDispatcher("JSP/userEdit.jsp").forward(req, resp);
}
}
private void queryAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> users = new ArrayList<User>();
String sql = "select * from tbusers";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
User u = new User(); // 注意这条语句的位置
u.setId(rs.getInt("userid"));
u.setName(rs.getString("username"));
u.setPsw(rs.getString("userpsw"));
u.setSex(rs.getInt("usersex"));
u.setHobby(rs.getString("userhobby"));
u.setBirthday(rs.getDate("userbirthday"));
u.setEducation(rs.getString("usereducation"));
users.add(u);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
req.setAttribute("users", users);
req.getRequestDispatcher("JSP/userList.jsp").forward(req, resp);
}
private void insert(HttpServletRequest req, HttpServletResponse resp) throws IOException {
int id = 0, sex = 0;
PrintWriter out = resp.getWriter();
String name = req.getParameter("username");
if (queryByName(name)!=null) {
out.println("<script>alert('该用户名已经被注册过了!换一个吧!');window.history.back(-1);</script>");
return;
}
String psw = req.getParameter("userpsw");
sex = (req.getParameter("sex").equals("male")) ? 1 : 2; // 男1女2
String hobby = req.getParameter("hobbyText");
hobby = hobby.substring(0, hobby.length()-1); // 去掉最后的逗号
// System.out.println("hobby=" + hobby);
String birthday = req.getParameter("birthday");
String education = req.getParameter("education");
String sql = "insert into tbusers(username, userpsw, usersex, userhobby, userbirthday, usereducation) values(?,?,?,?,?,?)";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, name);
ps.setString(2, psw);
ps.setInt(3, sex);
ps.setString(4, hobby);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date birth = new Date(sdf.parse(birthday).getTime());
ps.setDate(5, birth);
} catch (ParseException e) {
e.printStackTrace();
}
ps.setString(6, education);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
if (rs.next()) {
id = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
if (id==0) {
// System.out.println("注册失败!");
out.println("<script>alert('注册失败!');window.history.back(-1);</script>");
} else {
// System.out.println("注册成功!返回登录!");
out.println("<script>alert('注册成功!返回登录!');window.location.href='JSP/userLogin.jsp';</script>");
}
}
private User queryByName(String name) {
String sql = "select * from tbusers where username=?";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery();
if (rs.next()) {
User u = new User();
u.setId(rs.getInt("userid"));
u.setName(rs.getString("username"));
u.setPsw(rs.getString("userpsw"));
u.setSex(rs.getInt("usersex"));
u.setHobby(rs.getString("userhobby"));
u.setBirthday(rs.getDate("userbirthday"));
u.setEducation(rs.getString("usereducation"));
return u;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
return null;
}
private void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("username"); // 参数为input的name属性值
String psw = req.getParameter("userpsw");
PrintWriter out = resp.getWriter();
User u = getUserByNameAndPsw(name, psw);
if (u!=null) {
HttpSession session = req.getSession();
session.setAttribute("username", name);
req.setAttribute("user", u);
// System.out.println("登录成功!");
// out.println("<script>alert('登录成功!')</script>"); 失效
req.getRequestDispatcher("JSP/userIndex.jsp").forward(req, resp);;
} else {
// System.out.println("登录失败!");
// out.println("<script>alert('登录失败!');window.history.go(-1);</script>");
out.println("<script>alert('用户名或密码错误!');window.history.back(-1);</script>");
}
}
private User getUserByNameAndPsw(String name, String psw) {
String sql = "select * from tbusers where username=? and userpsw=?";
try {
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, psw);
rs = ps.executeQuery();
if (rs.next()) {
User u = new User();
u.setId(rs.getInt("userid"));
u.setName(rs.getString("username"));
u.setPsw(rs.getString("userpsw"));
u.setSex(rs.getInt("usersex"));
u.setHobby(rs.getString("userhobby"));
u.setBirthday(rs.getDate("userbirthday"));
u.setEducation(rs.getString("usereducation"));
return u;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBHelper.Close(rs, ps, conn);
}
return null;
}
}

④web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ServletUser</servlet-name>
<servlet-class>servlet.ServletUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletUser</servlet-name>
<url-pattern>/ServletUser</url-pattern>
</servlet-mapping>
</web-app>

5、实现效果

①登录



②注册



③用户列表



④编辑用户





⑤个人主页(编辑前后)





⑥删除用户



6、路径问题

①在servlet中,根目录为http://localhost:8080/demo/

②在jsp中,根目录为http://localhost:8080/demo/JSP/

path.jsp里写的是路径,用于其他jsp页面引用

引用语句:

<%@ include file="path.jsp" %>

path.jsp代码

<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<base href="<%=basePath%>">

基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)的更多相关文章

  1. 基于“MVC”框架集设计模式,开发用户管理系统!

    MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...

  2. 基于SSM框架的JavaWeb通用权限管理系统

    - - ->关注博主公众号[C you again],获取更多IT资源(IT技术文章,毕业设计.课程设计系统源码,经典游戏源码,HTML网页模板,PPT.简历模板,!!还可以投稿赚钱!!,点击查 ...

  3. struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb

    在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...

  4. MVC 6 电商网站开发实战

    [原创] ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API 标签: Web API MVC6 创建web API | 博主:powertoolsteam     ASP.NE ...

  5. Java基于ssm框架的restful应用开发

    Java基于ssm框架的restful应用开发 好几年都没写过java的应用了,这里记录下使用java ssm框架.jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理.jwt校验.token ...

  6. Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)

    对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...

  7. 基于Flask框架搭建视频网站的学习日志(一)

    ------------恢复内容开始------------ 基于Flask框架搭建视频网站的学习日志(一)2020/02/01 一.Flask环境搭建 创建虚拟环境 初次搭建虚拟环境 搭建完虚拟环境 ...

  8. 基于Flask框架搭建视频网站的学习日志(二)

    基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...

  9. 基于Flask框架搭建视频网站的学习日志(三)之原始web表单

    基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...

随机推荐

  1. 使用windbg定位内存问题【入门级】

    1. 背景 在开发过程中,我们可能遇到应用程序线程占用过大的问题,可以通过windbg命令去定位哪些类型,哪些内存一直占用堆资源,从而查出问题,解决问题. 2. 准备工作 工具: 抓取DUMP文件的工 ...

  2. AI在出行场景的应用实践:路线规划、ETA、动态事件挖掘…

    ​前言:又到春招季!作为国民级出行服务平台,高德业务快速发展,大量校招/社招名额开放,欢迎大家投递简历,详情见文末.为帮助大家更了解高德技术,我们策划了#春招专栏#的系列文章,组织各业务团队的高年级同 ...

  3. KL散度相关理解以及视频推荐

    以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频. 假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分 ...

  4. php伪协议分析与CTF例题讲解

                本文大量转载于:https://blog.csdn.net/qq_41289254/article/details/81388343 (感谢博主) 一,php://  访问输入 ...

  5. C#关于个Base64,MD5,16进制的转换

    1,待签名数据以UTF-8的格式转字节流,对字节流进行MD5算法得到的签名字节流,再转换为16进制字符串,即生成了数字签名. byte[] targetData = md5.ComputeHash(S ...

  6. Heron and His Triangle HDU - 6222

    题目链接:https://vjudge.net/problem/HDU-6222 思路:打表找规律. 然后因为数据范围较大可以考虑用字符串模拟,或者__int128要注意用一个快读快输模板. 1 #i ...

  7. vue项目中,更改数组元素的值,视图没有实时更新?

    问题背景: export default { data(){ showItems: [false, false, false, false] }, methods: { showItem(index) ...

  8. Android控件 之 TextClock & AnalogClock(模拟时钟)

    TextClock •简介 关于时间的文本显示,Android 提供了 DigitalClock 和 TextClock. DigitalClock是Android第1版本发布,功能很简单,只显示时间 ...

  9. [深搜]C. 【例题3】虫食算

    C . [ 例 题 3 ] 虫 食 算 题目解析 正解 : Dfs + 剪枝 依题意,把样例以加法的形式展现出来. 根据加法的性质,可以得出有两种情况:有进位和没有进位的. 而从百位到最高位的结果,又 ...

  10. [高精度]P1096 Hanoi 双塔问题

    Hanoi 双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现 ...