【问题标题】:Embedded Tomcat forwarding to JSP not working嵌入式 Tomcat 转发到 JSP 不起作用
【发布时间】:2014-01-19 14:23:29
【问题描述】:

我使用的是嵌入式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>

谁能帮我找出我在这里做错了什么??

提前致谢

【问题讨论】:

    标签: java jsp jakarta-ee tomcat


    【解决方案1】:

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

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

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

    【讨论】:

    • 我也在使用相同的,但这是嵌入式 tomcat 的问题,因为它没有默认 web.xml,请求调度程序也无法正常工作
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2019-12-29
      • 1970-01-01
      • 2017-01-02
      相关资源
      最近更新 更多