2010-11-24 68 views
3

我有基于JSP的简单Web应用程序。应用程序的根是这样的:为Servlet设置JSP位置

| 
|--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吗?

回答

3

我想很多(所有?)容器已经映射*.jsp(在任意目录下)到JSP servlet,因此只有在为JSP使用自定义文件扩展名时才需要编写这样的显式servlet映射。要更直接地陈述它:您可能只需删除已写入的servlet映射。

通过定义filter mapping,可以最好地实现在//jsp之间转发对JSP文件的请求。你还需要编写你自己的过滤器类。过滤器有点像Servlets,但不像JSP或Servlet那样生成内容,它们更像是一个流量控制器,[重新]指挥请求。

0
<servlet-mapping> 
    <servlet-name>servlet-jsp</servlet-name> 
    <url-pattern>/jsp/*.jsp</url-pattern> 
</servlet-mapping> 

我认为这应该可以做到。

+0

我觉得这些模式是不允许的。但让他试一试。 – Bozho 2010-11-24 15:51:34

+0

@Bozho:有可能。现在没有一个环境来测试它。但是从[本文档](http://www2.roguewave.com/support/docs/leif/leif/html/bobcatug/7-3.html),应该允许。 – darioo 2010-11-24 15:53:15

1

您可以创建映射到/jsp/然后解析servlet映射后的路径,并转发到JSP一个servlet,使用request.getRequestDispatcer(targetJsp).forward()