我有一个基本的Java EE Spring(MVC)应用程序设置,它显示包含动态内容的主页。我是Spring的新手,我很困惑如何继续这一点,并为我的应用程序添加更多页面。我是否需要为我网站上的每个网址创建一个新控制器?现在我在..-servlet.xml
文件中有以下映射:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/index.html=homeController
</value>
</property>
</bean>
所以,如果我现在在/ login有一个新页面,我会在/login/index.html中添加一个映射吗?我更加困惑,因为我正在尝试集成Spring-security来处理登录页面......
答案 0 :(得分:2)
我会看看带注释的控制器:
示例:
@Controller
public class TestController {
@RequestMapping(value="/login/index.html")
public String login() {
return "login";
}
@RequestMapping(value="/somethingelse/index.html")
public String login() {
return "somethingelse";
}
}
当您设置View Resolver时,返回的字符串将对应于文字页面,即如果您在Spring配置中设置了解析器的方式,可以将somethingelse定向到/jsp/somethingelse.jsp 。提示......您需要扫描注释以自动连线。
Spring-Security的处理方式有点类似,但与Spring MVC无关。如果正确完成,您需要提供以配置安全性的唯一资源是简单的登录页面,您将在Spring配置中配置该页面。看看这个安全示例:
答案 1 :(得分:0)
如果您使用的是spring security,则不需要控制器来显示登录表单。您可以将任何jsp页面用于此目的,并将其发布到j_spring_secutity_check,您也不需要控制器来处理它。查看spring文档如何在控制器中添加多个方法,您可能需要使用beanNmaeMapping类配置。现在更好的方法是使用基于注释的配置,它可以帮助您使用@Controller注释将任何pojo配置为控制器
答案 2 :(得分:0)
您可以使用以下内容:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/vehicleSearch">vehicleSearchController</prop>
</props>
</property>
</bean>
如果有文件/WEB-INF/jsp/vehicleSearch.jsp,它将被映射到vehicleSearchController。在这种情况下,JSP文件用于视图,但您可以将其调整为视图技术。
以这种方式配置它仍然需要为每个文件编写映射。一种更好的方法(正如Teja建议的那样)可能是在控制器中注释映射并取消XML配置。
e.g。
@Controller
@RequestMapping("/vehicleSearch")
public class VehicleSearchController {