日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/9/19 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么运行了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>注冊它. &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响应并报告“在...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。