为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...
您的标准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>注册它. < servlet的类>和< 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响应并报告“在...相关推荐
- 为什么运行了java文件老是404_哪位能帮助一下,JAVA中我运行页面时不能打开,总是出现404错误,为什么;用的是Tomcat7.0,win7的系统,...
StatusCode 似乎 Servelt API中,无论是 Filter Wrapper Reponse,都没有提供 get的方法. 以下是一个从网上找到的解决方案. 1.先实现一个对Respons ...
- idea打开java文件_IDEA运行单个Java文件
对于某些Java示例可能是只有单个文件,并不是完整的Java工程,那么要如何运行单个Java文件呢,以IDEA为例. 我的环境: IDEA 2017.3.2 jdk 1.8.0.73 操作步骤: 1. ...
- java springmvc https_【Java Web开发学习】Spring MVC 使用HTTP信息转换器
[Java Web开发学习]Spring MVC 使用HTTP信息转换器 @ResponseBody和@RequestBody是启用消息转换的一种简洁和强大方式 消息转换(message conver ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- 如何运行一个Java文件?
以下操作是按在Windows系统运行的,不能在Linux环境执行,Linux环境必须运行完整的web项目,xx.jar的方式运行. 首次学习java,安装好jdk环境后,兴奋的你,肯定想写一个Hell ...
- java 编译文件 命令,CMD命令行编译运行单个java文件
java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...
- java自定义标签 map_基于Spring MVC的自定义标签Tag
基于Spring MVC的自定义标签Tag 1.环境准备 本次小项目基于Spring MVC进行测试呈现,项目依赖的jar文件列表如下: 2.搭建SpringMVC Spring MVC环境最关键的两 ...
- Java泛型之mybatis,基于spring MVC 和 MyBatis 泛型的代码生成模板
原标题:基于spring MVC 和 MyBatis 泛型的代码生成模板 简单说明 这块代码生成工具是我抽空的时候方便自己使用而编写的,并不适合其他框架,这里由于项目原有,我并没有上传泛型部份的代码, ...
- java webpack web项目_spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...
最新文章
- 使用babel编译es6
- Python错误“ImportError: No module named MySQLdb”解决方法
- 权限提升 T1548.002 绕过UAC
- ASP.NETSpring.NETNHibernate最佳实践(三)——第2章环境准备
- win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
- WPF的转换器中使用Brush应注意问题
- Spring MVC DispatcherServlet改造为 CSE RestServlet 常见问题汇编
- ubuntu下搭建erlang编程环境
- linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
- Eureka 控制台参数说明
- 【PAT B1024】科学计数法(C语言)
- 历史上最“好”的皇帝--宋仁宗
- Java IO流:(十二)NIONIO2简单介绍
- 表示自己从头开始的句子_表示一切从头开始的唯美句子38条
- bzoj5185 [Usaco2018 Jan]Lifeguards
- 工厂自动化系统,架构设计图
- 美元人民币汇率API
- 8大蓝牙电路应用热门方案,快速简单实现近距离无线连接
- Android WebView 加载https网页白屏,空白解决方案
- pytorch快速入门与实战——三、Unet实现
热门文章
- 谈VHDL/Verilog的可综合性以及对初学者的一些建议
- C# 多线程之List的线程安全问题
- dns组件能够删除后恢复
- [Elasticsearch2.x] 多字段搜索 (三) - multi_match查询和多数字段 译
- 关键路径问题--完美版
- mysql 随机查询数据
- 我的Ubuntu体验
- 关联、聚合、组合的关系[转]
- C#的ApartmentState的属性:[STAThread]
- C#获取类名为Internet_Explorer_Server控件的内容