我正在使用Spring MVC + Spring Security构建一个简单的Web应用程序。我实现了登录/注销(spring mvc),但是我还想提供一个可直接从login.jsp访问的注册jsp。基本上,我只需要从login.jsp到regsiter.jsp的简单链接,而无需传递任何参数或其他任何参数。我只想问你实现这一目标的最佳实践是什么?

有什么方法可以直接在两个jsps之间导航,而无需将请求向下路由到控制器? (或者这不是Spring MVC的真正方法吗?)说实话,我唯一的“问题”是在寄存器控制器中有一个单独的方法,该方法什么也不做,只会将请求路由到寄存器jsp。我的意思是:

RegisterController

@Controller
public class RegisterController {

  @RequestMapping(value="/view_register.htm", method = RequestMethod.POST)
  /** Navigates to the register page */
  public String navigateToRegistration(ModelMap model) {
    return "register";
  }

  @RequestMapping(value="/register.htm", method = RequestMethod.POST)
  /** Handles request from the registration page and registers the user */
  public String registerUser(ModelMap model) {

    // hard stuff to register the user
    return "welcome";
  }

}

WEB-INF / pages / login.jsp
......
<tr>
   <td>Don't have an account yet.</td>
   <td> <a href="<c:url value='view_register.htm' />">Register here</a>
   </td>
</tr>
......

WEB-INF / pages / register.jsp
......
<form name='registration' action="<c:url value='register.htm' />"
        method='POST'>
......

WEB-INF / web.xml -将每个请求路由到spring mvc
......

mvc调度程序
/


WEB-INF / mvc-dispatcher-servlet
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="classpath:/applicationContext.xml" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

我的实现正确吗?这是mvc的方法吗?我只想知道我是否理解得很好,并且不做任何反图案工作。令我感到困惑的是,这实际上是注册控制器中的这个额外的小方法,它什么也不做,只是从登录名导航到注册。这种方法至少有任何命名约定吗?您是否会推荐一个ForwardController来充当Manager / Dispatcher并只管理这种导航请求?

最佳答案

您的结构看起来正确:一个例外是/view_register.htm应该是GET,而不是POST。 Spring MVC使用前端控制器模式,因此每个请求都通过一个控制器。当请求唯一要做的就是返回视图时,您可以使用ParameterizableViewController来配置映射,而不是对控制器进行编码,但是当控制器内有多个相关请求时,我倾向于像您一样编写一种方法。随着应用程序的发展,您可能会发现将添加一些会话设置,这会将所有注册请求都保留在同一类中。

不要忘记将安全性配置为允许匿名访问您的注册请求。

10-07 19:26
查看更多