我有基于JSP的简单Web应用程序。应用程序的根看起来像这样:
|
|--META-INF
|--WEB-INF
| `--web.xml
|--img
|--css
|--index.jsp
|--some1.jsp
|--some2.jsp
|--some3.jsp
其中web.xml包含以下行:
<servlet>
<servlet-name>servlet-jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet-jsp</servlet-name>
<url-pattern>/*.jsp</url-pattern>
</servlet-mapping>
现在我想要更改项目的文件结构 - 将所有* .jsp文件移动到特殊目录:
|
|--META-INF
|--WEB-INF
| `--web.xml
|--img
|--css
|--jsp
|--index.jsp
|--some1.jsp
|--some2.jsp
|--some3.jsp
当“/some1.jsp”url请求时,是否可以配置“servlet-jsp”来处理jsp / some1.jsp?
答案 0 :(得分:3)
我认为很多(所有?)容器已经将*.jsp
(在任何目录中)映射到JSP servlet,因此只有在想要为JSP使用自定义文件扩展名时才需要编写这样的显式servlet映射。 。更直接地说明:您可以删除您编写的servlet映射。
最好通过定义filter mapping来完成/
到/jsp
中对JSP文件的转发请求。您还需要编写自己的过滤器类。过滤器有点像Servlets,但它们不像JSP或Servlet那样生成内容,而是更像是一个流量控制器,[重新]引导请求。
答案 1 :(得分:1)
您可以使用/jsp/
request.getRequestDispatcer(targetJsp).forward()
的servlet,然后在servlet映射之后解析路径并转发到JSP
答案 2 :(得分:0)
<servlet-mapping>
<servlet-name>servlet-jsp</servlet-name>
<url-pattern>/jsp/*.jsp</url-pattern>
</servlet-mapping>
我认为这应该可以解决问题。