• 具有注册、登陆以及后台管理功能的web开发


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


    使用(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.项目截图

    项目地址:

    点此下载

    书写不易,转载请留言!

  • 相关阅读:
    枚举类型(C#)
    如何在Delphi中安装组件
    操作系统知识点总结
    Java内部类学习笔记
    计算机网络笔试面试常考考点
    电话号码分身问题
    最长下降/上升子序列问题
    LeetCode(162):Find Peak Element
    LeetCode(153):Find Minimum in Rotated Sorted Array
    LeetCode(75):Sort Colors
  • 原文地址:https://www.cnblogs.com/zqm-sau/p/9818849.html
Copyright © 2020-2023  润新知