亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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,希望能得到指導


正在回答

1 回答

你好

先說你的第一個問題 我的理解是請求的地址,你可以把里面的測試路徑隨便更改為"?會發現直接跳轉到百度首頁了.?因為我使用的是IDE是IDEA,所以使用了JAVA EE 6的注解功能,并沒有添加文件到web.xml,所以理解角度可能和你不一樣了,我的是這樣的,在Servlet文件的開始有如下:

@WebServlet(name?=?"TestServlet",urlPatterns?=?{"/servlet/TestServlet"})

假如沒有urlPatterns這個參數,無論你的href寫什么都會是404;

在回答你第一個問題的時間就牽扯到你第二個問題了,

在web.xml配置注冊的servlet的url-pattern屬性到底是什么東西

然后你問

這里存在問題,這個屬于地址么?如果是地址,指示一個TheServlet的文件,那么不需要后綴么?

那么我們是不是可以理解為?url-pattern 就是路徑參數,因為這個就是Servlet的參數,所以是不需要后綴的,也就是說我們的Servlet類文件會注冊一個路徑(注意我說的是路徑.)

然后就回到我們最開始的 1-13中老師有講相對和絕對對吧.

<%--使用相對路徑訪問--%>
<%--?/servlet/HelloServlet?第一個/?表示服務器的根目錄?--%>
<a?href="servlet/HelloServlet">訪問HelloServlet!</a><br>
<%--使用絕對路徑訪問?可以使用path變量:path變量表示項目的根目錄--%>
<a?href="<%=path%>/servlet/HelloServlet">訪問HelloServlet使用Path</a><br>

------分割線------

我剛才做了一個測試?

@WebServlet(name?=?"TestServlet",urlPatterns?=?{"/servlet/TestServlet"})

你可以把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,我們都需要一個明確且唯一的路徑.(無論相對還是絕對,肯定是唯一的)


舉報

0/150
提交
取消

jsp中的請求servlet操作的跳轉<a href = 地址與xml中servlet注冊的url-pattern到底有什么要求?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號