2011-12-29 3 views
2

Я пытаюсь выполнить простую работу с url-шаблоном, который хорошо работает на локальном хосте, но сбой при развертывании приложения на сервере GAE. То, что я хочу сделать, это следующий:Шаблоны URL сервлета в Google App Engine

  • Один сервлет, чтобы удовлетворить все запросы
  • Этот сервлет передаст некоторые запросы 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> 

Это отлично работает с сервером LOCALHOST GAE, но когда приложение развертывается на реальном сервере GAE, он не делает. Проблема в том, что когда я получаю доступ к myapp.appspot.com/anything GAE отвечает:

Ошибка: не найден Запрашиваемый URL/ничего на этом сервере не найдено.

Может ли кто-нибудь мне помочь, plese?

+0

Извините, код не отображается хорошо. сначала должна быть заявка сервлета как «MyServlet». – Marto

ответ

1

Вам не хватает элемента Servlet. Элемент Servlet-mapping сам по себе недостаточен. Строительство от вашего 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 с реальным пакетом вашего MyServlet класса. Как только вы это сделаете, вы можете добавить несколько элементов отображения сервлета для сопоставления разных URL-адресов с одним сервлетом.

Если это происходит на вашем appspot URL, вы можете попробовать и убедиться, что все ваши статические файлы развертываются в вашем appspot ...

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

Сразу отметим, что это означает, что вы устанавливаете все xmls/css в вашем военном файле. При необходимости отрегулируйте атрибут include path, если вы не хотите этого делать.

Кроме того, чтобы все запросы идут на один сервлет, используйте следующий шаблон URL-адрес ...

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

Просто имейте в виду, используя этот шаблон, если у вас есть изображения/CSS файлы/JSP файлы/etc, что этот сервлет перехватит запрос для них. Таким образом, у вас будет какая-то логика, которая перенаправляет запросы, которые вас не интересуют. Этого может быть достаточно, если вы делаете что-то прямое; но по мере усложнения (например, кэширование файлов css/файлов изображений) вам, вероятно, захочется заглянуть в добавление фильтра статических ресурсов.

+0

Спасибо Дэйв. Это была ошибка отправки кода, но у меня уже есть тег сервлета в моем web.xml. На самом деле, он хорошо работает в localhost ... :( – Marto

+0

Если это так, то вам, вероятно, следует обновить свой ответ, чтобы включить полную полную трассировку web.xml (перейдите на страницу https://appengine.google. com/dashboard? & app_id = s ~ YOUR-APPSPOT-SUBDOMAIN', где 'YOUR-APPSPOT-SUBDOMAIN' находится из' YOUR-APPSPOT-SUBDOMAIN.appspot.com', и он должен находиться в разделе «Ошибки» внизу справа). – Dave

+0

Кроме того, возможно, ваш веб-xml не был загружен должным образом. Вы можете проверить, отредактировав ваш appengine-web.xml и добавив элемент статических файлов, как я описал, если вы еще этого не сделали. – Dave

Смежные вопросы