Java EE Tomcat DefaultServlet 扩展不适用于静态文件

标签 java tomcat servlets

我正面临使用基于 Servlet 的 Java EE 编写 Web 应用程序的问题。一切正常,但我不知道如何将 jscss 文件正确附加到我的 html 页面。我已经在网上阅读了一些关于此的答案和帖子,但我不想编写自己的 servlet 来执行此操作,因为据我所知,Tomcat 提供了 DefaultServlet 并且它满足了我的需求。现在,我尝试编写此类的实现,如下所示:

package xx.xx.xx;

import java.io.File;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.servlets.DefaultServlet;

@WebServlet(urlPatterns={"/js/*","/css/*","/libs/*"})
public class StaticContent extends DefaultServlet {

    public StaticContent() {
        super();
    }

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File f = new File(StaticContent.class.getProtectionDomain().getCodeSource().getLocation().getPath()+"../css/global.css");
        System.out.println("_____HERE " + request.getRequestURL() + " | " + f.exists());
        super.doGet(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        throw new UnsupportedOperationException();
    }

}

我不明白。它仍然不起作用。 java 文件系统识别它并在 file.exists() 上返回 true 但服务器没有。当我尝试从浏览器访问它时,它也因 404 而失败。任何想法我应该在这里做什么? Assets 文件紧挨着 WEB-INF 中的 html

最佳答案

好的,我的 doGet 方法开始工作了:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String arr[] = request.getRequestURL().toString().split("/");
    String file = arr[arr.length-1];
    String folder = arr[arr.length-2];
    request.getRequestDispatcher("/WEB-INF/"+folder+"/"+file).forward(request, response);
}

关于Java EE Tomcat DefaultServlet 扩展不适用于静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35669910/

相关文章:

java - 当同样的事情可以由 servlet 完成时,为什么还要使用 Restful Webservices?

java - ResultSetMetaData.getColumnName 为 UNION 和非 UNION 查询返回不同的值

java - 以编程方式创建的 Android ProgressBar(圆形)在 Xoom 上不可见(在其他任何地方都有效!)

java - spring 、 java servlet 和 tomcat 在将 url 映射到资源方面的确切关系是什么?

java - 如何使用运行apache的eclipse连接到mysql

java - 将 json 从 servlet 传递到 dojo

java - 哪种方法更适合用于登录表单 doget() 或 dopost()

java - Freemarker 字符串高亮

javascript - 如何用javascript锚定?

java - 为 Web 应用程序在 Django-Apache 和 Java-Tomcat 之间进行选择