我使用spring mvc + spring security来构建一个简单的Web应用程序。我实现了login / logout(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 /页/ 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 /页/ register.jsp
......
<form name='registration' action="<c:url value='register.htm' />"
method='POST'>
......
WEB-INF / web.xml - 将每个请求路由到spring mvc ...... MVC-调度 /
WEB-INF / MVC-调度员的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方式吗?我只是想知道我是否理解这一点并且没有做任何反模式的东西。让我感到困惑的是真正的这个额外的小方法在regsitration控制器中,它只是从登录导航到注册。是否至少有这种方法的命名约定?你会推荐一个可以充当经理/调度员的ForwardController,并且只管理这种导航请求吗?
答案 0 :(得分:4)
您的结构看起来是正确的:一个例外是/view_register.htm
应该是GET,而不是POST。 Spring MVC使用前端控制器模式,因此每个请求都通过控制器。当请求做的唯一事情是返回视图时,您可以使用ParameterizableViewController
而不是编码控制器来配置映射,但我倾向于在控制器中存在多个相关请求时编写类似于您的方法。随着您的应用程序的发展,您可能会发现您将添加一些会话设置,这只会将所有注册请求保留在同一个类中。
不要忘记配置安全性以允许匿名访问您的注册请求。