开发Web应用程序(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>
我用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>
我在下面尝试了这个,但是没有用:
例如我有“ 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>
但是我收到了这个错误: “没有针对命名空间/操作名称警报映射的操作。 - [未知位置]”
我该怎么办?
提前致谢。
答案 0 :(得分:4)
您可以将带有JSP的目录结构放在WEB-INF中,然后使用servlet根据请求的URL转发到JSP。
servlet将映射到通配符模式,如:
<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>
并且servlet的逻辑将把请求的URL转换为JSP的路径然后转发。
例如,用户请求URL /yourApp/documents/documentAdd.page ,然后转到 /WEB-INF/JSP/documents/documentAdd.jsp 下的JSP 强>
答案 1 :(得分:2)
答案 2 :(得分:2)
我认为你得到了错误,因为你的struts2过滤器拦截了所有进入服务器的请求,并试图在你的行动中找到一个映射,但是因为/alert
实际指向一个servlet,你会看到错误。
解决方案是在struts配置文件中使用映射,如:
<action name="alert">
<result>/alert.jsp</result>
</action>
这样,当您请求/alert
时,您将获得没有扩展名的页面(您的操作名称)。
答案 3 :(得分:0)
该方法应该可行。其他选择是编辑htaccess文件,添加此
RewriteEngine On
RewriteRule ^([0-9a-zA-Z]+)$ $1.jsp
执行此操作后,任何xyz.jsp都是xyz。几天前我才发现这种方法 How to hide the .jsp extension in my web server urls