简单用户登录注册系统源代码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就可以看到下面这个界面:

输入用户名和密码之后,就可以登陆了。

关于注册及其他下次再写!

 

 

 

 

 

posted @ 2018-11-01 17:51  迷糊狐狸  阅读(4999)  评论(0编辑  收藏  举报