嵌入式Tomcat转发到JSP无法正常工作

时间:2014-01-19 14:23:30

标签: java jsp java-ee tomcat

我正在使用嵌入式tomcat,具有以下配置

    String webappDirLocation = "webapp/";
    Tomcat tomcat = new Tomcat();
    System.out.println(new File(webappDirLocation).getAbsolutePath());
    tomcat.setBaseDir(".");
    tomcat.setPort(4041);
    Context ctx = tomcat.addWebapp(tomcat.getHost(), "", new    
     File(webappDirLocation).getAbsolutePath());
    ((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);

    tomcat.start();

    tomcat.getServer().await();'

但是当我使用

转发到JSP时
req.getRequestDispatcher("/WEB-INF/views/jsp/index.jsp").forward(req, resp);

它说没有JSP找到路径

的web.xml

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>accManager.Hello</servlet-class>
 </servlet>

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>


<servlet>
    <servlet-name>default1</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

 <servlet-mapping>
    <servlet-name>default1</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

任何人都可以帮我找到我在这里做的错误吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

WEB-INF目录是私有的。客户端无法通过URL请求访问WEB-INF。 WEB-INF通常包含web.xml,classes和lib目录,但是您可以在那里放置要隐藏的任何内容。像spring这样的框架允许使用特殊资源配置从WEB-INF提供页面[mvc:spring for resources。]。

尝试将jsp页面放在WEB-INF和META-INF文件夹的Web容器中。 例如:

req.getRequestDispatcher("/index.jsp").forward(req, resp);

答案 1 :(得分:1)

您无法直接从URL请求访问WEB-INF内容。尝试删除它,因为你将servlet映射到扩展名为.jsp的任何文件,你可以使用其中一个路径:

views/jsp/index.jsp
jsp/index.jsp
index.jsp