В первоначальном вопросе не упоминается, что они пытаются отобразить корневой сервлет в App Engine - это легко для Tomcat (и, насколько я знаю, для других контейнеров сервлетов), но App Engine не является обычным контейнером сервлета.
Мой обычный способ создания веб-приложения с сервлетами - это расширение HttpServlet, добавление объекта «page» с заголовком, содержимым, ошибками, сообщениями и т. Д. И для вывода вперед в шаблон JSP. Это стало абсолютным кошмаром для работы в App Engine.
- Файлы JSP не могут быть названы без "/" в начале.
- Файлы JSP не могут находиться в подкаталоге
- Сервлеты не могут быть сопоставлены с корнем вашего приложения с помощью "/" url-pattern
Вот мой web.xml (отредактированный для краткости), который наконец заработал.
<web-app>
<servlet>
<!-- this servlet needs to redirect to a NamedDispatcher
called "template" -->
<servlet-name>Home</servlet-name>
<servlet-class>my.domain.HomeSv</servlet-class>
</servlet>
<servlet>
<!-- jsp file must apparently be in root directory and have "/" at
start of path -->
<servlet-name>template</servlet-name>
<jsp-file>/template.jsp</jsp-file>
</servlet>
<servlet-mapping>
<!-- map your home servlet to somewhere other than "/" -->
<servlet-name>Home</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
<welcome-file-list>
<!-- make your Home servlet the welcome file -->
<welcome-file>home</welcome-file>
</welcome-file-list>
</web-app>
Я не особо занимался научным обоснованием всего этого - но, похоже, сейчас это работает для меня, и я очень рад этому.