jsp中的請求servlet操作的跳轉<a href = 地址與xml中servlet注冊的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> ??????</servlet-mapping>
而在工程里面的位置也如視頻內提示的一樣
src--|
?| ? ? ?servlet--|
?| ? ? ? ? ? ? ? ? TheServlet
WebRoot--|
?| ? ? ? ? ? ? ? WEB-INF--|
?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? web.xml
?| ? ? ? ? ? ? ? reg.jsp
這樣整個的流轉流程是怎么樣的,在1-4節中的說明中,似乎由reg.jsp的超鏈接,獲得的請求地址進入web.xml進行匹配判斷,得到了對應的servlet,再由servlet定義的Class去進行相應的doget()方法。所以1-4節好像在說明:reg.jsp的超鏈接無論指向何處都沒關系,只需要與在web.xml注冊的servlet的url-pattern匹配即可?
但在1-13節的講解中,說明了這個reg.jsp的超鏈接是直接鏈接到了項目虛擬地址/servlet/TheServlet,而在web.xml注冊的servlet的url-pattern,是指項目中的這個servlet的地址(這里存在問題,這個屬于地址么?如果是地址,指示一個TheServlet的文件,那么不需要后綴么?),在修改了url-pattern之后,在啟動項目都無法進行了,是否相當于url-pattern要綁定(或者說鏈接)一個servlet.java?如果這樣那么還需要所謂的servlet-class來指示類文件么?
所有主要的問題就兩個:1、Jsp文件中的這個get方式的請求的超鏈接,到底是要指向什么?是一個確實的文件?還是一個隨意的地址,只要servlet能接收這個超鏈接請求并返回信息即可?
2、在web.xml配置注冊的servlet的url-pattern屬性到底是什么東西,為什么沒有首/就會出現連服務都無法啟動的情況,是因為它要確實指向一個確實存在的servlet實現類嗎?還是一個為了和Jsp超鏈接請求相互匹配進行處理的匹配數據信息,只是因為在jsp中使用的時候有默認添加上下文地址之類的操作,才導致必須添加首/,而在jsp中不能添加首/?
我的問題可能有些亂,初學JSP,不理解servlet,希望能得到指導
2016-07-12
你好
先說你的第一個問題 我的理解是請求的地址,你可以把里面的測試路徑隨便更改為"?會發現直接跳轉到百度首頁了.?因為我使用的是IDE是IDEA,所以使用了JAVA EE 6的注解功能,并沒有添加文件到web.xml,所以理解角度可能和你不一樣了,我的是這樣的,在Servlet文件的開始有如下:
假如沒有urlPatterns這個參數,無論你的href寫什么都會是404;
在回答你第一個問題的時間就牽扯到你第二個問題了,
在web.xml配置注冊的servlet的url-pattern屬性到底是什么東西
然后你問
這里存在問題,這個屬于地址么?如果是地址,指示一個TheServlet的文件,那么不需要后綴么?
那么我們是不是可以理解為?url-pattern 就是路徑參數,因為這個就是Servlet的參數,所以是不需要后綴的,也就是說我們的Servlet類文件會注冊一個路徑(注意我說的是路徑.)
然后就回到我們最開始的 1-13中老師有講相對和絕對對吧.
------分割線------
我剛才做了一個測試?
你可以把urlPatterns的參數改為任意名稱,與你的Servlet文件名完全無關,然后在?<a href="servlet/HelloServlet">中改為相同的一樣可以跳轉.
所以我們可以不可以這樣理解呢,?url-pattern/urlPatterns 只是給你的Servlet文件起了一個路徑,就好像我們每個人都有用戶名一樣.
只要兩處一致,即可跳轉訪問,這大概也是老師一開始說的注冊Servlet的意思呢.
寫了這么多可能有點亂,現在重新回答你的兩個問題:
1、Jsp文件中的這個get方式的請求的超鏈接,到底是要指向什么?是一個確實的文件?還是一個隨意的地址,只要servlet能接收這個超鏈接請求并返回信息即可?
A:超鏈接就是路徑,路徑當然指向的還是文件. 所以最終還是文件.
2、在web.xml配置注冊的servlet的url-pattern屬性到底是什么東西,為什么沒有首/就會出現連服務都無法啟動的情況,是因為它要確實指向一個確實存在的servlet實現類嗎?還是一個為了和Jsp超鏈接請求相互匹配進行處理的匹配數據信息,只是因為在jsp中使用的時候有默認添加上下文地址之類的操作,才導致必須添加首/,而在jsp中不能添加首/?
A:url-pattern這個屬性就是一個名字,而且與實際路徑無關(可以理解為虛擬路徑或者別名),并不是文件真實路徑(這樣回答會不會與第一個問題的回答沖突),因為這里的首/表示為項目的根目錄,沒有就會出現找不到加載路徑所以無法啟動吧.結論無論在普通的Java類中還是Servlet還是JSP,我們都需要一個明確且唯一的路徑.(無論相對還是絕對,肯定是唯一的)