基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)

1、环境配置
Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10
2、需求分析
①用户登录注册注销(查找、增加)
②显示用户列表(查找)
③显示用户信息(查找)
④编辑用户信息(修改)
⑤删除用户(删除)
3、目录结构
目录结构
说明:
①在创建动态网站项目时需要勾选生成web.xml文件,如下图所示。
创建项目
生成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、实现效果
①登录
登录
②注册
image
③用户列表
image
④编辑用户
image
image
⑤个人主页(编辑前后)
image
image
⑥删除用户
image
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%>">
posted @ 2021-05-02 16:53  ASPROUT  阅读(1151)  评论(1编辑  收藏  举报