zoukankan      html  css  js  c++  java
  • SERvet的表单

    首先要建立好数据库。

    Servlet简单实现的注册登录功能

    好了,先写好两个静态页面,分别负责登录和注册。

    代码清单1:login.jsp(登录页面)

    <%--
        Document   : login
        Created on : 2013-8-29, 17:14:30
        Author     : Barudisshu
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <title>登录</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <body>
            <div>
                <form action="login.do" method="post">
                    <table>
                        <tr>
                            <td><label for="user">用户名:</label></td>
                            <td><input type="text" id="user" name="user" value=""></td>
                        </tr>
                        <tr>
                            <td><label for="password">密码:</label></td>
                            <td><input type="password" id="password" name="password" value=""></td>
                        </tr>
                        <tr>
                            <td colspan="2"><input type="submit" name="submit" value="登录"></td>
                        </tr>
                    </table>
                </form>
            </div>
        </body>
    </html>
    

    代码清单2:register.jsp (注册页面)

    <%--
        Document   : register
        Created on : 2013-8-29, 17:14:50
        Author     : Barudisshu
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>注册</title>
        </head>
        <body>
            <div>
                <form action="register.do" method="post">
                    <table>
                        <tr>
                            <td><label for="user">用户名:</label></td>
                            <td><input type="text" id="user" name="user" value=""></td>
                        </tr>
                        <tr>
                            <td><label for="password">密码:</label></td>
                            <td><input type="password" id="password" name="password" value=""></td>
                        </tr>
                        <tr>
                            <td><label for="resure">确认密码:</label></td>
                            <td><input type="password" id="resure" name="resure" value=""></td>
                        </tr>
                        <tr>
                            <td><label for="email">邮箱地址:</label></td>
                            <td><input type="email" id="password" name="email" value=""></td>
                        </tr>
                        <tr>
                            <td colspan="2"><input type="submit" name="submit" value="注册"></td>
                        </tr>
                    </table>
                </form>
            </div>
        </body>
    </html>
    

    建立数据库模型,主要实现数据库连接建立、执行查询、释放连接、判断等操作。

    代码清单3:DataProvider.java (数据模型)

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. import java.util.logging.Level;
    7. import java.util.logging.Logger;
    8.  
    9. /**
    10. *
    11. * @author Barudisshu
    12. */
    13. public class DataProvider {
    14.  
    15. //指定驱动名
    16. protected static String driver = "com.mysql.jdbc.Driver";
    17. //指定访问的URL
    18. protected static String url = "jdbc:mysql://localhost:3306/gossip";
    19. //MySQL用户名
    20. protected static String user = "root";
    21. //MySQL密码
    22. protected static String password = "***";
    23. //初始Connection
    24. protected static Connection connection = null;
    25.  
    26. //建立连接
    27. public static Connection getConnection() {
    28. try {
    29. Class.forName(driver);
    30. connection = DriverManager.getConnection(url, user, password);
    31. return connection;
    32. } catch (ClassNotFoundException | SQLException e) {
    33. return null;
    34. }
    35. }
    36.  
    37. //获取结果集
    38. public static ResultSet getResultSet(String sql) {
    39. Statement statement;
    40. ResultSet resultSet = null;
    41. Connection conn = getConnection();
    42. if (conn != null) {
    43. System.out.println("连接成功!");
    44. try {
    45. statement = conn.createStatement();
    46. resultSet = statement.executeQuery(sql);
    47. } catch (Exception e) {
    48. }
    49. return resultSet;
    50. } else {
    51. return null;
    52. }
    53. }
    54.  
    55. //判断结果集是否为空
    56. public static boolean isResultSetNull(String sql) {
    57. int count = 0;
    58. ResultSet resultSet = getResultSet(sql);
    59. try {
    60. while (resultSet.next()) {
    61. count += 1;
    62. }
    63. } catch (SQLException ex) {
    64. Logger.getLogger(DataProvider.class.getName()).log(Level.SEVERE, null, ex);
    65. }
    66. if (count == 0) {
    67. return true;
    68. } else {
    69. return false;
    70. }
    71. }
    72.  
    73. //是否执行
    74. public static boolean execute(String sql) {
    75. boolean success;
    76. Statement statement;
    77. Connection conn = getConnection();
    78. if (conn != null) {
    79. try {
    80. statement = conn.createStatement();
    81. success = statement.execute(sql);
    82. } catch (Exception e) {
    83. success = false;
    84. }
    85. } else {
    86. success = false;
    87. }
    88. return success;
    89. }
    90.  
    91. //释放连接
    92. public static void releaseConnection() {
    93. try {
    94. if (connection != null) {
    95. connection.close();
    96. }
    97. } catch (Exception e) {
    98. }
    99. }
    100. }

    创建注册验证Servlet,将取得请求参数、验证请求参数,业务跳转。逻辑业务部分。

    代码清单4:Register.java (注册)

    1. import java.io.IOException;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import javax.servlet.ServletException;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import net.individuals.mysql.data.DataProvider;
    9.  
    10. /**
    11. *
    12. * @author Barudisshu
    13. */
    14. public class RegisterServlet extends HttpServlet {
    15.  
    16. private final String SUCCESS_VIEW = "success.view";
    17. private final String ERROR_VIEW = "error.view";
    18.  
    19. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    20. throws ServletException, IOException {
    21. response.setContentType("text/html;charset=UTF-8");
    22. request.setCharacterEncoding("utf-8");
    23. //获取请求参数
    24. String email = request.getParameter("email");
    25. String user = request.getParameter("user");
    26. String password = request.getParameter("password");
    27. String confirmedPasswd = request.getParameter("resure");
    28. List<String> errors = new ArrayList<>();
    29. if (isInvalidEmail(email)) {
    30. errors.add("未填写邮件或邮件格式不正确");
    31. }
    32. if (isInvalidUsername(user)) {
    33. errors.add("用户名为空或已存在");
    34. }
    35. if (isInvalidPassword(password, confirmedPasswd)) {
    36. errors.add("请确认密码符合格式并再次确认密码");
    37. }
    38. String resultPage = ERROR_VIEW;
    39. if (!errors.isEmpty()) {
    40. request.setAttribute("errors", errors);
    41. } else {
    42. resultPage = SUCCESS_VIEW;
    43. createUserData(email, user, password);
    44. }
    45.  
    46. request.getRequestDispatcher(resultPage).forward(request, response);
    47. }
    48.  
    49. //判断邮箱输入格式是否正确
    50. private boolean isInvalidEmail(String email) {
    51. return email == null || !email.matches("^[_a-z0-9-]+([.]"
    52. + "[_a-z0-9-]+)*@[a-z0-9-]+([.][a-z0-9-]+)*$");
    53. }
    54.  
    55. //判断是否存在该用户
    56. private boolean isInvalidUsername(String username) {
    57. return !DataProvider.isResultSetNull("select * from gossip.userinfo where username = '" + username + "'");
    58. }
    59.  
    60. //判断密码是否有效
    61. private boolean isInvalidPassword(String password, String confirmedPasswd) {
    62. return password == null
    63. || password.length() < 6
    64. || password.length() > 16
    65. || !password.equals(confirmedPasswd);
    66. }
    67.  
    68. //创建用户资料并写入数据库
    69. private void createUserData(String email, String username, String password) {
    70. DataProvider.execute("insert into gossip.userinfo(email,username,password)"
    71. + " values ('" + email + "','" + username + "','" + password + "')");
    72. }
    73.  
    74. @Override
    75. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    76. throws ServletException, IOException {
    77. processRequest(request, response);
    78. }
    79.  
    80. @Override
    81. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    82. throws ServletException, IOException {
    83. processRequest(request, response);
    84. }
    85.  
    86. @Override
    87. public String getServletInfo() {
    88. return "Short description";
    89. }// </editor-fold>
    90. }

    下面分别建立注册成功与失败的视图。

    代码清单5:Error.java (注册失败)

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     *
     * @author Barudisshu
     */
    public class Error extends HttpServlet {
    
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                /* TODO output your page here. You may use following sample code. */
                out.println("<!DOCTYPE html>");
                out.println("<html>");
                out.println("<head>");
                out.println("<meta charset="utf-8">");
                out.println("<title>新增会员失败</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>新增会员失败</h1>");
                out.println("<ul style='color:red;'>");
                List<String> errors = (List<String>) request.getAttribute("errors");
                for (String error : errors) {
                    out.println("<li>" + error + "</li>");
                }
                out.println("</ul>");
                out.println("<a href='register.html'>返回注册页面</a>");
                out.println("</body>");
                out.println("</html>");
            } finally {
                out.close();
            }
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    }
    

    代码清单6:Success.java (注册成功)

    1. import java.io.IOException;
    2. import java.io.PrintWriter;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7.  
    8. /**
    9. *
    10. * @author Barudisshu
    11. */
    12. public class Success extends HttpServlet {
    13.  
    14. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    15. throws ServletException, IOException {
    16. response.setContentType("text/html;charset=UTF-8");
    17. try (PrintWriter out = response.getWriter()) {
    18. /* TODO output your page here. You may use following sample code. */
    19. out.println("<!DOCTYPE html>");
    20. out.println("<html>");
    21. out.println("<head>");
    22. out.println("<meta charset="utf-8">");
    23. out.println("<title>新增会员成功</title>");
    24. out.println("</head>");
    25. out.println("<body>");
    26. out.println("<h1>会员" + request.getParameter("user") + "注册成功</h1>");
    27. out.println("<a href="login.jsp">回首页登录");
    28. out.println("</body>");
    29. out.println("</html>");
    30. }
    31. }
    32.  
    33. @Override
    34. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    35. throws ServletException, IOException {
    36. processRequest(request, response);
    37. }
    38.  
    39. @Override
    40. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    41. throws ServletException, IOException {
    42. processRequest(request, response);
    43. }
    44. }

    注册成功后就可以登录了,登录需要进行相关验证操作。

    代码清单7:Login.java (验证用户登录)

    1. import java.io.IOException;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import net.individuals.mysql.data.DataProvider;
    7.  
    8. /**
    9. *
    10. * @author Barudisshu
    11. */
    12. public class LoginServlet extends HttpServlet {
    13.  
    14. private final String SUCCESS_VIEW = "member.view";
    15. private final String ERROR_VIEW = "login.jsp";
    16.  
    17. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    18. throws ServletException, IOException {
    19. response.setContentType("text/html;charset=UTF-8");
    20. request.setCharacterEncoding("utf-8");
    21. String user = request.getParameter("user");
    22. String password = request.getParameter("password");
    23. if(checkLogin(user, password)){
    24. request.getRequestDispatcher(SUCCESS_VIEW).forward(request, response);
    25. }else{
    26. response.sendRedirect(ERROR_VIEW);
    27. }
    28.  
    29. }
    30.  
    31. //读取数据库,验证登录
    32. private boolean checkLogin(String username, String password) {
    33. if (username != null && password != null) {
    34. return !DataProvider.isResultSetNull("select * from gossip.userinfo "
    35. + "where username = '" + username + "' and password = '" + password + "'");
    36. }
    37. return false;
    38. }
    39.  
    40. @Override
    41. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    42. throws ServletException, IOException {
    43. processRequest(request, response);
    44. }
    45.  
    46. @Override
    47. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    48. throws ServletException, IOException {
    49. processRequest(request, response);
    50. }
    51. }

    验证失败,则从新登录,通过sendRedirect()跳转到登录页面;验证成功,则进行下一步操作。

    代码清单8:Member.java (登录成功)

    1. import java.io.IOException;
    2. import java.io.PrintWriter;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7.  
    8. /**
    9. *
    10. * @author Barudisshu
    11. */
    12. public class Member extends HttpServlet {
    13.  
    14. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    15. throws ServletException, IOException {
    16. response.setContentType("text/html;charset=UTF-8");
    17. PrintWriter out = response.getWriter();
    18. try {
    19. /* TODO output your page here. You may use following sample code. */
    20. out.println("<!DOCTYPE html>");
    21. out.println("<html>");
    22. out.println("<head>");
    23. out.println("<meta charset="utf-8">");
    24. out.println("<title>会员登录成功页面</title>");
    25. out.println("</head>");
    26. out.println("<body>");
    27. out.println("<h1>会员 " + request.getParameter("user") + " 你好</h1>");
    28. out.println("</body>");
    29. out.println("</html>");
    30. } finally {
    31. out.close();
    32. }
    33. }
    34.  
    35. @Override
    36. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    37. throws ServletException, IOException {
    38. processRequest(request, response);
    39. }
    40.  
    41. @Override
    42. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    43. throws ServletException, IOException {
    44. processRequest(request, response);
    45. }
    46. }

    代码清单9:web.xml (标准依赖部署文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <servlet>
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>net.individuals.web.servlet.LoginServlet</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>RegisterServlet</servlet-name>
            <servlet-class>net.individuals.web.servlet.RegisterServlet</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>Error</servlet-name>
            <servlet-class>net.individuals.web.servlet.Error</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>Success</servlet-name>
            <servlet-class>net.individuals.web.servlet.Success</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>Member</servlet-name>
            <servlet-class>net.individuals.web.servlet.Member</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>
            <url-pattern>/login.do</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>RegisterServlet</servlet-name>
            <url-pattern>/register.do</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Error</servlet-name>
            <url-pattern>/error.view</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Success</servlet-name>
            <url-pattern>/success.view</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Member</servlet-name>
            <url-pattern>/member.view</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
    </web-app>
  • 相关阅读:
    CF891E Lust
    Comet OJ 2019 夏季欢乐赛题解
    CF1098E Fedya the Potter
    CF1063F String Journey
    P4218 [CTSC2010]珠宝商
    AGC028 E
    51Nod 1584 加权约数和
    51Nod 1769 Clarke and math2
    Educational Codeforces Round 67
    斯特林数学习笔记
  • 原文地址:https://www.cnblogs.com/yangshuyuan1009/p/10193489.html
Copyright © 2011-2022 走看看