- 頁面打開跳轉到登陸頁面
- 登陸成功跳轉到成功頁面
- 登陸失敗再次返回登錄頁面,並增加提示信息
1、首頁跳轉到登陸頁面
Tomcat服務器啟動時默認加載WEB-INF下的index.jsp,可以通過修改xml配置的方式來改變Tomcat這一默認行為。這里使用springMVC來實現這個功能。
第一種實現方案是配置Controller,value值配成空字符串或者login,這樣在訪問8080端口或者直接輸入login的時候回跳轉到login.jsp。
@RequestMapping(value = {"","login"},method = RequestMethod.GET) public String login(){ return "login"; }
第二種是在springMVC配置文件里用XML的形式來實現上述結果。
<mvc:view-controller path="/" view-name="login"/> <mvc:view-controller path="login" view-name="login"/>
2、頁面跳轉
這里只關注頁面跳轉的實現,用戶驗證暫不考慮。
首先考慮登陸失敗用什么樣的方式回到login頁面,重定向?轉發?還是直接返回一個login字符串再解析一次?分別實驗
2.1 返回字符串
如下所示,當用戶認證不通過的時候返回login作為視圖名,經由第一步配置的Controller直接再次調回到主頁。
@RequestMapping(value = "doLogin",method = RequestMethod.POST) public String login(HttpServletRequest request, @RequestParam("email")String email, @RequestParam("password")String password ){ User user = userService.login(email, password); ModelAndView modelAndView = new ModelAndView(); if (user!=null && user.getPassword().equals(password)){ modelAndView.addObject("user",user); modelAndView.setViewName("success"); return "redirect:/success"; }else { //request.setAttribute("wrongMsg","用戶名密碼錯誤"); //request.getSession().setAttribute("wrongMsg","用戶名密碼錯誤"); return "login"; } }
這樣做是能夠實現直接跳轉到主頁的,但問題在於跳回到主頁后url地址欄顯示的仍是doLogin即前端表單提交的地址。這樣首先讓我感覺不舒服,我登陸頁面應該是login為什么登陸失敗跳到doLogin?其次這樣不安全,多次刷新登陸失敗后的doLogin會產生表單重復提交。
2.2 forward
把return改成"redirect:/logim"。產生的效果和上面直接返回字符串一樣,失敗后的頁面也是doLogin,問題也同上。其實仔細想想,這兩種方式后台的處理結果理應相同,返回String字符串,封裝成ModelAndView對象,找到視圖解析器,返回結果;返回forward,也是找到處理"login"請求的字符串,然后重復上面的結果。
2.3 redirect
總言而之上面兩個都不是我想要的結果,我想要的結果是登陸失敗后url地址欄里仍然是login,而不是doLogin。
@RequestMapping(value = "doLogin",method = RequestMethod.POST) public String login(HttpServletRequest request, @RequestParam("email")String email, @RequestParam("password")String password ){ User user = userService.login(email, password); ModelAndView modelAndView = new ModelAndView(); if (user!=null && user.getPassword().equals(password)){ modelAndView.addObject("user",user); modelAndView.setViewName("success"); return "redirect:/success"; }else { request.setAttribute("wrongMsg","用戶名密碼錯誤"); request.getSession().setAttribute("wrongMsg","用戶名密碼錯誤"); return "redirect:/login"; } }