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

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

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

  • 相关阅读:
    互联网: 让网站强制使用https
    非常好用的原型设计软件Balsamiq Mockups
    11.Mapreduce实例——MapReduce自定义输出格式
    01.Mapreduce实例——去重
    08.Mapreduce实例——倒排索引
    06.Mapreduce实例——Reduce端join
    05.Mapreduce实例——Map端join
    07.Mapreduce实例——二次排序
    02.Mapreduce实例——求平均值
    10.Mapreduce实例——MapReduce自定义输入格式小
  • 原文地址:https://www.cnblogs.com/liyuanba/p/servlet_login.html
Copyright © 2011-2022 走看看