日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時(shí)間:2024/9/19 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

您的標(biāo)準(zhǔn)Spring MVC應(yīng)用程序?qū)⑼ㄟ^(guò)您在Servlet容器中注冊(cè)的DispatcherServlet提供所有請(qǐng)求.

DispatcherServlet查看其ApplicationContext,如果可用,則使用ContextLoaderListener注冊(cè)的ApplicationContext用于設(shè)置其請(qǐng)求服務(wù)邏輯的特殊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并按某種順序注冊(cè)它們(可以自定義).在提供請(qǐng)求時(shí),DispatcherServlet循環(huán)遍歷這些HandlerMapping對(duì)象并使用getHandler測(cè)試每個(gè)對(duì)象,以找到可以處理傳入請(qǐng)求的對(duì)象,表示為標(biāo)準(zhǔn)HttpServletRequest.從4.3.x開(kāi)始,如果沒(méi)有找到任何,你看到的是logs the warning

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

和either拋出NoHandlerFoundException或立即提交404 Not Found狀態(tài)代碼的響應(yīng).

為什么DispatcherServlet找不到可以處理我的請(qǐng)求的HandlerMapping?

最常見(jiàn)的HandlerMapping實(shí)現(xiàn)是RequestMappingHandlerMapping,它處理將@Controller bean注冊(cè)為處理程序(實(shí)際上是他們的@RequestMapping注釋方法).您可以自己聲明這種類型的bean(使用@Bean或< bean>或其他機(jī)制),也可以使用the built-in options.這些是:

>使用@EnableWebMvc注釋您的@Configuration類.

>聲明一個(gè)< mvc:annotation-driven /> XML配置中的成員.

正如上面的鏈接所描述的,這兩個(gè)都將注冊(cè)一個(gè)RequestMappingHandlerMapping bean(以及一堆其他的東西).但是,沒(méi)有處理程序,HandlerMapping不是很有用. RequestMappingHandlerMapping需要一些@Controller bean,所以你需要通過(guò)Java配置中的@Bean方法或< bean>來(lái)聲明它們. XML配置中的聲明或通過(guò)@Controller注釋類的組件掃描.確保這些豆子存在.

如果您收到警告消息和404,并且您已正確配置了上述所有內(nèi)容,則您將請(qǐng)求發(fā)送到錯(cuò)誤的URI,該URI不會(huì)被檢測(cè)到的@RequestMapping帶注釋的處理程序方法處理.

spring-webmvc庫(kù)提供了其他內(nèi)置的HandlerMapping實(shí)現(xiàn).例如,BeanNameUrlHandlerMapping地圖

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

而你總是可以自己寫.顯然,您必須確保您發(fā)送的請(qǐng)求至少匹配一個(gè)已注冊(cè)的HandlerMapping對(duì)象的處理程序.

如果您沒(méi)有隱式或顯式注冊(cè)任何HandlerMapping bean(或者如果detectAllHandlerMappings為真),則DispatcherServlet會(huì)注冊(cè)一些defaults.這些在DispatcherServlet.properties中定義在與DispatcherServlet類相同的包中.它們是BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping(類似于RequestMappingHandlerMapping但已棄用).

調(diào)試

Spring MVC將記錄通過(guò)RequestMappingHandlerMapping注冊(cè)的處理程序.例如,像@Controller一樣

@Controller

public class ExampleController {

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

public String example() {

return "example-view-name";

}

}

將在INFO級(jí)別記錄以下內(nèi)容

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

這描述了已注冊(cè)的映射.當(dāng)您看到?jīng)]有找到處理程序的警告時(shí),請(qǐng)將消息中的URI與此處列出的映射進(jìn)行比較. @RequestMapping中指定的所有限制必須與Spring MVC匹配才能選擇處理程序.

其他HandlerMapping實(shí)現(xiàn)記錄它們自己的語(yǔ)句,這些語(yǔ)句應(yīng)該提示它們的映射和相應(yīng)的處理程序.

類似地,在DEBUG級(jí)別啟用Spring日志記錄以查看Spring注冊(cè)的bean.它應(yīng)該報(bào)告它找到哪些帶注釋的類,它掃描哪些包,以及它初始化的bean.如果您所期望的那些不存在,那么請(qǐng)查看您的ApplicationContext配置.

其他常見(jiàn)錯(cuò)誤

DispatcherServlet只是一個(gè)典型的Java EE Servlet.您可以使用典型的< web.xml>注冊(cè)它. &LT; servlet的類&GT;和< servlet-mapping>聲明,或直接通過(guò)WebApplicationInitializer中的ServletContext#addServlet,或Spring引導(dǎo)使用的任何機(jī)制.因此,您必須依賴于Servlet specification中指定的url映射邏輯,請(qǐng)參閱第12章.另請(qǐng)參閱

考慮到這一點(diǎn),一個(gè)常見(jiàn)的錯(cuò)誤是使用/ *的url映射注冊(cè)DispatcherServlet,從@RequestMapping處理程序方法返回視圖名稱,并期望呈現(xiàn)JSP.例如,考慮一個(gè)像這樣的處理程序方法

@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;

}

您可能希望請(qǐng)求是forwarded到路徑為/WEB-INF/jsps/example-view-name.jsp的JSP資源.這不會(huì)發(fā)生.相反,假設(shè)上下文名稱為Example,DisaptcherServlet將報(bào)告

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

因?yàn)镈ispatcherServlet映射到/ *和/ *匹配所有內(nèi)容(具有更高優(yōu)先級(jí)的完全匹配除外),所以將選擇DispatcherServlet來(lái)處理JstlView中的轉(zhuǎn)發(fā)(由InternalResourceViewResolver返回).幾乎在所有情況下,DispatcherServlet都不會(huì)配置為處理這樣??的請(qǐng)求.

相反,在這種簡(jiǎn)單的情況下,您應(yīng)該將DispatcherServlet注冊(cè)到/,將其標(biāo)記為默認(rèn)servlet.默認(rèn)servlet是請(qǐng)求的最后一個(gè)匹配項(xiàng).這將允許您的典型servlet容器在嘗試使用默認(rèn)servlet之前選擇映射到* .jsp的內(nèi)部Servlet實(shí)現(xiàn)來(lái)處理JSP資源(例如,Tomcat具有JspServlet).

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

總結(jié)

以上是生活随笔為你收集整理的为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。