从Spring MVC中的控制器操作重定向到JSP文件

Kle*_*ota 2 java spring jsp spring-mvc

在我的spring mvc应用程序中,我有以下登录表单:

<!--LOGIN FORM-->
<form name="login-form" class="login-form" action="usuario_login.html" method="post">

    <!--HEADER-->
    <div class="header">
    <!--TITLE--><h1>Login Form</h1><!--END TITLE-->
    <!--DESCRIPTION--><span>Fill out the form below to login to my super awesome imaginary control panel.</span><!--END DESCRIPTION-->
    </div>
    <!--END HEADER-->

    <!--CONTENT-->
    <div class="content">
    <!--USERNAME--><input name="username" type="text" class="input username" value="Username" onfocus="this.value=''" /><!--END USERNAME-->
    <!--PASSWORD--><input name="password" type="password" class="input password" value="Password" onfocus="this.value=''" /><!--END PASSWORD-->
    </div>
    <!--END CONTENT-->

    <!--FOOTER-->
    <div class="footer">
    <!--LOGIN BUTTON--><input type="submit" name="submit" value="Login" class="button" /><!--END LOGIN BUTTON-->
    </div>
    <!--END FOOTER-->

</form>
Run Code Online (Sandbox Code Playgroud)

页面usuario_login.html以这种方式在DispatcherServlet中配置:

@RequestMapping(value="/usuario_login", method=RequestMethod.POST)
    public ModelAndView usuario_login(@RequestParam("username") String username, @RequestParam("password") String password) {
        UsuarioDAO usuario = new UsuarioDAO(username, password);
        if(usuario.getUsuario() == null) {
            String message = "oops! n&atilde;o foi possivel efetuar o login. Confira seu login e senha e tente novamente.";
            return new ModelAndView("","message",message);
        }
        else {
            this.sessao = new Sessao(usuario.getUsuario());
            return new ModelAndView("usuario_start","usuario",usuario.getUsuario());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果登录失败(条件usuario.getUsuario()== null我如何重定向到我的文件index.jsp,登录表单放在哪里?我想发送一条消息说明情况,要显示在这个页面中也是如此.

hec*_*g87 5

我会严格推荐使用Spring Security,它很容易实现.看看它:Spring Security

不过,你想做什么我可以做到

new ModelAndView("redirect:YOUR_REQUEST_MAPPING_HERE");

此外,对于该消息,我建议您查看重定向属性

从上面的链接:

 @RequestMapping(value = "/accounts", method = RequestMethod.POST)
 public String handle(Account account, BindingResult result, RedirectAttributes redirectAttrs) {
   if (result.hasErrors()) {
     return "accounts/new";
   }
   // Save account ...
   redirectAttrs.addAttribute("id", account.getId()).addFlashAttribute("message", "Account created!");
   return "redirect:/accounts/{id}";
 }
Run Code Online (Sandbox Code Playgroud)

重定向后,Flash属性会自动添加到为目标URL提供服务的控制器模型中.

这意味着对于上面的示例,您可以通过执行$ {message}在JSP中显示消息,因为具有名称消息的变量被添加到模型中.