springmvc?html資源請(qǐng)求404的問(wèn)題解決并分析
springmvc html資源請(qǐng)求404問(wèn)題
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>context</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>相比大家都對(duì)url-pattern 路徑/和/*都有所困擾。
網(wǎng)上說(shuō),/不對(duì)(.jsp,.html等)進(jìn)行攔截。/*對(duì)(.jsp,.html等)進(jìn)行攔截。其實(shí)不是這樣的。這兩個(gè)都會(huì)進(jìn)行攔截,只是不同點(diǎn)就是,
/路徑會(huì)先被Tomcat下web.xml里面的servlet攔截。/*規(guī)則
會(huì)覆蓋所有默認(rèn)的servlet,會(huì)將所有請(qǐng)求都攔截了下來(lái)
如果是請(qǐng)求的是html文件。配置成<url-pattern>/</url-pattern>會(huì)出現(xiàn)404 。如果是jsp則可以請(qǐng)求200
接下來(lái)看下tomcat web.xml文件。原因就是tomcat下的web.xml配置了.jsp文件。所以可以正常訪問(wèn)。
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>解決方案
1.那么對(duì)于html文件咋辦?可以在自己項(xiàng)目下web.xml加入
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>2.或者在tomcat下web.xml加入 <url-pattern>*.html</url-pattern>不建議這樣做,不靈活
3.還可以在spring-mvc.xml中針對(duì)資源文件加入以下,也可以解決<mvc:default-servlet-handler/>
springmvc中對(duì)請(qǐng)求的處理
請(qǐng)求參數(shù)處理
在之前的servlet中我們可以通過(guò)request.getParameter()來(lái)獲取請(qǐng)求中的參數(shù),但是在我們編寫(xiě)的SpringMVC的應(yīng)用程序中,在具體請(qǐng)求的方法中并不包含request參數(shù),那么我們應(yīng)該如何獲取請(qǐng)求中的參數(shù)呢?
需要使用以下幾個(gè)注解:
@RequestParam:獲取請(qǐng)求的參數(shù)@RequestHeader:獲取請(qǐng)求頭信息@CookieValue:獲取cookie中的值


復(fù)雜數(shù)據(jù)類(lèi)型處理
JavaBean數(shù)據(jù)綁定



使用userDTO對(duì)user和Role兩個(gè)javaBean對(duì)象進(jìn)行包裝




使用@RequestHeader注解來(lái)獲取請(qǐng)求頭信息

使用@CookieValue注解來(lái)獲取cookie對(duì)象的值

使用原來(lái)的servlet獲取請(qǐng)求參數(shù)的值

注意:我們?cè)讷@取這些參數(shù)的值的時(shí)候,有可能會(huì)遇到亂碼問(wèn)題
亂碼問(wèn)題的解決
我們?cè)诒韱位蛘甙l(fā)送請(qǐng)求的時(shí)候,經(jīng)常會(huì)遇到中文亂碼的問(wèn)題,那么
如何解決亂碼問(wèn)題呢?
GET請(qǐng)求:在server.xml文件中,添加URIEncoding=“UTF8”
POST請(qǐng)求:編寫(xiě)過(guò)濾器進(jìn)行實(shí)現(xiàn)

注意:如果配置了多個(gè)過(guò)濾器,那么字符編碼過(guò)濾器一定要在最前面,否則失效。
web.xml基本配置

spring-mvc.xml的配置

請(qǐng)求映射處理
@RequestMapping
@RequestMapping用來(lái)匹配客戶端發(fā)送的請(qǐng)求,可以在方法上使用,也可以在類(lèi)上使用。
方法:表示用來(lái)匹配要處理的請(qǐng)求
類(lèi)上:表示為當(dāng)前類(lèi)的所有方法的請(qǐng)求地址添加一個(gè)前置路徑,訪問(wèn)的時(shí)候必須要添加此路徑
@RequestMapping的使用


注意:在整個(gè)項(xiàng)目的不同方法上不能包含相同的
@RequestMapping值params : 設(shè)置請(qǐng)求必須攜帶某些參數(shù)


headers: 設(shè)置請(qǐng)求頭必須包含某個(gè)值


consumes: 當(dāng)前請(qǐng)求的內(nèi)容類(lèi)型必須為指定值


produces:設(shè)置當(dāng)前響應(yīng)的內(nèi)容類(lèi)型


映射的URL還可以支持通配符


注意:
/ant 匹配ant 如http://localhost:8080/springmvc/mapping/ant
/ant* 匹配多個(gè)字符 如http://localhost:8080/springmvc/mapping/ant123
/ant? 只能匹配單個(gè)字符 如http://localhost:8080/springmvc/mapping/ant1
/**/ant 可以匹配多層目錄 如http://localhost:8080/springmvc/mapping/1/2/ant
@PathVariable
如果需要在請(qǐng)求路徑中的參數(shù)像作為參數(shù)應(yīng)該怎么使用呢?
可以使用@PathVariable注解,此注解就是提供了對(duì)占位符URL的支持,就是將URL中占位符參數(shù)綁定到控制器處理方法的參數(shù)中。



注意:如果是javaBean可以省略@PathVariable,要保證占位符的名字和javaBean的屬性名字一樣。
REST
REST:客戶端映射到服務(wù)器資源的一種架構(gòu)設(shè)計(jì)。
我們?nèi)绻茏尣煌恼?qǐng)求方式表示不同的請(qǐng)求類(lèi)型就可以簡(jiǎn)化我們
的查詢,改成名詞:
面向資源
看URL就知道要什么, 看http method就知道干什么
- 查詢用戶: http://localhost:8080/xxx/user/1 GET 查詢
- 查詢多個(gè)用戶: http://localhost:8080/xxx/users GET
- 新增用戶: http://localhost:8080/xxx/user POST 新增
- 修改用戶: http://localhost:8080/xxx/user/1 PUT 修改
- 刪除用戶:http://localhost:8080/xxx/user/1 DELETE 刪除
代碼實(shí)現(xiàn)




注意:
使用@PutMapping和@DeleteMapping的時(shí)候,因?yàn)镠TML5不支持這兩種方式,所以應(yīng)當(dāng)在其HTML頁(yè)面中加上****同時(shí)也要在web.xml中使用過(guò)濾器對(duì)HiddenHttpMethodFilter進(jìn)行過(guò)濾。
靜態(tài)資源的訪問(wèn)


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows上nacos自啟動(dòng)的三種方法小結(jié)
本文主要給大家介紹了windows上nacos自啟動(dòng)的三種方法,借助WinSW.exe添加到服務(wù)列表,修改nacos啟動(dòng)配置以及以開(kāi)機(jī)"啟動(dòng)"方式——啟動(dòng)Nacos的startup.cmd這三種方法,文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
IDEA如何配置本地tomcat啟動(dòng)項(xiàng)目
這篇文章主要介紹了IDEA如何配置本地tomcat啟動(dòng)項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java 獲取當(dāng)前函數(shù)名的實(shí)現(xiàn)代碼
以下是對(duì)使用java獲取當(dāng)前函數(shù)名的實(shí)現(xiàn)代碼進(jìn)行了介紹。需要的朋友可以過(guò)來(lái)參考下2013-08-08
淺談Java關(guān)閉線程池shutdown和shutdownNow的區(qū)別
本文主要介紹了Java關(guān)閉線程池shutdown和shutdownNow的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
hadoop中實(shí)現(xiàn)java網(wǎng)絡(luò)爬蟲(chóng)(示例講解)
下面小編就為大家?guī)?lái)一篇hadoop中實(shí)現(xiàn)java網(wǎng)絡(luò)爬蟲(chóng)(示例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09

