zoukankan      html  css  js  c++  java
  • Servlet开发(2)

     

    Jsp&Servlet用户登录功能实现(采用MVC模式)

    我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!)。

    数据库:mysql   

    驱动包为 mysql-connector-java-3.1.12-bin.jar(下载链接:链接: https://pan.baidu.com/s/1_MlQONkdr5l1nKtO8OZCPQ 提取码: 442t)

    驱动包放置在 HeadFirstJspServlet05/com.java1234.model/WeebContent/WEB-INF/lib下

    开发工具:eclipse   

    客户端:Chrome浏览器

    系统架构:  

    ①在com.java1234.model下是User模型;

    在User类中 属性有id,userName,password;

    主要作用是建立一个基础用户(id,用户名,密码(没有涉及加密,以后会更新,打算采用MD5加密))的模型。

    代码如下:

     1 package com.java1234.model;
     2 public class User {
     3     private int id;
     4     private String userName;
     5     private String password;
     6     
     7     public User(String userName, String password) {
     8         super();
     9         this.userName = userName;
    10         this.password = password;
    11     }
    12 
    13     public User() {
    14         super();
    15         // TODO Auto-generated constructor stub
    16     }
    17 
    18     public String getUserName() {
    19         return userName;
    20     }
    21     
    22     public void setUserName(String userName) {
    23         this.userName = userName;
    24     }
    25     
    26     public String getPassword() {
    27         return password;
    28     }
    29     
    30     public void setPassword(String password) {
    31         this.password = password;
    32     }
    33     
    34     public int getId() {
    35         return id;
    36     }
    37     
    38     public void setId(int id) {
    39         this.id = id;
    40     }
    41 }
    User.java

    ②在com.java1234.util下是建立的DbUtil模型,主要是连接数据库用的。

    这部分代码需要加强记忆;

    其实细分也很简单的,主要存在的知识要点

    数据库链接地址dbUrl="jdbc:mysql://localhost:3306/db_jsp"(数据库名字);

    数据库驱动:jdbcName="com.mysql.jdbc.Driver";

    数据库名称:dbUserName="root";

    数据库密码:dbpassword="123456";

    数据库连接getcon()方法,数据库关闭closecon()方法;

     代码如下:

    package com.java1234.util;
    import java.sql.Connection;
    import java.sql.DriverManager;
    public class DbUtil {
        private String dbUrl="jdbc:mysql://localhost:3306/db_jsp";//数据库链接地址
        private String dbUserName="root";//数据库用户名称
        private String dbPassword="123456";//数据库密码
        private String jdbcName="com.mysql.jdbc.Driver";//jdbc驱动
        public Connection getcon() throws Exception{
            Class.forName(jdbcName);//反射实例化jdbc驱动包
            Connection con
            =DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
            return con;
        }
        public void closeCon(Connection con) throws Exception{
            if(con !=null){
                con.close();
            }
        }
        public static void main(String[] args) {
            DbUtil dbutil=new DbUtil();
           try {
            Connection con=dbutil.getcon();
            System.out.println("数据库连接成功!");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
           
        }
    }
    DbUtil..java

    数据库表为:

    t_user :

    ③在com.java1234.dao下建立的Dao模型,主要是对User模型进行操作。

    主要操作login()方法(主要是获取数据库数据String sql=”SELECT * from t_user where userName =? and password=?”; )   

    -----> PrepareStatement pstmt = prepareStatement(sql)   

    ----> 对第1个参数和第2个参数进行设置  

    pstmt.setString(1, user.getUserName()); pstmt.setString(2, user.getPassword());

    ----->执行数据库查询指令 ResultSet rs=pstmt.executeQuery();

    代码如下:

     1 package com.java1234.dao;
     2 import java.sql.Connection;
     3 import java.sql.PreparedStatement;
     4 import java.sql.ResultSet;
     5 import com.java1234.model.User;
     6 public class Userdao {
     7     public User login(Connection con,User user) throws Exception{
     8         User resultUser=null;
     9         String sql="SELECT * from t_user where userName=? and password=? ";
    10         PreparedStatement pstmt=con.prepareStatement(sql);
    11         pstmt.setString(1, user.getUserName());
    12         pstmt.setString(2, user.getPassword());
    13         ResultSet rs=pstmt.executeQuery();
    14         if(rs.next()){
    15             resultUser=new User();
    16             resultUser.setUserName(rs.getString("userName"));
    17             resultUser.setPassword(rs.getString("passWord"));
    18         }
    19         return resultUser;
    20     }
    21 }
    Userdao.java

    ④com.java1234.web下的LoginServlet.java 进行后端处理,主要将前端页面的数据传到后端。(还有验证功能,对数据库中不存在的数据会进行判错,error 并且在前端页面输出

    代码如下:

     1 package com.java1234.web;
     2 import java.io.IOException;
     3 import java.sql.Connection;
     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 javax.servlet.http.HttpSession;
     9 
    10 import com.java1234.dao.Userdao;
    11 import com.java1234.model.User;
    12 import com.java1234.util.DbUtil;
    13 
    14 public class LoginServlet extends HttpServlet{
    15     private static final long serialVersionUID = 1L;
    16     DbUtil dbutil=new DbUtil();
    17     Userdao userdao=new Userdao();
    18     @Override
    19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    20         // TODO Auto-generated method stub
    21         this.doPost(request,response);
    22     }
    23 
    24     @Override
    25     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    26         // TODO Auto-generated method stub
    27         String  userName=request.getParameter("userName");
    28         String  password=request.getParameter("password");
    29         Connection con=null;
    30         try {
    31             User user=new User(userName,password);
    32             con=dbutil.getcon();
    33             User currentuser = userdao.login(con,user);
    34             if(currentuser == null){
    35                 request.setAttribute("error", "用户名或者密码错误");
    36                 request.setAttribute("userName", userName);
    37                 request.setAttribute("password", password);
    38                 request.getRequestDispatcher("Login.jsp").forward(request, response);
    39             }else{
    40                 HttpSession session=request.getSession(); 
    41                 session.setAttribute("currentuser", currentuser);
    42                 response.sendRedirect("main.jsp");
    43             }
    44         } catch (Exception e) {
    45             // TODO Auto-generated catch block
    46             e.printStackTrace();
    47             }
    48         }
    49 }
    LoginServlet.java

    涉及技术要点:

    RequestDispatcher接口 服务器跳转... 参考博客(博客写的确实好!)

    https://www.cnblogs.com/lulipro/p/7471987.html

    ⑤jsp页面,我们可以看到是一个简单的用户登录功能的实现。

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <title>target-redirect</title>
     8 <script type="text/javascript">
     9     function resetInfo(){
    10         document.getElementById("userName").value="";//document操纵html文档内容。
    11         document.getElementById("password").value="";
    12     }
    13 </script>
    14 </head>
    15 <body>
    16     <form action="login" method="post">
    17         <h4>用户登录</h4>
    18         <table>
    19             <tr>
    20                 <td>用户名:</td>
    21                 <td><input type="text" id="userName" name="userName" value="${userName}"/></td>
    22             </tr>
    23             <tr>
    24                 <td>密码:</td>
    25                 <td><input type="password" id="password" name="password" value="${password}"></td>
    26             </tr>
    27             <tr>
    28                 <td><input type="submit" value="登录"/></td>
    29                 <td colspan="2"><input type="button" value="重置" onclick="resetInfo()"/> 
    30                 <font color="red">${error}</font>
    31                 </td>
    32                 
    33             </tr>
    34         </table>
    35     </form>
    36 </body>
    37 </html>
    Login.jsp

    涉及的技术点:

    1. javascript脚本: document.getElementById(" ").     

      每个载入浏览器的 HTML 文档都会成为 Document 对象。

      Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

       

    2.  value="${userName}";el表达式

    界面:

    登录界面:

    报错处理:

    重置:

    登陆成功:

    小 项 目 就 此 ok!

  • 相关阅读:
    [BJOI2006]狼抓兔子
    [HNOI2016]最小公倍数
    hihocoder 1419 重复旋律4
    [NOI2015]品酒大会
    [SDOI2016]生成魔咒
    [ZJOI2009]狼和羊的故事
    BZOJ4361 isn
    [SDOI2009]虔诚的墓主人
    BZOJ 3329 Xorequ
    [ZJOI2013]丽洁体
  • 原文地址:https://www.cnblogs.com/zyxsblogs/p/9690638.html
Copyright © 2011-2022 走看看