Spring MVC配置问题

时间:2010-02-03 20:53:19

标签: java spring java-ee spring-mvc

我有一个基本的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来处理登录页面......

3 个答案:

答案 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 {