2013-08-23 2 views
2

Я создал сервлет под названием MainContent. и у меня есть такое отображениесоздать сервлет url-pattern с "/"

<servlet> 
    <display-name>MainContent</display-name> 
    <servlet-name>MainContent</servlet-name> 
    <servlet-class>ge.test.servlet.MainContent</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MainContent</servlet-name> 
    <url-pattern>/main</url-pattern> 
</servlet-mapping> 

так, когда я иду по ссылке: // локальный: 8080/MyAppl/главный вхожу в метод сервлеты doGet(). Затем я создаю RequestDispatcher вперед к index.jsp.

все работает!

RequestDispatcher rd = context.getRequestDispatcher("/index.jsp?language="+ lang); 
rd.forward(request, response); 

все работает!

Вопрос:

Теперь мне нужно изменить URL-шаблон. Мне нужно что-то вроде этого: когда я вхожу в localhost: 8080/MyAppl/ Мне нужно перенаправить на свой сервлет. Так я создаю что-то вроде этого:

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

нормально, это работает! Я перенаправлен на сервлет. но здесь что-то не так. когда Servlet создал RequestDispatcher вперед, в моем index.jsp не было изображений и css. , когда я вижу в консоли Firebug, я видел, что ошибки:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8080/MyApp/font/font_big.css". localhost/:15 
Resource interpreted as Image but transferred with MIME type text/html: "http://localhost:8080/MyApp/IMG/company.gif". 

Как я могу исправить это?

+0

Проблема Вы сталкиваетесь в том, что все ваши пути ресурсов начинаются с /. Вам нужно добавить что-то для обработки ресурсов (для этого был весенний сервлет ресурсов) и с использованием общего шаблона URL для идентификации ресурсов (например, все ресурсы начинаются с «/ Resourcde»), а затем добавление сопоставления сервлетов обработчика ресурсов до того,/"в вашем файле web.xml – DwB

+0

это демонстрирует весеннее решение: http://stackoverflow.com/questions/6047150/using-spring-resourceservlet-to-serve-multiple-resources-simultaneous – DwB

+0

Я не использую Spring. Я использую только сервлеты и JSP. можете ли вы привести мне пример, как это сделать? – grep

ответ

2

Да, как указано на @DwB, контекст «/» представляет собой проблематичный шаблон URL, и это вызывает вашу проблему.

Использование

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

вместо этого. Это «способ сервлета 3.0» для этого.

Источники

[1] http://www.coderanch.com/t/366340/Servlets/java/servlet-mapping-url-pattern

[2] How can I map a "root" Servlet so that other scripts are still runnable?

+0

Итак, используйте пустой как специальный шаблон url. – mico

+0

ДА! это работает! – grep