Скрыть расширение JSP от веб-страниц - PullRequest
5 голосов
/ 20 июня 2011

Я занимаюсь разработкой веб-приложения (J2EE, Struts2, JSP, Tomcat) Я хочу скрыть расширение .jsp от веб-страниц.

Вот часть моего web.xml:

     <filter>
         <filter-name>STSDispatcher</filter-name>
         <filter-class>
           org.apache.struts2.dispatcher.FilterDispatcher
         </filter-class>
     </filter>

     <filter-mapping>
         <filter-name>STSDispatcher</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>

     <welcome-file-list>
         <welcome-file>Login.jsp</welcome-file>
     </welcome-file-list>

Я погуглил и нашел это решение:

    <servlet>  
         <servlet-name>myFoo</servlet-name>  
         <jsp-file>myJSPfile.jsp</jsp-file>  
    </servlet>  
    <servlet-mapping>  
         <servlet-name>myFoo</servlet-name>  
         <url-pattern>/main</url-pattern>  
    </servlet-mapping> 

Я попробовал это, как показано ниже, но не сработало:

например у меня есть " alert.jsp ", и это мой web.xml:

<servlet>
    <servlet-name>alert</servlet-name>
    <jsp-file>/alert.jsp</jsp-file>
 </servlet> 

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

но я получил эту ошибку: "Для оповещения о пространстве имен / и имени действия не сопоставлено действие. - [неизвестное местоположение]"

Что мне делать?

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 20 июня 2011

Вы можете поместить структуру каталогов с JSP в WEB-INF, а затем использовать сервлет для пересылки в JSP в соответствии с запрошенным URL.

Сервлет будет сопоставлен с шаблоном подстановки, например:

<servlet-mapping>
  <servlet-name>ForwardToJspServlet</servlet-name>
  <url-pattern>*.page</url-pattern>
</servlet-mapping>

или

<servlet-mapping>
  <servlet-name>ForwardToJspServlet</servlet-name>
  <url-pattern>/pages/*</url-pattern>
</servlet-mapping>

, и логика сервлета будет преобразовывать запрошенный URL-адрес в путь JSP и затем пересылать.

Например,пользователь запрашивает URL / yourApp / documents / documentAdd.page , и вы пересылаете его в JSP по адресу / WEB-INF / JSP / documents / documentAdd.jsp .

2 голосов
/ 22 июня 2011

Я думаю, что вы получаете ошибку, потому что ваш фильтр struts2 перехватывает все запросы, поступающие на сервер, и пытается найти отображение в ваших действиях, но поскольку /alert фактически указывает на сервлет, вы видите ошибку.
Решениебудет иметь отображение в вашем файле конфигурации Struts, например:

<action name="alert">
    <result>/alert.jsp</result>
</action>

Таким образом, когда вы запрашиваете /alert, вы получаете страницу без расширения (название вашего действия).

2 голосов
/ 20 июня 2011
0 голосов
/ 20 июня 2011

Этот метод действительно должен работать.Другой альтернативой является редактирование файла htaccess, добавьте это

RewriteEngine On
RewriteRule ^([0-9a-zA-Z]+)$  $1.jsp

Любой xyz.jsp будет xyz после этого.Я действительно нашел этот метод несколько дней назад на Как скрыть расширение .jsp в URL моего веб-сервера

...