通过servlet访问webapp文件夹中文件的正确路径

时间:2018-07-25 15:26:22

标签: html servlets

我的webapp文件夹中有一个“ index.html”文件。现在,我想通过我的servlet重定向到该文件,但是它总是会给出异常,因为我不知道要放置什么路径。我的代码:

public void service(HttpServletRequest request, 
          HttpServletResponse response) throws IOException {
        // Must set the content type first          
        RequestDispatcher view = request.getRequestDispatcher("webapp/index.html");
        try {
            view.forward(request, response);
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  }
  

我使用了“ index.html”,“ / index.html”,“ ./ index.html”,   “ /webapp/index.html”,“ ./ webapp / index.html”。

我不知道如何访问此文件。请帮忙。

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题:

  1. 第一个问题是您要覆盖 service()方法。没有理由这样做,Javadoc specification for service()明确表示:

      

    从公共服务方法接收标准HTTP请求,并   将它们分派到此类中定义的doMethod方法。这个   方法是HTTP的特定版本   Servlet.service(javax.servlet.ServletRequest,   javax.servlet.ServletResponse)方法。 无需覆盖   这种方法

    因此删除您的doService()方法。相反,应实现一个doGet()方法,其中包含您的doService()方法中的代码。

  2. 第二个问题是指定html文件名的方式看起来不正确。我不知道您如何组织项目,但如果将 index.html 直接放在 WebContent 下,则可以使用” / index来引用文件。 html“ ” index.html“ From the specification for getRequestDispatcher()

      

    指定的路径名​​可以是相对的,尽管它不能扩展   在当前servlet上下文之外。如果路径以“ /”开头   被解释为相对于当前上下文根。

尝试删除service()方法并添加包含您的代码的doGet()方法:

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

    RequestDispatcher view = request.getRequestDispatcher("index.html");
    try {
        view.forward(request, response);
    } catch (ServletException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}