springMVC實現登陸


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

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

 

  

  


免責聲明!

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



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