проблема с дескриптором развертывания - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь загрузить приложение в мой локальный экземпляр tomcat.Когда я вписываю адрес в строку URL после запуска tomcat, я получаю сообщение об ошибке 404-not found, хотя ресурсы были там.Я сделал много проб и ошибок и нашел что-то в файле DD.Часть дескриптора развертывания содержит следующий код ..

<servlet>
    <servlet-name>invoker</servlet-name>
    <servlet-class>
        org.apache.catalina.servlets.InvokerServlet
    </servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>invoker</servlet-name>
    <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

Когда я комментировал эту часть из файла web.xml, я смог успешно получить доступ к ресурсам из браузера.Так что я уверен, что проблема в этом коде, но я не могу понять, что это такое.Может кто-нибудь объяснить, что делает этот код и почему я получаю сообщение об ошибке.?Заранее спасибо.

Редактировать: Для записи я пытался получить доступ к ресурсам непосредственно в корневой папке... http://localhost/myapp/index.jsp

1 Ответ

0 голосов
/ 22 марта 2011

Это устаревшее специфическое для Tomcat InvokerServlet, которое присутствовало в древних версиях Apache Tomcat (и до сих пор упоминается в плохих и устаревших руководствах / книгах).Это было в темные времена, когда можно было вызывать сервлеты без необходимости отображать их в web.xml.Вам просто нужно ввести полное имя класса сервлета в URL-адресе после пути /servlet.

Позже было подтверждено, что это была дыра в безопасности и уязвима для атак .Он был отключен и объявлен устаревшим в Tomcat 5.0 в 2002 году (!) И удален в Tomcat 7.0 в 2009 году.

Вы можете безопасно удалить его.Это не добавляет никакой ценности.Начиная с Tomcat 7.0 / Servlet 3.0 вам даже больше не нужно отображать сервлеты в web.xml.Вместо этого вы можете использовать аннотацию @WebServlet.

package com.example;

@WebServlet(urlPatterns = { "/MyServlet" })
public class MyServlet extends HttpServlet {

    // ...

}

Что касается проблемы concrete , почему она работает после ее удаления, вы, вероятно, использовалинеправильные URL.Может быть, вы также назвали свой корневой путь контекста servlet?

...