- 整體思路
- 設定歡迎頁:設定完歡迎頁之後,tomcat啟動後會自動跳轉到歡迎頁而不是index.jsp
-
登入的整體步驟:
- 已經擁有前端頁面:login.jsp,登入成功,跳轉到業務主頁面,登入失敗輸出提示資訊,回到登入頁面
- 編寫Dao層:介面和實現類,它的作用是從資料庫中獲取登入的使用者
//透過userCode從資料庫中查詢資料,並將其賦值給Java實體類user public User getLoginUser(Connection connection, String userCode) throws Exception { PreparedStatement pstm = null; ResultSet rs = null; User user = null; if(null != connection){ String sql = "select * from smbms_user where userCode=?"; Object[] params = {userCode}; rs = BaseDao.execute(connection, pstm, rs, sql, params); if(rs.next()){ user = new User(); user.setId(rs.getInt("id")); user.setUserCode(rs.getString("userCode")); user.setUserName(rs.getString("userName")); user.setUserPassword(rs.getString("userPassword")); user.setGender(rs.getInt("gender")); user.setBirthday(rs.getDate("birthday")); user.setPhone(rs.getString("phone")); user.setAddress(rs.getString("address")); user.setUserRole(rs.getInt("userRole")); user.setCreatedBy(rs.getInt("createdBy")); user.setCreationDate(rs.getTimestamp("creationDate")); user.setModifyBy(rs.getInt("modifyBy")); user.setModifyDate(rs.getTimestamp("modifyDate")); } //connection設成null不讓其關閉,是因為後面業務層還需要資料庫連線。 BaseDao.closeResource(null, pstm, rs); } return user; }
- 編寫Service層:呼叫Dao層,獲取業務所需要的資料,登入的介面及其實現類
public class UserServiceImpl implements UserService{ //建立UserServiceImpl就會例項化userDao private UserDao userDao; public UserServiceImpl(){ userDao = new UserDaoImpl(); } //透過前端傳過來的姓名和密碼對比資料庫中查詢到的 public User login(String userCode, String userPassword) { Connection connection = null; User user = null; try { connection = BaseDao.getConnection(); user = userDao.getLoginUser(connection, userCode); } catch (Exception e) { e.printStackTrace(); }finally{ BaseDao.closeResource(connection, null, null); } //匹配密碼 if(null != user){ if(!user.getUserPassword().equals(userPassword)) user = null; } return user; } }
- 編寫servlet:接受使用者的請求交給業務層去做,這裡使用者的請求是登入,業務層要做的是在資料庫中匹配輸入的使用者名稱和密碼。
public class LoginServlet extends HttpServlet { //servlet:控制層,接收使用者的請求,呼叫業務層程式碼。 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //從前端獲取使用者名稱和密碼(接收使用者的請求) String userCode = req.getParameter("userCode"); String userPassword = req.getParameter("userPassword"); //接收請求後需處理業務,業務是:和資料庫中的資料進行對比,所以需呼叫業務層 UserServiceImpl userService = new UserServiceImpl(); User user = userService.login(userCode, userPassword);//這裡已經把登入的人給查出來了 //service層返回的就是user物件 if(user != null){//查有此人,可以登入 //將使用者的資訊放入Session中 req.getSession().setAttribute(Constant.USER_SESSION , user); //跳轉主頁(跳轉到另一個頁面,地址變了,所以用重定向) resp.sendRedirect("jsp/frame.jsp"); }else{//查無此人,無法登入 //轉發會登入頁面,順帶提示它,使用者名稱或密碼錯誤。((跳轉到本頁面,只是在本頁面加了些資訊(使用者名稱或密碼錯誤),地址沒變,所以用請求轉發)) req.setAttribute("error" , "使用者名稱或密碼錯誤");//請求可以攜帶資料 req.getRequestDispatcher("login.jsp").forward(req , resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
- 註冊servlet
<!--servlet--> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.tong.servlet.user.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping>