servlet实现用户登录
最近在做課程設計,之前有人問我用戶登錄的實現,剛又有同學問到,于是我決定還把這個問題的實現寫一下吧,免得要一遍一遍的去講……原諒我的懶惰=_=
===========================================
實現原理:
前提:用戶表中只有三個字段:id、username、password;
用戶輸入用戶名、密碼和驗證碼,然后點擊登陸,會以“post”方式將該表單提交給后臺驗證登錄的servlet,servlet會得到用戶輸入的用戶名、密碼(驗證碼的使用我會在其他博客中給出,今天先不討論),然后根據用戶名到數據庫中查詢出該用戶名下對應的信息(在這里就是密碼),如果該用戶名不存在則直接提示錯誤“用戶名不存在”;如果用戶名存在,則將用戶輸入的密碼與在數據庫中查到的密碼進行比較,不同則提示用戶“密碼錯誤”,密碼相同則再進行一次比較,如果該用戶是管理員則跳轉到管理員相應頁面,如果該用戶是普通用戶啊則跳轉到登錄成功頁面;
java實現圖片驗證碼鏈接如下:
http://blog.csdn.net/lmb55/article/details/46295355
===========================================
具體實現:(基于整體系統的實現)
User.java(一個存放用戶信息的javaBean)
UserDao.java(對用戶進行操作的接口類,其中定義了一個login(String userName)方法,功能:通過用戶名來查詢出用戶的所有信息,返回一個User用戶對象)
UserDaoImpl.java(UserDao接口的實現類)
SystemManager.java(實現系統功能的接口類,在這里是實現了系統的登錄功能,其中定義了一個login(String userName, String passWord)方法,功能:調用UserDaoImpl.java中的login方法通過username獲得的User對象,然后與密碼進行比較,驗證登陸情況)
SystemManagerImpl.java(SystemManager接口的實現類)
LoginServlet.java(驗證登錄的servlet,功能:獲取前臺數據,根據用戶填寫的數據進行相應的跳轉)
login.jsp(登陸界面)
DBUtil.java(創建數據庫連接的工具類,當需要創建數據庫連接時,只需要調用該類的getConnection()方法即可)
dbconfig.properties(屬性文件,數據庫連接中需要用到的一些屬性常量在這里給出)
在這個過程中很重要的一點是創建數據庫連接,在實現一個系統的過程中,我們要用到很多次數據庫連接,每用到一次就創建一次非常麻煩,所以我就把數據庫連接單獨分離出來,要用到的時候只需要調用相應類的getConnection()方法即可,有關數據庫連接的具體實現,我會在另外一篇博客中給出,這里就直接使用了:
鏈接如下:
http://blog.csdn.net/lmb55/article/details/46295325
===========================================
代碼如下:
User.java
package com.ymw.domain;public class User {private Integer id;private String name;private String passWord;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return passWord;}public void setPassword(String passWord) {this.passWord = passWord;} }UserDao.java
package com.ymw.dao;import com.ymw.domain.User;public interface UserDao {public User login(String userName); }UserDaoImpl.java
package com.ymw.dao;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.ymw.domain.User; import com.ymw.exception.DataBaseException; import com.ymw.util.DBUtil;public class UserDaoImpl implements UserDao {@Overridepublic User login(String userName) {Connection connection = DBUtil.getConnection();PreparedStatement preparedStatement = null;ResultSet resultSet = null;User user = null;try {String sql = "select * from users where name=?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, userName);resultSet = preparedStatement.executeQuery();while (resultSet.next()) {user = new User();user.setId(resultSet.getInt("id"));user.setName(userName);user.setPassword(resultSet.getString("passWord"));}} catch (SQLException e) {e.printStackTrace();throw new DataBaseException();} catch (Exception e) {e.printStackTrace();} finally {}return user;} }SystemManager.java
package com.ymw.service;import com.ymw.domain.User;public interface SystemManager {public User login(String userName, String passWord);}SystemManagerImpl.java
package com.ymw.service;import com.ymw.dao.UserDao; import com.ymw.dao.UserDaoImpl; import com.ymw.domain.User; import com.ymw.exception.UserNotFoundException;public class SystemManagerImpl implements SystemManager {private UserDao userDao=new UserDaoImpl();@Overridepublic User login(String userName, String passWord) {User user = userDao.login(userName);if(user != null){if(user.getPassword().equals(passWord)){// 密碼正確return user;} else {// 密碼錯誤throw new UserNotFoundException("500");}} else {//用戶為空throw new UserNotFoundException("404");}} }LoginServlet.java
package com.ymw.web.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.ymw.domain.User; import com.ymw.exception.DataBaseException; import com.ymw.exception.UserNotFoundException; import com.ymw.service.SystemManager; import com.ymw.service.SystemManagerImpl;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//解決亂碼問題String userName = request.getParameter("userName");String passWord = request.getParameter("passWord");SystemManager systemManager = new SystemManagerImpl();try {User user = systemManager.login(userName, passWord);//把用戶的信息放到session中存起來HttpSession session = request.getSession();session.setAttribute("user", user);if(user.getName().equals("admin")){//如果是管理員登陸,則跳到管理員相應界面response.sendRedirect("admin.jsp");}else{//如果是普通用戶則跳轉到登錄成功頁面response.sendRedirect("login_success.jsp");}} catch (UserNotFoundException e) { String message="";if ("500".equals(e.getMessage())) {message = "密碼錯誤";} else {message = "用戶不存在";}//如果出現錯誤,則返回到登陸頁面,并將用戶輸入的錯誤信息帶回request.setAttribute("message", message);request.setAttribute("userName", userName);request.setAttribute("passWord", passWord);request.getRequestDispatcher("login.jsp").forward(request, response);} catch (DataBaseException e) {e.printStackTrace();request.getRequestDispatcher("dataBase.jsp").forward(request,response);} catch (Exception e) {e.printStackTrace();request.getRequestDispatcher("error.jsp").forward(request, response);}} }login.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>用戶登錄</title>function checkForm(){return true; } </script></head><body> <div><div><div><h1>用戶登錄</h1><form id="loginForm" method="post" action="login.do" onsubmit="return checkForm()"><table> ${message }<tr><td用戶名:</td> <td><input class="text" type="text" name="userName" value="${userName }" onfocus="FocusItem(this)" onblur="CheckItem(this);" /><span></span></td></tr><tr><td登錄密碼:</td><td><input class="text" type="password" id="passWord" name="passWord" value="${passWord }" onfocus="FocusItem(this)" onblur="CheckItem(this);" /><span></span></td></tr><tr><td>驗證碼:</td><td><input type="text" name="veryCode" onfocus="FocusItem(this)" onblur="CheckItem(this);" /><img src="" /><span></span></td></tr><tr><td></td><td><input type="submit" name="submit" value="立即登錄" /></label></td></tr></table></form> </div></div> </body> </html>DBUtil.java
package com.ymw.util;import java.sql.Connection; import java.sql.SQLException; import java.util.ResourceBundle; import org.apache.commons.dbcp.BasicDataSource;public class DBUtil {public static final String DRIVER_CLASS;public static final String URL;public static final String USER_NAME;public static final String PASSWORD;private static BasicDataSource bds = new BasicDataSource();static {ResourceBundle rb = ResourceBundle.getBundle("com.ymw.util.dbconfig");DRIVER_CLASS = rb.getString("DRIVER_CLASS");URL = rb.getString("URL");PASSWORD = rb.getString("PASSWORD");USER_NAME = rb.getString("USER_NAME");bds.setDriverClassName(DRIVER_CLASS);bds.setUrl(URL);bds.setUsername(USER_NAME);bds.setPassword(PASSWORD);bds.setInitialSize(100);bds.setMinIdle(20);bds.setMaxActive(150);}public static Connection getConnection() {Connection connection = null;try {connection = bds.getConnection();} catch (SQLException e) {e.printStackTrace();}return connection;} }dbconfig.properties
登陸界面:
總結
以上是生活随笔為你收集整理的servlet实现用户登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话设计模式—工厂模式
- 下一篇: java实现图片验证码