jsp中的請(qǐng)求servlet操作的跳轉(zhuǎn)<a href = 地址與xml中servlet注冊(cè)的url-pattern到底有什么要求?
在reg.jsp文件中是
<a?href?=?"servlet/TheServlet">gotoServlet</a>
在配置文件中是
??????<servlet> ????????<servlet-name>TheServlet</servlet-name> ????????<servlet-class>servlet.TheServlet</servlet-class> ????????<load-on-startup>1</load-on-startup> ????</servlet> ????<servlet-mapping> ????????<servlet-name>TheServlet</servlet-name> ????????<url-pattern>/servlet/TheServlet</url-pattern>
而在工程里面的位置也如視頻內(nèi)提示的一樣
src--|
?| ? ? ?servlet--|
?| ? ? ? ? ? ? ? ? TheServlet
WebRoot--|
?| ? ? ? ? ? ? ? WEB-INF--|
?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? web.xml
?| ? ? ? ? ? ? ? reg.jsp
這樣整個(gè)的流轉(zhuǎn)流程是怎么樣的,在1-4節(jié)中的說(shuō)明中,似乎由reg.jsp的超鏈接,獲得的請(qǐng)求地址進(jìn)入web.xml進(jìn)行匹配判斷,得到了對(duì)應(yīng)的servlet,再由servlet定義的Class去進(jìn)行相應(yīng)的doget()方法。所以1-4節(jié)好像在說(shuō)明:reg.jsp的超鏈接無(wú)論指向何處都沒(méi)關(guān)系,只需要與在web.xml注冊(cè)的servlet的url-pattern匹配即可?
但在1-13節(jié)的講解中,說(shuō)明了這個(gè)reg.jsp的超鏈接是直接鏈接到了項(xiàng)目虛擬地址/servlet/TheServlet,而在web.xml注冊(cè)的servlet的url-pattern,是指項(xiàng)目中的這個(gè)servlet的地址(這里存在問(wèn)題,這個(gè)屬于地址么?如果是地址,指示一個(gè)TheServlet的文件,那么不需要后綴么?),在修改了url-pattern之后,在啟動(dòng)項(xiàng)目都無(wú)法進(jìn)行了,是否相當(dāng)于url-pattern要綁定(或者說(shuō)鏈接)一個(gè)servlet.java?如果這樣那么還需要所謂的servlet-class來(lái)指示類文件么?
所有主要的問(wèn)題就兩個(gè):1、Jsp文件中的這個(gè)get方式的請(qǐng)求的超鏈接,到底是要指向什么?是一個(gè)確實(shí)的文件?還是一個(gè)隨意的地址,只要servlet能接收這個(gè)超鏈接請(qǐng)求并返回信息即可?
2、在web.xml配置注冊(cè)的servlet的url-pattern屬性到底是什么東西,為什么沒(méi)有首/就會(huì)出現(xiàn)連服務(wù)都無(wú)法啟動(dòng)的情況,是因?yàn)樗?strong>確實(shí)指向一個(gè)確實(shí)存在的servlet實(shí)現(xiàn)類嗎?還是一個(gè)為了和Jsp超鏈接請(qǐng)求相互匹配進(jìn)行處理的匹配數(shù)據(jù)信息,只是因?yàn)樵趈sp中使用的時(shí)候有默認(rèn)添加上下文地址之類的操作,才導(dǎo)致必須添加首/,而在jsp中不能添加首/?
我的問(wèn)題可能有些亂,初學(xué)JSP,不理解servlet,希望能得到指導(dǎo)
2016-10-06
其實(shí)老師講的內(nèi)容有一定的誤解。
先回答斜杠的問(wèn)題:
jsp頁(yè)面中有相對(duì)路徑和絕對(duì)路徑的問(wèn)題是因?yàn)閖sp頁(yè)面其實(shí)是一個(gè)網(wǎng)頁(yè),通過(guò)超文本或者action的方式可以連接到任何url,這里的任何url指的是可以是本項(xiàng)目的,或者另外項(xiàng)目的,或者甚至是外部鏈接,比如你這么寫(xiě): action =“http://www.baidu.com”,那么這個(gè)form的數(shù)據(jù)就提交給百度了,所以一定要區(qū)分相對(duì)和絕對(duì)路徑,默認(rèn)不加斜杠就是相對(duì)路徑:當(dāng)前主機(jī)+端口+上下文(項(xiàng)目)+當(dāng)前目錄,那么剩下的就是絕對(duì)路徑了,你加上斜杠以后web服務(wù)器不知道你要把這個(gè)form或者url鏈接到什么地方(萬(wàn)一你要鏈接同一臺(tái)服務(wù)器上的另外一個(gè)工程ServletLoginDemo2)所以web服務(wù)器就把/表示主機(jī)的根目錄,所以你要是寫(xiě)成action="/servlet/Servlet"的話就會(huì)讓你去訪問(wèn)localhost:8080/servlet/Servlet目錄,其實(shí)這里還是一個(gè)相對(duì)路徑(是相對(duì)于本主機(jī)的一個(gè)絕對(duì)路徑)。
而servlet是不能夠鏈接到別的項(xiàng)目的servlet的,所以這里面沒(méi)有一個(gè)相對(duì)路徑和絕對(duì)路徑的概念,一定是本項(xiàng)目下的,所以在tomcat得servlet容器的代碼里面就是這么實(shí)現(xiàn)的,url-patten一定要加上/:host+port+context+servlet-patten組成這個(gè)servlet的訪問(wèn)地址,否則啟動(dòng)的時(shí)候檢查xml就會(huì)報(bào)錯(cuò)不能啟動(dòng)。
另外你問(wèn)的url-patten是否一定要指向某個(gè)類,這個(gè)也是老師為了講解方便把url-patten直接寫(xiě)成實(shí)際的目錄結(jié)構(gòu)給你產(chǎn)生的誤導(dǎo),url-patten并不需要指向具體的類,你可以理解成一個(gè)別名,他主要的作用是用來(lái)匹配路徑和隱藏一些內(nèi)部實(shí)現(xiàn),url-patten有三種匹配規(guī)則你可以搜索下,舉個(gè)例子url-patten可以模糊匹配,你如說(shuō)你可以寫(xiě)成這樣
<url-pattern>/test/*</url-pattern>那么所有訪問(wèn)host+port+context/test/后面跟任何內(nèi)容的地址都會(huì)去訪問(wèn)這個(gè)servlet。
同時(shí)你可以寫(xiě)成/login.do這樣可以隱藏你的內(nèi)部實(shí)現(xiàn),你甚至可以寫(xiě)成/login.jsp或者/login/login/login(除了第一個(gè)/表示當(dāng)前目錄,后面的/不代表任何目錄的意思,他就是一個(gè)符號(hào)).
所以servelt的url-pattern你可以隨意寫(xiě)。
2016-07-26
url-pattern具體設(shè)置時(shí)沒(méi)有限制,只是你在訪問(wèn)這個(gè)servlet的時(shí)候用你設(shè)定的url-pattern的那個(gè)訪問(wèn)名。
2016-07-16
web.xml配置文件中的好像只是映射路徑,具體的與JSP跳轉(zhuǎn)沒(méi)關(guān)系
2016-07-08
因?yàn)槟憬ǖ膉sp本來(lái)就和你下載的jsp都在一個(gè)文件夾里面
而你新建的servlet是在src這個(gè)文件夾里所有要..回到上級(jí)目錄在查詢用"../加上你要跳轉(zhuǎn)的jsp文件"
而你說(shuō)的xml文件要配置那是servlet必須要的啊 和jsp跳轉(zhuǎn)好像沒(méi)關(guān)系