完成用戶登錄注冊功能


一,需求分析

整體分析框架如下圖,需要的包也如下圖,它們放在src下

 

所有的需求如下圖所示,

1,我們創建一個名為day12的數據庫,其中創建了一個users表

2,在myeclipse中我們新建一個名為day12_user的web項目,

3,在src下我們創建了如下幾個java包:

                   com.itheima.damain    實體類包,          其中包括 User類

                   com.itheima.dao          接口包    ,        其中包括 UserDao接口

                   com.itheima.dao.impl   接口實現類包,    其中包括  UserDaoImpl實現類

                   com.itheima.service     接口包                 其中包括service接口

                   com.itheima.service.impl  接口實現類包    其中包括service接口實現類

                   com.itheima.utils           工具包            其中包括一般的關閉,連接數據庫的函數 

                   com.itheima.exception    異常包

                   com.itheima.web.servlet    servlet包       包括loginServlet和registerServlet

首先是主頁main.jsp

<body>
         <h1>歡迎來到主頁</h1>
       <form action="/day12_user/login.jsp"  method = "post">
              <input  type = "submit"   value = "登陸"   >
       </form>
       <form action="/day12_user/register.jsp"   method = "post">
             <input  type = "submit"   value= "注冊">
       </form>
</body>

 

對於登陸板塊,選擇登陸按鈕,進入login.jsp

 

<body>
      <form action="/day12_user/demo1"   method= "post">
           用戶名:<input   type = "text"   name = "username"  ><br>
            密碼:<input   type = "password"   name = "password"   ><br>
              <input type = "submit" value = "登陸"><br>
      </form>
</body>

 

web.xml如下圖所示

<servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>com.itheima.web.servlet.loginServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>registerServlet</servlet-name>
    <servlet-class>com.itheima.web.servlet.registerServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/demo1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>registerServlet</servlet-name>
    <url-pattern>/demo2</url-pattern>
  </servlet-mapping>    

關於user用戶的板塊,com.itheima.damain    實體類包,          其中包括 User類,源碼如下文所示

//實體bean,用於封裝數據
public class User {
      private    int id;
      private    String username;
      private    String password;
      private    String email;
      private    Date birthday;
    
      public User(String username, String password, String email, Date birthday) {
        super();
        this.username = username;
        this.password = password;
        this.email = email;
        this.birthday = birthday;
    }    
    public User() {
        // TODO Auto-generated constructor stub
    }
    public int getId() {
        return id;
    }
    public String getUsername() {
        return username;
    }    
    public String getPassword() {
        return password;
    }
    public String getEmail() {
        return email;
    }
    public Date getBirthday() {
        return birthday;
    }    
}

com.itheima.web.servlet    servlet包       包括loginServlet和registerServlet

loginservlet的源碼如下圖所示,只寫一個完整源碼,其他的servlet類似

package com.itheima.web.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itheima.damain.User;
import com.itheima.service.impl.UserService;
import com.itheima.service.impl.UserServiceImpl;

@SuppressWarnings("serial")
public class loginServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
       //設置編碼模式
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //獲取表單數據, 並將表單數據存入到login函數中 String name = request.getParameter("username"); String pwd = request.getParameter("password"); //處理業務邏輯,實現login 方法,里面涉及到finduser方法 UserService us = new UserServiceImpl();// User u = us.login(name,pwd); //分發轉向 if(u!=null){ out.write("<br/>歡迎你,登陸成功,3秒跳轉首頁"); request.setAttribute("u", u.getUsername()); request.getRequestDispatcher("/success.jsp").forward(request, response); }else{ //實現刷新功能 out.write("用戶名或密碼錯誤,請重新登陸"); response.setHeader("refresh", "1;url=/day12_user/login.jsp"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

上面是登陸成功后的主頁,其源碼為success.jsp

<body>
   <h1>這是主頁</h1>
      歡迎  ${u} ,來到主頁      
</body>

對於loginservlet中,有一句代碼進行解析

//處理業務邏輯,實現login 方法,里面涉及到finduser方法

 UserService us = new UserServiceImpl(); 這句是創建父接口指向子類對象 User u = us.login(name,pwd); 


com.itheima.service     接口包                 其中包括Userservice接口,
com.itheima.service.impl  接口實現類包              其中包括UserserviceImpl接口實現類
userService源代碼如下
public interface UserService {
     //根據用戶和密碼實現登陸
      public   User  login(String name,String pwd);
      //注冊
      public  int register(User user);
}
 
        
UserServiceImpl實現類源碼如下:
package com.itheima.service.impl;

import com.itheima.damain.User;
import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;

public class UserServiceImpl  implements UserService{  
      // 實現用戶登錄的方法
    public User login(String name,String pwd) {
        // TODO Auto-generated method stub
     //用實現類來指向父類的接口
         UserDao dao = new  UserDaoImpl();
         return   dao.finduser(name,pwd);
    }
    public int register(User user) {
        // TODO Auto-generated method stub
         UserDao dao = new  UserDaoImpl();
         return  dao.adduser(user);
    }
}
UserDao接口源碼如下
public interface UserDao {    
    // 查找用戶
     public  User finduser(String name,String password);
    // 添加用戶
     public  int  adduser(User user);
}
UserDaoImpl源碼如下:
package com.itheima.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;

import com.itheima.damain.User;
import com.itheima.dao.UserDao;
import com.itheima.utils.DBUtils;

/**
 * 數據訪問層對於方法的實現
 * @author zjf-pc
 *
 */
public class UserDaoImpl  implements UserDao{
/**
 * 查找用戶的實現方法
 */
    public User finduser(String name,String password) {
        // TODO Auto-generated method stub
       Connection conn = null;
       PreparedStatement ps = null;
       ResultSet rs = null;
       User u = null;
         try {
            conn = DBUtils.getConnection();
            //找到與瀏覽器中getConnection輸入用戶名和密碼一致的sql語句,並保存在rs中
            String sql = "select * from users where username= ? and password = ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,name);
            ps.setString(2, password);
            //得到sql中的結果
            rs = ps.executeQuery();
            while(rs.next())
            {
                //新創建一個user對象,將rs中的屬性均賦值給user對象
                //如果之前的rs內容為空的話,那么此時返回的u也為null
                u = new User();
                u.setId(rs.getInt(1));
                u.setUsername(rs.getString(2));
                u.setPassword(rs.getString(3));
                u.setEmail(rs.getString(4));
                u.setBirthday(rs.getDate(5));
            }
        } catch (Exception e) {
          e.printStackTrace();
        }finally{
         DBUtils.closeAll(rs, ps, conn);
        }     
        return u;
    }
/**
 * 添加用戶的實現方法
 */
    public int adduser(User user) {
        // TODO Auto-generated method stub
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int i =0;
        try{
            conn = DBUtils.getConnection();
            //向數據庫庫表中插入一行語句如下
            String sql = "insert  into  users(username,password,email,birthday)values(?,?,?,?);";
            ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getEmail());
            SimpleDateFormat sdf = new  SimpleDateFormat("yyyy-MM-DD");
            ps.setString(4, sdf.format(user.getBirthday()));
           //將數據更新到表中
            i =  ps.executeUpdate();
            } catch (Exception e) {
            e.printStackTrace();
            }finally{
             DBUtils.closeAll(rs, ps, conn);
            }
             return i;
    }
    public UserDaoImpl() {
        super();
        // TODO Auto-generated constructor stub
    }    
}

 對於用戶注冊板塊,register.jsp如下圖所示

<body>
      <h1>用戶注冊頁面</h1>
      <form action="/day12_user/demo2"  method = "post">
        用戶名:<input  type = "text"  name = "username"/><br>
        密碼: <input  type = "password" name = "password"/><br>
        郵箱:<input type = "text" name = "email"/><br>
        出生日期:<input type = "text" name = "birthday"/><br>
        <input type = "submit"  value = "注冊"><br>
      </form>
</body>

//web.xml中對應的是這個,那么相應的registerServlet會在下文看到
<servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/demo2</url-pattern> </servlet-mapping>
 
registerServlet源碼如下文所示
public class registerServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         //設置編碼模式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        int i =0;
        //獲取表單數據
               String name =  request.getParameter("username");
               String pwd =  request.getParameter("password");
               String email =  request.getParameter("email");
               String birthday =  request.getParameter("birthday");
               SimpleDateFormat sdf = new  SimpleDateFormat("yyyy-MM-DD"); 
            try {
              //將獲取到的表單數據封裝到u中
              User   u = new User(name,pwd,email, sdf.parse(birthday));
              UserService us = new  UserServiceImpl();//這在上文有解析
             //對封裝在u中的數據進行注冊,使其記錄在數據庫表中
              i = us.register(u);//這也在上文有解析
              if(i!=0)
              {
                 out.write("注冊成功,信息如下:<br>");
                 out.write("<br>姓名:"+u.getUsername());
                 out.write("<br>郵箱:"+u.getEmail());
                 out.write("<br>出生日期:"+sdf.format(u.getBirthday()));    
               }else {
                 out.write("注冊信息不成功");
                }  
            } catch (Exception e) {
               e.printStackTrace();
            }
        
        //處理業務邏輯
        //分發轉向
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doGet(request, response);
      }
}




免責聲明!

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



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