从网页隐藏JSP扩展

Ami*_* Sh 5 jsp tomcat struts2 java-ee

我正在开发一个Web应用程序(J2EE,Struts2,JSP,Tomcat)我想从webpages中隐藏.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>
Run Code Online (Sandbox Code Playgroud)

我用Google搜索并找到了这个解决方案:

    <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> 
Run Code Online (Sandbox Code Playgroud)

我尝试过如下,但没有奏效:

例如,我有" 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>
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误: "没有映射名称空间/动作名称警报的动作. - [未知位置]"

我该怎么办?

提前致谢.

Nic*_*lbu 5

您可以将带有 JSP 的目录结构放在 WEB-INF 中,然后使用 servlet 根据请求的 URL 转发到 JSP。

servlet 将映射到通配符模式,例如:

<servlet-mapping>
  <servlet-name>ForwardToJspServlet</servlet-name>
  <url-pattern>*.page</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

或者

<servlet-mapping>
  <servlet-name>ForwardToJspServlet</servlet-name>
  <url-pattern>/pages/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

servlet 的逻辑是将请求的 URL 转换为 JSP 的路径然后转发。

例如,用户请求 URL /yourApp/documents/documentAdd.page并且您转发到/WEB-INF/JSP/documents/documentAdd.jsp下的 JSP 。


doc*_*rey 2

我认为您收到错误是因为您的 struts2 过滤器拦截了所有发送到服务器的请求,并尝试在您的操作中找到映射,但由于/alert实际上指向 servlet,您会看到错误。
解决方案是在 struts 配置文件中添加映射,如下所示:

<action name="alert">
    <result>/alert.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)

这样,当您请求时,/alert您将获得不带扩展名(您的操作名称)的页面。