簡單用戶登錄系統源代碼——Servlet學習
剛剛開始學習前端,基本就是零基礎,學習方法就是看網上的教程,然后從網上找一些源代碼來練習。
下面的代碼是我先看了Servlet實例登錄(https://www.yiibai.com/servlet/example-of-login-form-in-servlet.html)中的例子,在此基礎上自己聯系了一下。
首先建一個項目,目錄結構如下:
下面的代碼是我先看了Servlet實例登錄(https://www.yiibai.com/servlet/example-of-login-form-in-servlet.html)中的例子,在此基礎上自己聯系了一下。
首先建一個項目,目錄結構如下:

首先是登錄功能實現,這個是完全按照Servlet實例登錄(https://www.yiibai.com/servlet/example-of-login-form-in-servlet.html)來寫的,登錄頁面的html代碼如下(可能有些細節不太一樣,做后面的一些功能的時候添加或者修改了一些東西。另外這里的css不是重點,因此沒有寫,可以自己添加):

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登錄</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script> </head> <body> <div style="text-align:center;pandding-top:12px;"> <form action="login" method="post"><!-- action是入口,方法是post,post比get安全,如果不寫method,默認get --> 用戶名:<input type="text" name="name" /> 密碼:<input type="password" name="password" /> <input type="submit" value="登錄" /> <input type="reset" value="重置" /> </form> </div> <button style="position: absolute;left: 60%; padding-top: 12px" onclick="window.location.href='logon.html'">注冊</button> </body> </html>

<a href="login.html">登錄</a> <a href="logout">退出</a> <a href="drop.html">注銷</a> <a href="profile">個人信息</a> <a href="changepwd.html">修改密碼</a> <hr>
接下來是登錄servlet代碼,這里采用的是post方法,post相對於get方法來說較安全,不會把用戶密碼顯示在地址欄中。
LoginServlet.java代碼如下:

package com.yiibai; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); String name = request.getParameter("name"); String password = request.getParameter("password"); try { if(LoginDao.doLogin(name, password)) {//判斷用戶名與密碼是否都是正確的 out.println("您已成功登陸系統!"); out.println("歡迎您,"+name); Cookie ck = new Cookie("name", URLEncoder.encode(name, "utf-8")); response.addCookie(ck); System.out.println("輸入的用戶名:" + ck.getValue()); System.out.println("登錄:" + ck.getValue()); }else { //用戶名或者密碼不正確的話就提示錯誤,並返回登錄頁面 out.println("<font style='color:red;'>用戶或密碼錯誤!</font>"); request.getRequestDispatcher("login.html").include(request, response); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); } }
連接數據庫的代碼,這里數據庫用的是MySQL,LoginDao.java代碼如下:

package com.yiibai; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class LoginDao { static Connection con = null; //連接數據庫 private static void getConnect() { try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost/test?useSSL=false&characterEncoding=utf8", "root", "password");//test是數據庫名,password填root的密碼 } catch (Exception e) { System.out.println(e); } } //用戶名與密碼是否均正確 public static boolean doLogin(String name, String password) throws SQLException { getConnect(); // 用戶名及密碼是否正確? boolean status = false; PreparedStatement ps = con.prepareStatement("SELECT * FROM servlet_user WHERE name=? AND passwd=?"); ps.setString(1, name); ps.setString(2, password); ResultSet rs = ps.executeQuery(); status = rs.next(); if(con!=null) con.close(); return status; } //用戶名是否已經存在 public static boolean hasName(String name) throws SQLException { getConnect(); boolean status = false; PreparedStatement ps = con.prepareStatement("SELECT * FROM servlet_user WHERE name=?"); ps.setString(1, name); ResultSet rs = ps.executeQuery(); status = rs.next(); if(con!=null) con.close(); return status; } //添加用戶信息 public static void insertInto(String name, String password, String email, String city) throws SQLException { getConnect(); PreparedStatement ps = con.prepareStatement("insert into servlet_user(name,passwd,email,city) value(?,?,?,?)"); ps.setString(1, name); ps.setString(2, password); ps.setString(3, email); ps.setString(4, city); ps.executeUpdate(); System.out.println("添加成功"); if(con!=null) con.close(); } //刪除用戶 public static void dropData(String name) throws SQLException { getConnect(); PreparedStatement ps = con.prepareStatement("delete from servlet_user where name=?"); ps.setString(1, name); ps.executeUpdate(); System.out.println("刪除成功!"); ps.close(); con.close(); } //讀取用戶信息 public static List<String> getData(String name) throws SQLException { List<String> data = null; getConnect(); PreparedStatement ps = con.prepareStatement("SELECT * FROM servlet_user WHERE name=?"); ps.setString(1, name); ResultSet rs = ps.executeQuery(); while(rs.next()) { data = new ArrayList<String>(); data.add(rs.getString("email")); data.add(rs.getString("city")); } rs.close(); ps.close(); con.close(); return data; } //修改用戶密碼 public static void changePassword(String name, String newPassword) throws SQLException { getConnect(); PreparedStatement ps = con.prepareStatement(" update servlet_user set passwd=? where name=?"); ps.setString(1, newPassword); ps.setString(2, name); ps.executeUpdate(); System.out.println("修改成功!"); ps.close(); con.close(); } public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub // System.out.println("但是會計核算: "+getData("d").size()); // insertInto("fxr","fxr","fxr@qq.com","海南"); // dropData("fxr"); // System.out.println("但是會計核算: "+hasName("d")); changePassword("d", "s"); } }
wel.html配置如下:
<display-name>LoginWithCookies</display-name> <welcome-file-list> <welcome-file>login.html</welcome-file> </welcome-file-list> <!-- 登錄Servlet --> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.yiibai.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
運行前要建表,用來存幾條用戶名跟密碼的數據以便使用,另外有兩個包不要忘記加build path,mysql-connector-java-8.0.11.jar還要放到tomcat的lib文件下,不然還是會報錯。
建表語句如下,這個也是從Servlet實例登錄(https://www.yiibai.com/servlet/example-of-login-form-in-servlet.html)來的:
DROP TABLE IF EXISTS `servlet_user`;
CREATE TABLE `servlet_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`passwd` varchar(32) NOT NULL DEFAULT '',
`email` varchar(32) DEFAULT NULL,
`city` varchar(24) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of servlet_user
-- ----------------------------
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('maxsu', '123456', 'maxsu@yiibai.com', '廣州');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('minsu', '233123', 'minsu@gmail.com', '海口');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('avguser', 'fdsa123', 'avguser@qq.com', '廣州');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('sumuser', 'fdsj124', 'sumuser@qq.com', '北京');
CREATE TABLE `servlet_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`passwd` varchar(32) NOT NULL DEFAULT '',
`email` varchar(32) DEFAULT NULL,
`city` varchar(24) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of servlet_user
-- ----------------------------
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('maxsu', '123456', 'maxsu@yiibai.com', '廣州');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('minsu', '233123', 'minsu@gmail.com', '海口');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('avguser', 'fdsa123', 'avguser@qq.com', '廣州');
INSERT INTO `servlet_user`(name,passwd,email,city) VALUES ('sumuser', 'fdsj124', 'sumuser@qq.com', '北京');
准備好這些之后啟動tomcat服務,輸入網址:http://localhost:8080/LoginWithCookies/login.html就可以看到下面這個界面:
輸入用戶名和密碼之后,就可以登陸了。
關於注冊及其他下次再寫!