Servlet URL映射问题:Spring项目POST /SpringProject/images无匹配映射
问题排查步骤
- 检查Controller类注解配置
首先确认接口所在类已经添加了@Controller或者@RestController注解,如果类上还额外加了@RequestMapping注解,最终访问路径是「类的@RequestMapping路径 + 方法的@PostMapping路径」,比如类上配置了@RequestMapping("/api"),实际接口路径是/api/images,而非直接的/images。 - 检查web.xml中DispatcherServlet的映射规则
确认DispatcherServlet的<url-pattern>配置能匹配到你的请求路径,错误配置示例:
上述配置只会匹配后缀为<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>.do的请求,你访问的/images没有对应后缀就会匹配失败,推荐配置为:
注意不要配置为<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>/*,该配置会拦截JSP等静态资源请求,导致页面无法正常渲染 - 检查项目部署的上下文路径(Context Path)
你当前访问的路径是/SpringProject/images,需要确认项目部署时的上下文路径是否确实为/SpringProject:- 用Tomcat部署的话,可检查Tomcat配置中Application context的值,如果配置为
/,直接访问/images即可,不需要加/SpringProject前缀 - 打war包放到webapps目录下的话,war包名如果是
SpringProject.war,上下文路径就是/SpringProject,符合你的访问路径
- 用Tomcat部署的话,可检查Tomcat配置中Application context的值,如果配置为
- 检查SpringMVC的组件扫描配置
确认Spring配置文件中已经添加了对应Controller包的扫描配置,否则Spring不会识别你写的接口:<context:component-scan base-package="你的Controller所在的包路径"/>
额外代码优化提示
你的接口代码中
response.setContentType("application/images")属于错误的MIME类型,图片对应的MIME类型应为image/jpeg、image/png等;另外你使用的HttpURLConnection、输出流用完之后需要手动关闭,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Deepan mn
相关产品推荐
相关产品推荐

