具有註冊、登陸以及後臺管理功能的web開發
阿新 • • 發佈:2018-11-10
設計一個帶有註冊、登陸、後臺使用者管理的網站
使用(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.專案截圖
書寫不易,轉載請留言!