- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写部署在Tomcat上的Spring MVC应用程序。请参阅以下minimal, complete, and verifiable example
public class Application extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { };
}
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { SpringServletConfig.class };
}
protected String[] getServletMappings() {
return new String[] { "/*" };
}
}
SpringServletConfig
在哪里
@Configuration
@ComponentScan("com.example.controllers")
@EnableWebMvc
public class SpringServletConfig {
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/jsps/");
vr.setSuffix(".jsp");
return vr;
}
}
@Controller
中有一个
com.example.controllers
@Controller
public class ExampleController {
@RequestMapping(path = "/home", method = RequestMethod.GET)
public String example() {
return "index";
}
}
Example
。当我发送请求给
http://localhost:8080/Example/home
WARN o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI `[/Example/WEB-INF/jsps/index.jsp]` in `DispatcherServlet` with name 'dispatcher'
/WEB-INF/jsps/index.jsp
处有一个JSP资源,我希望Spring MVC使用我的控制器来处理请求并转发到JSP,所以为什么它用404响应?
最佳答案
您的标准Spring MVC应用程序将通过您在Servlet容器中注册的DispatcherServlet
满足所有请求。DispatcherServlet
会查看其ApplicationContext
,如果有的话,也会向ApplicationContext
注册以查找特殊bean的ContextLoaderListener
,它需要设置其请求服务逻辑。 These beans are described in the documentation。
可以说是最重要的HandlerMapping
类型的bean
向处理程序的传入请求以及预处理程序和后处理程序的列表
(处理程序拦截器)基于某些标准,其中的详细信息
因HandlerMapping
实现而异。最受欢迎的实施
支持带注释的控制器,但存在其他实现
好。
javadoc of HandlerMapping
进一步描述了实现必须如何表现。DispatcherServlet
查找所有这种类型的bean,并以某种顺序注册它们(可以自定义)。在处理请求时,DispatcherServlet
循环遍历这些HandlerMapping
对象,并使用getHandler
测试它们中的每个对象,以找到可以处理传入请求的对象,以标准HttpServletRequest
表示。从4.3.x版本开始,如果找不到任何内容,则会显示logs the warning
在名称为SomeName的[/some/path]
中找不到URI为DispatcherServlet
的HTTP请求的映射
并且either抛出NoHandlerFoundException
或立即使用404 Not Found状态码提交响应。DispatcherServlet
为什么没有找到可以处理我的请求的HandlerMapping
?
最常见的HandlerMapping
实现是RequestMappingHandlerMapping
,该实现将@Controller
bean注册为处理程序(实际上是其@RequestMapping
注释的方法)。您可以自己声明此类型的bean(使用@Bean
或<bean>
或其他机制),也可以使用the built-in options。这些是:
用@Configuration
注释@EnableWebMvc
类。
在您的XML配置中声明一个<mvc:annotation-driven />
成员。
正如上面的链接所描述的,这两个都将注册一个RequestMappingHandlerMapping
bean(以及其他一些东西)。但是,没有处理程序的HandlerMapping
不是很有用。 RequestMappingHandlerMapping
需要一些@Controller
bean,因此您也需要通过Java配置中的@Bean
方法或XML配置中的<bean>
声明,或者通过对其中任一带有@Controller
注释的类的组件扫描来声明它们。确保这些豆存在。
如果您收到警告消息和404,并且已经正确配置了上述所有内容,那么您会将请求发送到错误的URI,这是检测不到的@RequestMapping
带注释的处理程序方法未处理的URI。spring-webmvc
库提供了其他内置的HandlerMapping
实现。例如,BeanNameUrlHandlerMapping
映射
从URL到名称以斜杠(“ /”)开头的bean
而且您可以随时编写自己的。显然,您必须确保要发送的请求至少与已注册的HandlerMapping
对象的处理程序之一匹配。
如果您没有隐式或显式注册任何HandlerMapping
bean(或者如果detectAllHandlerMappings
是true
),则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";
}
}
Mapped "{[/example],methods=[GET],headers=[X-Custom]}" onto public java.lang.String com.spring.servlet.ExampleController.example()
@RequestMapping
中指定的所有限制必须匹配,Spring MVC才能选择处理程序。
HandlerMapping
实现记录自己的语句,这些语句应提示其映射和相应的处理程序。
ApplicationContext
配置。
DispatcherServlet
只是典型的Java EE
Servlet
。您可以使用典型的
<web.xml>
<servlet-class>
和
<servlet-mapping>
声明或直接通过
ServletContext#addServlet
中的
WebApplicationInitializer
或使用Spring boot使用的任何机制来注册它。因此,您必须依赖
Servlet specification中指定的url映射逻辑,请参见第12章。另请参见
DispatcherServlet
的URL映射注册
/*
,从
@RequestMapping
处理程序方法返回视图名称,并期望呈现JSP。例如,考虑一个处理程序方法,例如
@RequestMapping(path = "/example", method = RequestMethod.GET)
public String example() {
return "example-view-name";
}
InternalResourceViewResolver
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/jsps/");
vr.setSuffix(".jsp");
return vr;
}
/WEB-INF/jsps/example-view-name.jsp
处的JSP资源的
forwarded。这不会发生。相反,假设上下文名称为
Example
,则
DisaptcherServlet
将报告
[/Example/WEB-INF/jsps/example-view-name.jsp]
中找不到URI为
DispatcherServlet
的HTTP请求的映射
DispatcherServlet
映射到
/*
并且
/*
匹配所有内容(精确匹配除外,它们具有更高的优先级),因此将选择
DispatcherServlet
来处理
forward
中的
JstlView
(由
InternalResourceViewResolver
)。在几乎每种情况下,
DispatcherServlet
都不会配置为处理此类请求。
DispatcherServlet
注册到
/
,将其标记为默认servlet。默认servlet是请求的最后一个匹配项。这将允许您的典型servlet容器在尝试使用默认servlet之前,选择一个内部Servlet实现(映射到
*.jsp
)来处理JSP资源(例如,Tomcat具有
JspServlet
)。
关于java - 为什么Spring MVC会以404响应并报告“在DispatcherServlet中未找到带有URI […]的HTTP请求的映射”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108202/
使用 ruby 1.9.2-p290。我在尝试解析如下 URI 时遇到问题: require 'uri' my_uri = "http://www.anyserver.com/getdata?anyp
根据 http://tools.ietf.org/html/rfc3986和 http://en.wikipedia.org/wiki/Uniform_resource_identifier , UR
如何在文本 block 中发现 URI? 这个想法是将这样的文本运行变成链接。如果只考虑 http(s) 和 ftp(s) 方案,这很容易做到;但是,我猜测一般问题(考虑 tel、mailto 和其他
我的一些网址上有一些特殊字符。例如: http://blabla.com/title/?t=burası 当我从其他页面提供指向该页面的链接时,我使用: URI.encode(s) 产生这个链接: /
我在 Windows Mobile 上使用紧凑型框架/C#。 在我的应用程序中,我通过序列化对象并使用 HttpWebRequest/POST 请求向上发送信息来将数据上传到服务器。在服务器上,发布数
我正在做一个实验,我发现将 Canvas 转换为 blob,然后转换为数据 URI 会导致与直接从 Canvas 获取数据 URI 不同的 URI。打开时的内容在两个 URI 上几乎相同。 使用 bl
我正在尝试在 Rails 3 中实现 OAuth 提供程序。当我尝试授权客户端应用程序时,出现此错误。我正在使用 RESTful auth 插件和 pelles OAuth 插件。当我通过 Rails
我有一个编码的 UI 测试方法: public void MyTestMethod() { string baseUrl = "www.google.com"; GlobalVaria
我知道这是一个常见的错误,我正在使用一个已知的解决方案,但它仍然给我同样的错误: require 'open-uri' url = "http://website.com/dirs/filex[a]"
我正在尝试使用 .NET 中的 HttpClient 来使用 Web 服务,并且在我完成了 msdn 中提到的所有步骤之后 o 出现以下异常:提供了无效的请求 URI。请求 URI 必须是绝对 URI
我正在尝试检索文件的 URI。该文件存储在: /storage/emulated/0/AppName/FileName.png 如果我使用 Uri.fromFile(file),我得到的是 file:
我想知道 (SIP) URI 中的不同参数分隔符表示什么? 部分以;分隔,例如: . 其他用?隔开和 & ,例如: 最佳答案 SIP 分隔符规则来自RFC 2396 RFC 3986 已弃用.但是在
我想调用decodeUrl(...),我这样做是: import "dart:uri"; main() { decodeUrl("str"); } 但是现在有了最新的Dart-SDK,它会报告
在 URI 中,空格可以编码为 + .既然如此,那么在创建具有国际前缀的 tel URI 时是否应该对前导加号进行编码? 哪个更好?两者在实践中都有效吗? Call me Call me 最佳答案 不
我试图弄清楚电子邮件地址的格式是否可以说符合 URI 的定义,但到目前为止我还没有找到明确的确认。我希望有人可以在这里为我提供一些见解。预先感谢:) 最佳答案 是的,但带有“mailto:”前缀。 U
因此,我尝试将 ID 参数附加到 URI 的末尾,当用户单击我的列表中的项目时,用户将被发送到该 URI。我的代码如下: public void onItemClick(AdapterView par
这是 Converting file path to URI 的后续问题. 考虑: require 'uri' uri = URI.join('file:///', '/home/user/dir1/
我在 pl/sql 中创建了一个名为 tester 的包。但我收到以下消息。 绝对URI中的相对路径:java.net.URI.checkPath(URI.java:1823) --Package D
我在 gitlab 上有一个 git repo,使用私有(private) pod 和其他公共(public) pod,下面是我的 Podfile source 'git@gitlab.mycompa
我正在尝试将我的 Rails 应用程序推送到 heroku 上,我正在使用 heroku RedisToGo 附加组件我经历过这个tutorial并完成了那里提到的所有步骤。 但是在推送 heroku
我是一名优秀的程序员,十分优秀!