您的标准Spring MVC应用程序将通过您在Servlet容器中注册的DispatcherServlet提供所有请求.

DispatcherServlet查看其ApplicationContext,如果可用,则使用ContextLoaderListener注册的ApplicationContext用于设置其请求服务逻辑的特殊bean. These beans are described in the documentation.

incoming requests to handlers and a list of pre- and post-processors

(handler interceptors) based on some criteria the details of which

vary by HandlerMapping implementation. The most popular implementation

supports annotated controllers but other implementations exists as

well.

DispatcherServlet查找此类型的所有bean并按某种顺序注册它们(可以自定义).在提供请求时,DispatcherServlet循环遍历这些HandlerMapping对象并使用getHandler测试每个对象,以找到可以处理传入请求的对象,表示为标准HttpServletRequest.从4.3.x开始,如果没有找到任何,你看到的是logs the warning

No mapping found for HTTP request with URI [/some/path] in DispatcherServlet with name SomeName

和either抛出NoHandlerFoundException或立即提交404 Not Found状态代码的响应.

为什么DispatcherServlet找不到可以处理我的请求的HandlerMapping?

最常见的HandlerMapping实现是RequestMappingHandlerMapping,它处理将@Controller bean注册为处理程序(实际上是他们的@RequestMapping注释方法).您可以自己声明这种类型的bean(使用@Bean或< bean>或其他机制),也可以使用the built-in options.这些是:

>使用@EnableWebMvc注释您的@Configuration类.

>声明一个< mvc:annotation-driven /> XML配置中的成员.

正如上面的链接所描述的,这两个都将注册一个RequestMappingHandlerMapping bean(以及一堆其他的东西).但是,没有处理程序,HandlerMapping不是很有用. RequestMappingHandlerMapping需要一些@Controller bean,所以你需要通过Java配置中的@Bean方法或< bean>来声明它们. XML配置中的声明或通过@Controller注释类的组件扫描.确保这些豆子存在.

如果您收到警告消息和404,并且您已正确配置了上述所有内容,则您将请求发送到错误的URI,该URI不会被检测到的@RequestMapping带注释的处理程序方法处理.

spring-webmvc库提供了其他内置的HandlerMapping实现.例如,BeanNameUrlHandlerMapping地图

from URLs to beans with names that start with a slash (“/”)

而你总是可以自己写.显然,您必须确保您发送的请求至少匹配一个已注册的HandlerMapping对象的处理程序.

如果您没有隐式或显式注册任何HandlerMapping bean(或者如果detectAllHandlerMappings为真),则DispatcherServlet会注册一些defaults.这些在DispatcherServlet.properties中定义在与DispatcherServlet类相同的包中.它们是BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping(类似于RequestMappingHandlerMapping但已弃用).

调试

Spring MVC将记录通过RequestMappingHandlerMapping注册的处理程序.例如,像@Controller一样

@Controller

public class ExampleController {

@RequestMapping(path = "/example", method = RequestMethod.GET, headers = "X-Custom")

public String example() {

return "example-view-name";

}

}

将在INFO级别记录以下内容

Mapped "{[/example],methods=[GET],headers=[X-Custom]}" onto public java.lang.String com.spring.servlet.ExampleController.example()

这描述了已注册的映射.当您看到没有找到处理程序的警告时,请将消息中的URI与此处列出的映射进行比较. @RequestMapping中指定的所有限制必须与Spring MVC匹配才能选择处理程序.

其他HandlerMapping实现记录它们自己的语句,这些语句应该提示它们的映射和相应的处理程序.

类似地,在DEBUG级别启用Spring日志记录以查看Spring注册的bean.它应该报告它找到哪些带注释的类,它扫描哪些包,以及它初始化的bean.如果您所期望的那些不存在,那么请查看您的ApplicationContext配置.

其他常见错误

DispatcherServlet只是一个典型的Java EE Servlet.您可以使用典型的< web.xml>注册它. &LT; servlet的类&GT;和< servlet-mapping>声明,或直接通过WebApplicationInitializer中的ServletContext#addServlet,或Spring引导使用的任何机制.因此,您必须依赖于Servlet specification中指定的url映射逻辑,请参阅第12章.另请参阅

考虑到这一点,一个常见的错误是使用/ *的url映射注册DispatcherServlet,从@RequestMapping处理程序方法返回视图名称,并期望呈现JSP.例如,考虑一个像这样的处理程序方法

@RequestMapping(path = "/example", method = RequestMethod.GET)

public String example() {

return "example-view-name";

}

@Bean

public InternalResourceViewResolver resolver() {

InternalResourceViewResolver vr = new InternalResourceViewResolver();

vr.setPrefix("/WEB-INF/jsps/");

vr.setSuffix(".jsp");

return vr;

}

您可能希望请求是forwarded到路径为/WEB-INF/jsps/example-view-name.jsp的JSP资源.这不会发生.相反,假设上下文名称为Example,DisaptcherServlet将报告

No mapping found for HTTP request with URI [/Example/WEB-INF/jsps/example-view-name.jsp] in DispatcherServlet with name ‘dispatcher’

因为DispatcherServlet映射到/ *和/ *匹配所有内容(具有更高优先级的完全匹配除外),所以将选择DispatcherServlet来处理JstlView中的转发(由InternalResourceViewResolver返回).几乎在所有情况下,DispatcherServlet都不会配置为处理这样??的请求.

相反,在这种简单的情况下,您应该将DispatcherServlet注册到/,将其标记为默认servlet.默认servlet是请求的最后一个匹配项.这将允许您的典型servlet容器在尝试使用默认servlet之前选择映射到* .jsp的内部Servlet实现来处理JSP资源(例如,Tomcat具有JspServlet).

这就是你在你的例子中看到的.

为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...相关推荐

  1. 为什么运行了java文件老是404_哪位能帮助一下,JAVA中我运行页面时不能打开,总是出现404错误,为什么;用的是Tomcat7.0,win7的系统,...

    StatusCode 似乎 Servelt API中,无论是 Filter Wrapper Reponse,都没有提供 get的方法. 以下是一个从网上找到的解决方案. 1.先实现一个对Respons ...

  2. idea打开java文件_IDEA运行单个Java文件

    对于某些Java示例可能是只有单个文件,并不是完整的Java工程,那么要如何运行单个Java文件呢,以IDEA为例. 我的环境: IDEA 2017.3.2 jdk 1.8.0.73 操作步骤: 1. ...

  3. java springmvc https_【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 @ResponseBody和@RequestBody是启用消息转换的一种简洁和强大方式 消息转换(message conver ...

  4. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  5. 如何运行一个Java文件?

    以下操作是按在Windows系统运行的,不能在Linux环境执行,Linux环境必须运行完整的web项目,xx.jar的方式运行. 首次学习java,安装好jdk环境后,兴奋的你,肯定想写一个Hell ...

  6. java 编译文件 命令,CMD命令行编译运行单个java文件

    java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...

  7. java自定义标签 map_基于Spring MVC的自定义标签Tag

    基于Spring MVC的自定义标签Tag 1.环境准备 本次小项目基于Spring MVC进行测试呈现,项目依赖的jar文件列表如下: 2.搭建SpringMVC Spring MVC环境最关键的两 ...

  8. Java泛型之mybatis,基于spring MVC 和 MyBatis 泛型的代码生成模板

    原标题:基于spring MVC 和 MyBatis 泛型的代码生成模板 简单说明 这块代码生成工具是我抽空的时候方便自己使用而编写的,并不适合其他框架,这里由于项目原有,我并没有上传泛型部份的代码, ...

  9. java webpack web项目_spring + spring mvc + mybatis + react + reflux + webpack Web工程例子

    前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...

最新文章

  1. 使用babel编译es6
  2. Python错误“ImportError: No module named MySQLdb”解决方法
  3. 权限提升 T1548.002 绕过UAC
  4. ASP.NETSpring.NETNHibernate最佳实践(三)——第2章环境准备
  5. win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
  6. WPF的转换器中使用Brush应注意问题
  7. Spring MVC DispatcherServlet改造为 CSE RestServlet 常见问题汇编
  8. ubuntu下搭建erlang编程环境
  9. linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
  10. Eureka 控制台参数说明
  11. 【PAT B1024】科学计数法(C语言)
  12. 历史上最“好”的皇帝--宋仁宗
  13. Java IO流:(十二)NIONIO2简单介绍
  14. 表示自己从头开始的句子_表示一切从头开始的唯美句子38条
  15. bzoj5185 [Usaco2018 Jan]Lifeguards
  16. 工厂自动化系统,架构设计图
  17. 美元人民币汇率API
  18. 8大蓝牙电路应用热门方案,快速简单实现近距离无线连接
  19. Android WebView 加载https网页白屏,空白解决方案
  20. pytorch快速入门与实战——三、Unet实现

热门文章

  1. 谈VHDL/Verilog的可综合性以及对初学者的一些建议
  2. C# 多线程之List的线程安全问题
  3. dns组件能够删除后恢复
  4. [Elasticsearch2.x] 多字段搜索 (三) - multi_match查询和多数字段 译
  5. 关键路径问题--完美版
  6. mysql 随机查询数据
  7. 我的Ubuntu体验
  8. 关联、聚合、组合的关系[转]
  9. C#的ApartmentState的属性:[STAThread]
  10. C#获取类名为Internet_Explorer_Server控件的内容