2010-11-28 4 views
0

У меня возникли вопросы о отправке запроса в сервлет.Servlet - запрос на отправку, когда url-patern похож на

Чтобы подвести итог, я развернул сайт на общедоступном сервере, что заставило меня иметь url-шаблон вроде/servlet/* для всех моих сервлетов (я слышал, что это была конфигурация по умолчанию в любом случае). Проблема в том, что при разработке приложения у меня не было таких ограничений и поэтому не построил его для поддержки таких шаблонов ... теперь мое приложение просто не работает из-за URL-адресов. Скажем, мне сервлет объявляется и отображается так:

<servlet> 
    <servlet-name>MainController</servlet-name> 
    <servlet-class>controller.controllers.MainController</servlet-class> 
</servlet> 

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

Проблема заключается в том, что я использую этот код в моем Servlet:

this.getServletContext() 
      .getRequestDispatcher(destination).forward(request, response); 

Параметр destination всегда *.jsp в корне моего веб-приложение Juste как «/index.jsp», «home.jsp» и т.д.

Когда я использую мое приложение на локальном хосте мой сервлет имел этот шаблон URL:

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

и все работало нормально, потому что диспетчер запросов всегда искал .jsp в корне webapp. Но теперь с моим новым URL-шаблон, он пытается Серч все мои .jsp в сервлет/* так же, как servlet/index.jsp и, Corse бросить мне HTTP Status 404 - /servlet/index.jsp

Я прекрасно понимаю, почему он ведет себя так, как, если я помню ну, сервлеты не могут распространяться за пределы их текущего контекста.

Но мой вопрос: я обречен? Разве нет способа сказать диспетчеру запроса перейти к .jsp, я спрашиваю, не заботясь о шаблоне «/ servlet/*»? Мне абсолютно нужен объект запроса, потому что я работаю с ним перед его отправкой.

Я действительно не знаю, как пройти через это, поэтому я ищу какую-то помощь здесь, надеясь, что кто-то уже столкнулся с этой ситуацией или, по крайней мере, получил более четкое видение ситуации, чем я.

Спасибо, что нашли время, чтобы прочитать это и помочь мне.

С уважением,

Sampawende.

ответ

0

Итак, destination не начинается с /, что делает его местоположение зависеть от пути вызывающего сервлета?

исправить это, соответственно:

request.getRequestDispatcher("/" + destination).forward(request, response); 

Кстати, если вы хотите, чтобы предотвратить прямой доступ к JSP, а также (конечный пользователь может изменить URL, чтобы указать на JSP без вызова контроллера первый), затем рассмотрите размещение JSP в папке /WEB-INF. Не забудьте изменить путь RequestDispatcher соответственно: "/WEB-INF/" + destination.

+0

Hi BalusC, благодарит за ваш быстрый ответ. На самом деле все мои пункты назначения начинаются с «/», даже если бы действительно было лучше добавить чек непосредственно перед отправкой. Сейчас мое приложение проверяет, должны ли страницы возвращаться на сервер перед их отображением, поэтому доступ к ним напрямую не является проблемой. Да, мое приложение действительно основано на этом getRequestDispatcher(). Forward (request, response), поэтому ничего не работает. , но в любом случае точки, которые вы говорите, интересны, и я буду реорганизовывать свой код на некоторые моменты, спасибо. С уважением, Sampawende. – Sampawende

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

  • Нет связанных вопросов^_^