Servlet - Отправка запроса, когда URL-адрес похож на - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть вопросы по отправке запроса в сервлете.

Подводя итог, я развернул веб-сайт на общедоступном сервере, что вынуждает меня иметь шаблон 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>

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

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

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

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

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

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

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

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

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

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

С уважением,

Sampawende.

1 Ответ

0 голосов
/ 29 ноября 2010

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

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

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

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

...