1. 程式人生 > >springMVC實現登陸

springMVC實現登陸

url 轉發 lan 效果 del set ttr setview control

  • 頁面打開跳轉到登陸頁面
  • 登陸成功跳轉到成功頁面
  • 登陸失敗再次返回登錄頁面,並增加提示信息

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";
        }
    }

  

  

springMVC實現登陸