设计一个带有注册、登陆、后台用户管理的网站


使用(Html+Css+JavaScript+Jsp+Servlet+JDBC+JSTL+EL)


工具:Eclipse(NetBeans)、Mysql8.0.12、Tomcat9.0、Navicat


设计思路如下:

用户方面:


管理员方面:

一、设计数据库

在名为joker的数据库中创建一个user1表,内容如下:

二、编写User类

User类用于封装用户信息

三、编写JdbcUtils类

JdbcUtils用于连接数据库:

public class JdbcUtils {
//注册驱动的工具类 private static String url = "jdbc:mysql://localhost:3306/joker?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true";
private static String user = "root";
private static String password = "joker666";
private static String dv = "com.mysql.cj.jdbc.Driver";
//注册驱动
static {
try {
Class.forName(dv);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取连接对象
public static Connection getCon() throws SQLException{
Connection conn = null;
conn = (Connection) DriverManager.getConnection(url, user, password);
return conn;
}
//关闭的方法
public static void close(Statement statement,Connection conn){
if(statement !=null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //关闭的方法
public static void close(PreparedStatement preparedStatement,Connection conn,ResultSet resultSet){
if(preparedStatement !=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

四、编写UserDAO类

UserDAO类用于数据库的插入、查询以及删除(修改没时间写)

public class UserDAO {
//数据库连接对象
public User login(String username,String password) {
User u=null;
Connection connection =null;
PreparedStatement pstmt=null;
ResultSet resultSet=null; //赋值
try {
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1 where name=? and password=?";
pstmt = (PreparedStatement) connection.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
resultSet = pstmt.executeQuery();
if(resultSet.next()){
u=new User();
u.setUsername(resultSet.getString("name"));
u.setPassword(resultSet.getString("password"));
u.setPnumber(resultSet.getString("phonenumber"));
u.setSex(resultSet.getString("sex"));
u.setEmail(resultSet.getString("email"));
u.setHobby(resultSet.getString("hobby"));
u.setAddr1(resultSet.getString("addr1"));
u.setAddr2(resultSet.getString("addr2"));
u.setIntroduce(resultSet.getString("introduce"));
System.out.println("登录成功!");
}else{
System.out.println("用户名或者密码错误!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(pstmt, connection);
}
return u;
} /**
* 添加用户
* @param user
*/
public void addUser(User user) {
Connection connection = null;
PreparedStatement psmt = null;
try {
connection = JdbcUtils.getCon(); String sql ="insert into user1(name,password,phonenumber,sex,email,hobby,addr1,addr2,introduce)values(?,?,?,?,?,?,?,?,?);"; psmt = (PreparedStatement) connection.prepareStatement(sql); //运用实体对象进行参数赋值
psmt.setString(1, user.getUsername());
psmt.setString(2,user.getPassword());
psmt.setString(3,user.getPnumber());
psmt.setString(4,user.getSex());
psmt.setString(5,user.getEmail());
psmt.setString(6,user.getHobby());
psmt.setString(7,user.getAddr1());
psmt.setString(8,user.getAddr2());
psmt.setString(9,user.getIntroduce());
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(psmt, connection);
}
} /**
* 删除用户
* @param name
* @return
* @throws UnsupportedEncodingException
*/
public void delUser(String id) throws UnsupportedEncodingException {
Connection connection = null;
PreparedStatement psmt = null;
int i_d;
i_d = Integer.parseInt(id);
try {
connection = JdbcUtils.getCon();
String sql = "delete from user1 where id=?";
psmt = (PreparedStatement) connection.prepareStatement(sql);
psmt.setInt(1, i_d);
psmt.executeUpdate();
System.out.println("删除成功!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(psmt, connection);
}
} /**
* 查询用户
* @return
*/
public ResultSet seleUser() {
Connection connection =null;
PreparedStatement ps=null;
ResultSet resultSet=null;
//赋值
try {
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1";
ps = (PreparedStatement) connection.prepareStatement(sql);
resultSet = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
}

五、RegisterServlet类

用户点击注册按钮会跳转到此类,在此类将信息进行处理:

/**
* Servlet implementation class RegisterServlet
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获得请求的各项信息
String name=request.getParameter("realname");
String password=request.getParameter("password");
String phonenumber=request.getParameter("phonenumber");
String sex=request.getParameter("sex");
String email=request.getParameter("email");
String[] hobby=request.getParameterValues("hobby");
String hobby1 = "";
int i;
String addr1=request.getParameter("addr1");
String addr2=request.getParameter("addr2");
String introduce=request.getParameter("introduce");
//进行“转码”翻译
for(i=0;i<hobby.length;i++) {
if(hobby[i] != null) {
hobby1 += hobby[i];
}
}
if(addr1.equals("1")) {
addr1 = "河北省";
if(addr2.equals("10")) {
addr2 = "承德市";
}
if(addr2.equals("11")) {
addr2 = "廊坊市";
}
if(addr2.equals("12")) {
addr2 = "唐山市";
}
}
if(addr1.equals("2")) {
addr1 = "河南省";
if(addr2.equals("20")) {
addr2 = "郑州市";
}
if(addr2.equals("21")) {
addr2 = "开封市";
}
if(addr2.equals("22")) {
addr2 = "洛阳市";
}
}
if(addr1.equals("3")) {
addr1 = "山东省";
if(addr2.equals("30")) {
addr2 = "烟台市";
}
if(addr2.equals("31")) {
addr2 = "德州市";
}
if(addr2.equals("32")) {
addr2 = "临沂市";
}
}
//将信息封装至User类中
User user=new User();
user.setUsername(name);
user.setPassword(password);
user.setPnumber(phonenumber);
user.setSex(sex);
user.setEmail(email);
user.setHobby(hobby1);
user.setAddr1(addr1);
user.setAddr2(addr2);
user.setIntroduce(introduce);
//进行数据库的插入
UserDAO userDAO=new UserDAO();
userDAO.addUser(user);
System.out.println("注册成功");
request.getRequestDispatcher("./index.jsp").forward(request, response);
}
}

六、LoginServlet类

用户注册成功后会跳转到登录界面,当用户点击登录按钮会跳转到此类,在此类将请求的信息进行处理:

/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
//获得请求信息
String username = request.getParameter("username");
String password = request.getParameter("password");
//判断用户是否存在
UserDAO userDAO=new UserDAO();
User user=userDAO.login(username, password);
if(user!=null){
session.setMaxInactiveInterval(1800);
session.setAttribute("user", user);
//将对象放入session中
response.sendRedirect("./success1.jsp");
}else{
response.sendRedirect("./fail.jsp");
}
}
}

七、ManaloginServelet类

当管理员在登陆的时候会跳转到此类,此类将信息进行处理:

/**
* Servlet implementation class ManaloginServelet
*/
@WebServlet("/ManaloginServelet")
public class ManaloginServelet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
//获得请求的管理员的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//默认内置账号为admin,密码为123456
if(username.equals("admin") && password.equals("123456")) {
UserDAO userDAO=new UserDAO();
ResultSet resultSet = userDAO.seleUser();
//显示第一页的用户信息
request.setAttribute("page", 1);
session.setMaxInactiveInterval(1800);
//将查询到的用户信息放入session中
session.setAttribute("rs", resultSet);
response.sendRedirect("./adminServlet");
System.out.println("管理员登陆成功");
} else {
response.sendRedirect("./Manafail.jsp");
}
}
}

八、adminServlet类

当管理员登陆成功,会从ManaloginServelet跳转至此类,在此将用户信息分页显示,默认一页显示10人

/**
* Servlet implementation class adminServlet
*/
@WebServlet("/adminServlet")
public class adminServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
listPage listPage=new listPage();
List<User> list = new ArrayList<User>();
int rowCount; //记录总个数
int pageCount; //记录总页数
int beginIndex = 1; //开始的个数
int i = 0; //用作循环
int pageSize = 10; //一页大小
int prePage; //前一页
int nextPage; //后一页
int curPage = 1; //当前页
String strcurPage ; HttpSession session = request.getSession();
ResultSet rs = (ResultSet)session.getAttribute("rs");
session.setAttribute("rs", rs);
if(rs != null ) {
try {
UserDAO userDAO=new UserDAO();
ResultSet resultSet = userDAO.seleUser();
resultSet.last(); rowCount = resultSet.getRow(); // 总个数
pageCount = (int) Math.ceil(rowCount/(pageSize*1.0)); //总页数
strcurPage = request.getParameter("cur");
if(strcurPage != null) {
curPage = Integer.parseInt(strcurPage);
}
//设置上一页
prePage = curPage-1;
if(prePage <= 0)
prePage = 1; //设置下一页
nextPage = curPage+1;
if(nextPage >= pageCount)
nextPage = pageCount; beginIndex = (curPage-1)*pageSize+1; //开始指针指向当前页的第一个数据 if (beginIndex <= 0) { //无上一页
beginIndex = 1;
} if (resultSet.absolute(beginIndex)) {
do {
//设置用户信息
User user = new User() ;
user.setUserID(beginIndex+i);
user.setUser_ID(Integer.parseInt(resultSet.getString("id")));
user.setUsername(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
user.setPnumber(resultSet.getString("phonenumber"));
user.setSex(resultSet.getString("sex"));
user.setEmail(resultSet.getString("email"));
user.setHobby(resultSet.getString("hobby"));
user.setAddr1(resultSet.getString("addr1"));
user.setAddr2(resultSet.getString("addr2"));
user.setIntroduce(resultSet.getString("introduce"));
//添加用户信息
list.add(user);
i++;
if (i == pageSize) {
break;
}
} while (resultSet.next());
}
//将信息封装在listPage类中
listPage.setCurPage(curPage);
listPage.setPrePage(prePage);
listPage.setNextPage(nextPage);
listPage.setPageCount(pageCount);
listPage.setPageSize(pageSize);
listPage.setRowCount(rowCount);
listPage.setList(list); request.setAttribute("listPage", listPage);
request.getRequestDispatcher("./Manasuccess1.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

九、listPage类

用于封装用户以及分页信息

十、admin2Servlet类

管理员在查看用户信息界面,欲查看用户的介绍界面,会跳转到此类

/**
* Servlet implementation class admin2Servlet
*/
@WebServlet("/admin2Servlet")
public class admin2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id;
HttpSession session = request.getSession();
ResultSet rs = (ResultSet)session.getAttribute("rs");
Connection connection =null;
PreparedStatement ps=null;
String introduce = "";
String cur = "";
int i_d;
try {
//获得请求的id,并转换成int类型
id = request.getParameter("id");
id = java.net.URLDecoder.decode(id,"utf-8");
i_d = Integer.parseInt(id);
//获得当前页信息,用于返回
cur = request.getParameter("cur");
cur = java.net.URLDecoder.decode(cur,"utf-8");
session.setAttribute("rs", rs);
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1 where id=?";
ps = (PreparedStatement) connection.prepareStatement(sql);
ps.setInt(1, i_d);
rs = ps.executeQuery();
if(rs.next()){
introduce = rs.getString("introduce");
}
//将introduce与cur放入request中
request.setAttribute("introduce", introduce);
request.setAttribute("cur", cur);
request.getRequestDispatcher("./Manasuccess2.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.close(ps, connection);
}
}
}

十一、Delservlet类

管理员在查看用户信息界面,欲删除某个用户,会跳转到此类

@WebServlet("/Delservlet")
public class Delservlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
ResultSet res = (ResultSet)session.getAttribute("rs");
if(res != null){
String id = request.getParameter("id");
String cur = request.getParameter("cur");
id = java.net.URLDecoder.decode(id,"utf-8");
//删除用户信息
UserDAO userDAO=new UserDAO();
userDAO.delUser(id);
session.setAttribute("rs", res);
request.setAttribute("cur", cur);
request.getRequestDispatcher("adminServlet").forward(request, response);
}else{
response.sendRedirect("./fail.jsp");
}
}
}

十二、各个页面展示

1.用户注册

2.用户登录

3.用户登录成功界面

4.用户查看自我介绍界面

5.管理员登陆界面

6.管理员登陆成功界面

7.管理员查看用户介绍界面

8.数据库截图

9.项目截图

项目地址:

点此下载

书写不易,转载请留言!

具有注册、登陆以及后台管理功能的web开发的更多相关文章

  1. [.NET领域驱动设计实战系列]专题七:DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

    一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己的订单状态看到店家已经发货.从上面的业务逻辑可以看出,当用户 ...

  2. DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

    DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...

  3. 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

    第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...

  4. yii2-basic后台管理功能开发之三:自定义GridView列显示

    在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...

  5. django带后台管理功能的网站

    一.原起: 我大学是学的.Net平台.在那个平台上开发网站用的是ASP.NET这门技术:在那里对数据库的处理.为了 方便写代码,通常也是会用ORM(对象关系模型映射):毕业后搞起了MySQL数据库.自 ...

  6. 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍

    微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...

  7. yii2-basic后台管理功能开发之一:引入模板

    前景:哎没想到用php的yii2框架写了官网……自己选择的框架,跪着也要码完,当年用yii2-basic搭建了官网,原是想偷懒的,没想到还要写后台.... 需求:实现一个可编辑页面图片及新闻内容的后台 ...

  8. Django Admin后台管理功能使用+二次开发

    一  使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7  (Windows x86-64 executable in ...

  9. Python菜鸟之路:Django Admin后台管理功能使用

    前言 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: from django.contrib import admin ...

随机推荐

  1. Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」

    很早以前,在刚开始搞Spring Cloud基础教程的时候,写过这样一篇文章:<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>,可能不少读者也都看过.之后也就一直有关 ...

  2. html中video标签

    video标签: <video src="视频的后缀名是.webM/.ogg/.mp4 "></video>属性: src:用于告诉video标签需要播放的 ...

  3. DFS树求割点问题

    时间复杂度:O(n玄学)总之不大 代码实现(好麻烦,蓝题变紫题) #include<iostream> #include<string.h> #include<algor ...

  4. C# 中的数据库操作~存储过程篇Mysql SqlServer

    Mysql 存储过程查询方式 SQL server 普通数据库操作 EF 调用SQL SERVER存储过程 Mysql 存储过程查询方式: public NetPort GetNetdevicePor ...

  5. Python: 转换文本编码

    最近在做周报的时候,需要把csv文本中的数据提取出来制作表格后生产图表. 在获取csv文本内容的时候,基本上都是用with open(filename, encoding ='UTF-8') as f ...

  6. WebSocket实现数据库更新前台实时显示

    通过一个小实例来实现数据库更新后,推送消息给前台,让前台进行相应操作. 需求 数据库更新之后服务器推送消息给前台,让前台做操作.(数据库的数据不是由服务器写入的) 实现的话说到底都是用轮询,因为数据库 ...

  7. python学习——文件操作

    打开文件 f = open(文件名, 文件打开模式,文件编码) ‘w’:只写模式,它是只能写,而不能读的.如果用’w’模式打开一个不存在的文件,则会创建新的文件开始写入:如果用’w’模式打开一个已存在 ...

  8. C++11——智能指针

    1. 介绍 一般一个程序在内存中可以大体划分为三部分——静态内存(局部的static对象.类static数据成员以及所有定义在函数或者类之外的变量).栈内存(保存和定义在函数或者类内部的变量)和动态内 ...

  9. 五.Linux基础

    Linux是运行在pc机上类似unix风格的操作系统,由众多程序员开发.开放源代码! 由于开放源代码,所以现在的Linux比windows漏洞更少! linux操作系统由内核及应用程序组成,有很多发行 ...

  10. atcoder E - Jigsaw(思维)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_e 题解:这题很巧妙运用了cnt[i]抽象的表示了上下互补的状态,最后上面突出的一定要处理完.下面 ...