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)
但是我收到了这个错误: "没有映射名称空间/动作名称警报的动作. - [未知位置]"
我该怎么办?
提前致谢.
您可以将带有 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 。
我认为您收到错误是因为您的 struts2 过滤器拦截了所有发送到服务器的请求,并尝试在您的操作中找到映射,但由于/alert实际上指向 servlet,您会看到错误。
解决方案是在 struts 配置文件中添加映射,如下所示:
<action name="alert">
<result>/alert.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
这样,当您请求时,/alert您将获得不带扩展名(您的操作名称)的页面。
| 归档时间: |
|
| 查看次数: |
9099 次 |
| 最近记录: |