- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写部署在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,而该URI未被检测到的带有@RequestMapping
注释的处理程序方法处理。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/31640856/
我正在尝试检查 Entry 中是否存在重复项,并使用内联消息提醒用户该数字存在。 $(document).ready(function(){ $("#con1").blur(function(
我有一个基于类的 View 。我在引导模式上使用 Ajax。为了避免页面刷新,我想使用此类基于 View 返回 JSON 响应而不是 HTTP 响应,但我只看到了如何为基于函数的 View 返回 JS
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个大型内部企业基于 Web 的应用程序在 IIS6 上运行 ASP.NET 3.5,生成 401 个“未经授权”响应,然后是 200 个“Ok”响应(如 Fiddler 所述)。我知道为什么会发
感谢您研究我的问题。 我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相
当我使用以下命令时,我得到正确的 JSON 响应: $ curl --data "regno=&dob=&mobile=" https://vitacademics-rel.herokuapp.co
我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件..
UDP 不发送任何 ack,但它会发送任何响应吗? 我已经设置了客户端服务器UDP程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗? 我的假设是; 客户端 --> 广播服务器地
我有一个电梯项目,其中 有一个扩展 RestHelper 的类,看起来像这样 serve{ "api" / "mystuff" prefix { case a
我们正在寻求覆盖 Kong 错误响应结构并编写自定义消息(即用我们的自定义消息替换“超出 API 速率限制”、“无效的身份验证凭据”等)。 我们要找的错误响应结构(代码是自定义的内部错误代码,与HTT
我正在尝试监听 EKEventStoreChangedNotification 以检查当我的应用程序处于后台时日历是否已更改。 我在 View Controller 的 initWithNibMeth
我了解 javascript,并且正在学习 ASP.NET C# 我想要做什么(完成的是javascript): document.getElementById('divID-1'
是否可以过滤所有 har 对象并仅获取 POST 请求/响应?也许在初始化 BrowserMobProxyServer 期间是这样做的方法?我需要将 har 对象保存到文件中并上传到 har 查看器。
我正在尝试向 Oauth 的 API 发送响应。遗憾的是,Symfony2 文档在解释 $response->headers->set(...); 的所有不同部分方面做得很差。 这是我的 OauthC
我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。 下面是我的模拟, with responses.RequestsMock() as rsps: url
在尝试在 Haskell 中进行一些领域驱动设计时,我发现自己遇到了这个问题: data FetchAccessories = FetchAccessories data AccessoriesRes
我正在与 ANT+ USB 棒连接,并用项目 react 器替换我自己天真的“MessageBus”,因为它看起来非常合适。 USB接口(interface)本质上是异步的(单独的输入/输出管道),我
我正在将项目迁移到AFNetworking 2.0。使用AFNetworking 1.0时,我编写了代码来记录控制台中的每个请求/响应。这是代码: -(AFHTTPRequestOperation *
我有以下代码段。 ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){
我有问题......我在 php 中有一个监听器脚本可以执行以下操作: if ($count != 1) {echo 'no';} else { echo "yes";} 因此它会回显"is"或“
我是一名优秀的程序员,十分优秀!