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方法中的流(附源码)
Spring 4:如何将 RequestMapping URL 映射到特定控制器
如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config