Spring 4:如何将 RequestMapping URL 映射到特定控制器

Posted

技术标签:

【中文标题】Spring 4:如何将 RequestMapping URL 映射到特定控制器【英文标题】:Spring 4 : How to map RequestMapping URLs to particular controller 【发布时间】:2015-09-05 11:25:18 【问题描述】:

我编写了一个带有多个控制器的 Spring MVC 应用程序。

在 JSP 上,我在表单上有 action

 <form id="createTableForm" method="post" name="createTable" action="$pageContext.request.contextPath/saveTable" >

同样的动作映射到Controller中的一个方法:

@Controller
public class TableController implements TableConstants 

  @RequestMapping(value="/saveTable")
  public String saveTable(HttpServletRequest request,RedirectAttributes redirectAttributes) 
  //...
  

在我的web.xml:

  <context-param>
    <description>Context name of the Application</description>
    <param-name>contextName</param-name>
    <param-value>W****</param-value>
</context-param>
<context-param>
    <description>Database used for</description>
    <param-name>databaseName</param-name>
    <param-value>w*****</param-value>
</context-param>

<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

<filter>
    <filter-name>FilterChainProxy</filter-name>
    <filter-class>com.abc.w****.configuration.FilterChainProxy
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterChainProxy</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<session-config>
    <session-timeout>1</session-timeout>
</session-config>


<jsp-config>
    <taglib>
        <taglib-uri>http://displaytag.sf.net</taglib-uri>
        <taglib-location>/WEB-INF/tld/displaytag.tld</taglib-location>
    </taglib>
</jsp-config>

我是否需要在web.xml 文件或WebAppConfig 类中包含到该特定控制器的URL 映射?

我有WebAppConfig 用@Configuration、@ComponentScan 和@EnableWebMVC 注释。它有以下几种方法:

 public UrlBasedViewResolver setupViewResolver() 
 
 public MessageSource messageSource() 
 
 public void addResourceHandlers(ResourceHandlerRegistry registry) 
 
 public CommonsMultipartResolver multipartResolver()  
 

请指教。

【问题讨论】:

所以你想实现那个特定的控制器也有自己的 URL 映射? 我想知道正确的方法,到目前为止,我的 Controller 类只是用 @Controller 注释进行了注释。那么我们是否应该提供到 Controller 类的 URL 映射并将该映射附加到 JSP 中的操作以及 RequestMapping URL 发布您的 servlet-config.xml 向控制器添加RequestMapping注解。 不清楚你在问什么。您是否希望您的控制器有一个 URL,以便您的请求 URL /saveTable 改为 /foo/saveTable? 【参考方案1】:

@RequestMapping 注释可以应用于控制器类。在这种情况下,该类中的所有方法都将从类注释中派生默认值,并且实现可以覆盖它。

【讨论】:

【参考方案2】:

你需要做几件事

    在 web.xml 中配置 Spring 的 DispatcherServlet 以拦截请求并将其定向到 Controller。例如,将 DispatcherServlet 映射到根目录下的请求,添加以下行

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    确保在 bean 定义 xml 中,您已在包含控制器的包上配置组件扫描,以便 Spring 容器可以发现它们。

【讨论】:

不是这家伙是用注解来配置的,没必要用web.xml。查看docs.spring.io/autorepo/docs/spring-framework/3.1.x/javadoc-api/… 并在没有 web.xml 的情况下做同样的事情。

以上是关于Spring 4:如何将 RequestMapping URL 映射到特定控制器的主要内容,如果未能解决你的问题,请参考以下文章

spring应用中多次读取http post方法中的流(附源码)

第06课:服务网关

Spring 4:如何将 RequestMapping URL 映射到特定控制器

如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config

我如何说服 spring 4.2 将 OPTIONS 请求传递给控制器

spring-如何将spring源码成功导入Eclipse中