2013-05-20 84 views
0

我正在嘗試創建一個servlet並使用Tomcat 7。 我添加了一個文件夾,我在web應用文件夾應用程序,它看起來像這樣:Servlet地址不正確

--[webapps] 
    --[agtel] 
     --[web-inf] 
      --[classes] 
       --add.class 
      --web.xml 
     --index.html 

web.xml中包含:

<servlet> 
    <servlet-name>add</servlet-name> 
    <servlet-class>add</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>add</servlet-name> 
    <url-pattern>/add</url-pattern> 
    </servlet-mapping> 

和index.html包含:

<FORM METHOD=GET ACTION="/add"> 

當我按提交按鈕它試圖訪問此:

http://localhost:8080/add 

這會導致404錯誤。但如果我將其更改爲

http://localhost:8080/agtel/add 

那麼當然它執行的小程序

所以我試圖改變在HTML文件的URL

<FORM METHOD=GET ACTION="agtel/add"> 

但隨後嘗試訪問:

http://localhost:8080/agtel/agtel/add 

它爲什麼現在增加兩次名稱?這非常令人困惑,並且讓我發瘋。

+1

你試過了'ACTION =「加」',還是'ACTION =「/ agtel/add」'? – Keppil

+0

'ACTION =「add」'並且由於servlet上下文根是'/ agtel',所以url是'/ agtel/add'。 –

回答

2

當您在HTML中使用URL時,如果沒有前導/它們是相對於當前URL的。憑藉領先的/他們是絕對的:

<FORM METHOD=GET ACTION="/agtel/add"> 

<FORM METHOD=GET ACTION="add"> 

會做你想要什麼。

我建議你添加上下文的行動路徑dinamically例子(JSP)內:

<FORM METHOD=GET ACTION="${pageContext.request.contextPath}/add"> 

有了這個,你將永遠不會有改變路徑,例如,如果您移動文件或複製碼。當然,你需要一個index.jsp。

0

這就是所謂的「上下文」路徑。如果您在同一個Tomcat(或任何應用程序服務器)上運行多個應用程序,則會區分對它們的訪問。 當您將路徑從「/ add」更改爲「add」(不帶前導斜槓)時,它應該可以正常工作!

+0

就是這樣!我在一個例子中看到了斜線(工作正常),並認爲這就是它的本意。非常感謝你! – Adrian