2011-12-29 154 views
2

Servlet的URL模式我試圖做的是在本地主機上運行良好,但是當應用程序部署在GAE服務器上失敗的url-pattern一些簡單的工作。 下一步做什麼我想要做的是:在谷歌應用程序引擎

  • 一個servlet來服務所有請求
  • 這個servlet會轉發一些請求JSP文件(在大多數情況下)

要做到這一點我已經配置web.xml中:

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.mycompany.MyServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/MyServlet</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>MyServlet</welcome-file> 
</welcome-file-list> 

也能正常工作與本地主機GAE服務器,但是當應用程序部署在真正的GAE服務器上,它沒有。問題是,當我訪問myapp.appspot.com/anything時,GAE迴應:

錯誤:找不到 在此服務器上未找到請求的URL /任何內容。

誰能幫助我,普萊舍?

+0

對不起,代碼顯示不好。首先必須是「MyServlet」的servlet聲明。 – Marto 2011-12-29 23:52:03

回答

1

你錯過了Servlet元素。 Servlet-mapping元素本身是不夠的。你MyServlet類的實際包構建了你的web.xml中試試這個....

<servlet> 
      <servlet-name>MyServlet</servlet-name> 
      <servlet-class>package.path.to.my.servlet.MyServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
      <servlet-name>MyServlet</servlet-name> 
      <url-pattern>/MyServlet</url-pattern> 
    </servlet-mapping> 

當然更換package.path.to.my.servlet。一旦你完成了這個工作,你可以放入多個servlet映射元素來映射不同的url到同一個servlet。

如果這是你的Appspot上的網址發生的事情,你可以嘗試,並確保所有靜態文件正在部署到Appspot上...

<static-files> 
     <include path="/**.css" /> 
     <include path="/**.xml" /> 
    </static-files> 

只是注意,這意味着你所有的部署xmls/css文件在您的war文件中。如果您不想這樣做,請相應地調整包含路徑屬性。

此外,有所有的請求去一個小服務程序,只需使用下面的URL模式...

<url-pattern>/*</url-pattern> 

使用此模式時,請注意只要繼續,如果您有圖片/ CSS文件/ jsp文件/ etc這個servlet會攔截他們的請求。所以你會有一些邏輯來轉發你不感興趣的請求。如果你正在做一些簡單的事情,這可能就足夠了。但是隨着你變得更加複雜(如緩存css文件/圖像文件),你可能會想要考慮添加靜態資源過濾器。

+0

謝謝戴夫。發佈代碼是一個錯誤,但我的web.xml中已經有了servlet標籤。事實上,它的工作原理以及在本地主機... :( – Marto 2011-12-30 01:00:14

+0

如果是這樣的話,那麼你或許應該更新您的答案,包括完整的web.xml,完整的堆棧跟蹤(去'https://appengine.google。 COM /儀表盤?&APP_ID = S〜YOUR-Appspot上-SUBDOMAIN'其中'YOUR-Appspot上-SUBDOMAIN'是從'YOUR-Appspot上-SUBDOMAIN.appspot.com'並且它應該是在右下方的'Errors'部分)。 – Dave 2011-12-30 02:07:27

+0

此外,有可能你的網頁的XML沒有正確上傳。您可以通過調節您的AppEngine-web.xml和添加,如果你還沒有我所描述的靜態文件元素驗證。 – Dave 2011-12-30 02:16:22