Spring MVC Controller 404,找了很久不知道什麼原因

发布于 2021-12-02 18:56:59 字数 2906 浏览 801 评论 19

配置文件及關鍵配置:

/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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(19

樱花落人离去 2021-12-03 14:08:50

已經解決了。

简单气质女生网名 2021-12-03 14:08:50

这个配置和文件名无关呀

屌丝范 2021-12-03 14:08:48

嗯嗯,忘了……囧

无声静候 2021-12-03 14:08:45

上面問過了,正確映射的。

各自安好 2021-12-03 14:08:45

@Controller  不是写路径的啊

命硬 2021-12-03 14:08:44

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是不是正确映射了。

梦里兽 2021-12-03 14:08:43

其實,我這個配置昨天還是正常的,我覺得兩個文件都配置 context:component-scan 沒什麼不妥,因為一個是給 ContextLoaderListener 啟動 Spring 的,一個是給 DispatcherServlet,讓 Spring 啟動 MVC 的。

酷到爆炸 2021-12-03 14:08:39

spring和mvc两个容器冲突了吧,applicationContext.xml和spring-mvc.xml里
context:component-scan配置重复了,都在扫描controller,applicationContext.xml里component-scan下配置个Controller的exclude-filter试试

屌丝范 2021-12-03 14:08:38

改了之後沒用,我覺得和這個應該沒關係,我其它
@Service 什麼的都有效。

眼眸里的那抹悲凉 2021-12-03 14:08:34

<!-- 掃描註解 -->

奢华的一滴泪 2021-12-03 14:08:21

Mapped "{[/getDistrict],methods=[GET]}" onto public …… Mapped URL path [/map] onto handler '/map'

情绪失控 2021-12-03 14:07:45

查看启动日志,看看有没有加载MapController

温柔少女心 2021-12-03 14:05:39

@斷亂 回复
@斷亂 : 你试试

累赘 2021-12-03 13:06:10

http://localhost:8080/map/getDistrict

顾挽 2021-12-03 12:22:01

回复
@斷亂 : <context:component-scan base-package="top.duanluan.**" />

反话 2021-12-03 12:14:35

把control的函数换成public

明媚如初 2021-12-03 08:46:33

正解,是我寫忘了,看了原先的代碼是這樣寫的……

少女净妖师 2021-12-03 08:41:23

@Controller("/map") 

改成

@Controller

@RequestMapping("/map")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文