簡單用戶登錄注冊系統源代碼1——Servlet學習


簡單用戶登錄系統源代碼——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)來寫的,登錄頁面的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>
login.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>
link.html

接下來是登錄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);
    }
}
LoginServlet.java

連接數據庫的代碼,這里數據庫用的是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");

    }

}
LoginDao.java

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', '北京');

 准備好這些之后啟動tomcat服務,輸入網址:http://localhost:8080/LoginWithCookies/login.html就可以看到下面這個界面:

輸入用戶名和密碼之后,就可以登陸了。

關於注冊及其他下次再寫!

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM