我使用spring MVC遇到了一些问题 这是我的web.xml配置
<!-- config spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml,
/WEB-INF/classes/xfire-servlet.xml,
/WEB-INF/classes/mvc-servlet.xml,
classpath:org/codehaus/xfire/spring/xfire.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- spring mvc -->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
我的控制器正在关注
@Controller
@RequestMapping("/searchCase.do")
public class SearchCaseController {
public String getCaseDetailInfo() {
return "forward:caseDetail";
}
}
我的mvc配置是
<!--auto scan annotation -->
<context:component-scan base-package="com.thunisoft.shxt.webservice.model.searchCase.logic" />
<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/case" />
<property name="suffix" value=".jsp" />
</bean>
然后我通过url请求:http:// {address:port} / {application-name} /searchCase.do,但它无法找到控制器来解决我的请求
No handler found in getLastModified
DispatcherServlet with name 'mvc' processing request for [/{application-name}/searchCase.do]
No mapping found for HTTP request with URI [/{application-name}/searchCase.do] in DispatcherServlet with name 'mvc'
Successfully completed request
我的春季MVC版本是2.5.6 我在等你的问题来帮我解决这个问题,谢谢!
答案 0 :(得分:3)
请更改控制器网址格式,如下所述
自从您在web.xml中配置后,.do将自动附加到所有控制器请求映射
@Controller
@RequestMapping("/searchCase")
public class SearchCaseController {
public String getCaseDetailInfo() {
return "forward:caseDetail";
}
}
JSP代码:
<a href="/searchCase.do">Click</a>
答案 1 :(得分:1)
尝试添加方法级别注释,如下所示:
@Controller
@RequestMapping("/searchCase")
public class SearchCaseController {
@RequestMapping(method = RequestMethod.GET)
public String getCaseDetailInfo() {
return "forward:caseDetail";
}
}
与文档中描述的相似:Mapping Requests With @RequestMapping
17.3.2使用@RequestMapping映射请求
您可以使用
@RequestMapping
注释来映射网址,例如/appointments
到整个类或特定的处理程序方法。 通常,类级注释映射特定的请求路径(或 路径模式)到表单控制器上,具有额外的方法级别 注释缩小了特定HTTP方法的主映射 请求方法(&#34; GET&#34;,&#34; POST&#34;等)或HTTP请求参数 条件。
答案 2 :(得分:0)
人们在评论中建议的是docs描述的内容
初始化DispatcherServlet后,Spring MVC会查找 在您的WEB-INF目录中命名为[servlet-name] -servlet.xml的文件 Web应用程序并创建在那里定义的bean,覆盖 全局中使用相同名称定义的任何bean的定义 范围。
但是,使用配置
<init-param>
<param-name>namespace</param-name>
<param-value>mvc</param-value>
</init-param>
你已经覆盖了这个,所以DispatherServlet文件将查看以下位置
DEFAULT_CONFIG_LOCATION_PREFIX + getNamespace() + DEFAULT_CONFIG_LOCATION_SUFFIX
所以在你的例子中,它将是
/WEB-INF/mvc.xml
我根据你的评论看到你最初有正确的名字(对应你的配置)。所以要么你没有把它放在 WEB-INF 之下,要么你的问题在其他地方。
话虽如此,请考虑替代配置(在我看来更明确),基于contextConfigLocation
param,例如
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-servlet.xml</param-value>
</context-param>
希望有所帮助
答案 3 :(得分:0)
我在计算机上设置了您的项目。首先,我使用 maven-jetty-plugin 运行项目。然后没有发现映射错误。经过大量的更改,我终于尝试了 maven-tomcat7-plugin ,然后就可以了。
将tomcat插件添加到您的pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
然后启动服务器mvn tomcat7:run
你的Controller映射应该是这样的:
@RequestMapping(value="/searchCase", method = RequestMethod.GET)
public ModelAndView helloWorld() {
答案 4 :(得分:0)
我有同样的错误。尝试了我在堆栈溢出后发现的所有内容都无济于事,我意识到我的控制器位于文件夹src/main/resources/com/controllers
中,其中com.controllers
是一个包。
创建另一个源文件夹src/main/java
并移动com/controllers
文件夹就可以了。 (它将com/controller
文件夹检测为一个包,而在src/main/resources
中将其视为普通目录。)