1. 程式人生 > >具有註冊、登陸以及後臺管理功能的web開發

具有註冊、登陸以及後臺管理功能的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");
    }
}
}

八、ManaloginServelet類

當管理員登陸成功,會從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);    
        }
    }
}

十一、admin2Servlet類

管理員在檢視使用者資訊介面,欲某個使用者,會跳轉到此類

@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.專案截圖

書寫不易,轉載請留言!