Spring MVC Controller 404,找了很久不知道什麼原因
配置文件及關鍵配置:
/src/main/webapp/WEB-INF/web.xml
<display-name>SanHuaiAbout</display-name> <!-- Spring 和 mybatis 的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> </context-param> <!-- Spring 容器啟動監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Spring 核心 servlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 啟動 Spring MVC --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此處可以可以配置成 *.do,對應 struts 的後綴習慣 --> <url-pattern>/</url-pattern> </servlet-mapping>
/src/main/resources/applicationContext.xml
<!-- 掃描註解 --> <context:component-scan base-package="top.duanluan" /> <!-- MVC 注解掃描 --> <mvc:annotation-driven /> <!-- 導入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:configure.properties" /> </bean>
/src/main/resources/spring-mvc.xml
<!-- 自動掃瞄該包,使 SpringMVC 認為包下用了 @controller 註解的類是控制器 --> <context:component-scan base-package="top.duanluan.controller" /> <!-- 靜態資源訪問 --> <mvc:resources mapping="/**" location="/" /> <!-- 啟動 SpringMVC 的註解功能,完成請求和註解 POJO 的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON 轉換器 --> </list> </property> </bean>
/src/main/java/top.duanluan.controller/MapController.java
@Controller("/map") public class MapController { @RequestMapping(value = "/getDistrict", method = RequestMethod.GET) @ResponseBody private Map<String, String> getDistrict( ………… } }
訪問 http://localhost:8080/SanHuaiAbout/map/getDistrict 的時候報
HTTP Status 404 -
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(19)
已經解決了。
这个配置和文件名无关呀
嗯嗯,忘了……囧
上面問過了,正確映射的。
@Controller 不是写路径的啊
spring mvc 有时 报 404 其实是项目没有好的error (500)页面导致的。
也就是controller执行出错了。
开一下spring的info日志,应该会打印 url mapping信息,类似这样:
RequestMappingHandlerMapping - Mapped "{[/terminal/product/getById]}" onto public ApiResult<?> com.dd.controller.TerminalProductCtl.queryById(java.lang.Long)
检查 url是不是正确映射了。
其實,我這個配置昨天還是正常的,我覺得兩個文件都配置 context:component-scan 沒什麼不妥,因為一個是給 ContextLoaderListener 啟動 Spring 的,一個是給 DispatcherServlet,讓 Spring 啟動 MVC 的。
spring和mvc两个容器冲突了吧,applicationContext.xml和spring-mvc.xml里
context:component-scan配置重复了,都在扫描controller,applicationContext.xml里component-scan下配置个Controller的exclude-filter试试
改了之後沒用,我覺得和這個應該沒關係,我其它
@Service 什麼的都有效。
<!-- 掃描註解 -->
Mapped "{[/getDistrict],methods=[GET]}" onto public …… Mapped URL path [/map] onto handler '/map'
查看启动日志,看看有没有加载MapController
@斷亂 回复
@斷亂 : 你试试
http://localhost:8080/map/getDistrict
回复
@斷亂 : <context:component-scan base-package="top.duanluan.**" />
把control的函数换成public
正解,是我寫忘了,看了原先的代碼是這樣寫的……
@Controller("/map")
改成
@Controller
@RequestMapping("/map")