当前位置: 首页 > 知识库问答 >
问题:

使用jersey servlet容器访问Web-INF文件夹

秦联
2023-03-14

我正在尝试访问WEB-INF文件夹中的内容,并将该文件使用到我的JAXB解组函数中,但我尝试了所有方法,但没有成功。首先,我使用jersey和grizzly服务器在本地测试它,但现在我想将它移动到tomcat服务器上,并使用.war文件部署它,该文件具有WEB-INF文件夹和index.html。

我有3个包(资源,模型和主要包)。
在其中一个(模型)中,我有一个类,我正在使用这个解组函数对WEB-INF文件夹中的一个文件进行解组,这个类由资源中的一个类调用。

我如何访问WEB-INF中的文件?

Catalogo类(它是映射到url的资源)。

@Path("catalogo")
public class CatalogoResource {
    @Context ServletContext context;


    @Path("{id}/{ano}")
    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Catalogo retornaCatalogo(@PathParam("id") int id, @PathParam("ano") int ano) throws URISyntaxException, MalformedURLException{
        //buscar no arquivo, dar unmarshall pra ca.
        Catalogo cat = new CatalogoDAO().open(ano, id);
        //pensar em como retornar o xml;
        return cat;
    }

}

在catalogo内部使用的类CatalogoDAO位于models包上。

    public class CatalogoDAO{
    private Catalogo catalog = new Catalogo();
    ServletContext context;

    public Catalogo open(int ano, int curso) throws URISyntaxException {
        try {           
            InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/catalogos/2012_36.xml"); //line of the null pointer.
            JAXBContext jaxbContext = JAXBContext.newInstance(Catalogo.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            catalog = (Catalogo) jaxbUnmarshaller.unmarshal(resourceAsStream);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
     return catalog;
    }
}

但还是没有成功。

说明服务器遇到内部错误,导致它无法完成此请求。

例外情况

javax.servlet.ServletException:java.lang.nullpointerException org.glassfish.jersey.servlet.webcomponent.service(webcomponent.java:392)org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:382)org.glassfish.jerse.servlet.servletcontainer.service(servletcontainer.java:345)org.glassfish.jerse.servlet.servletcontainer.service(

根本原因

共有1个答案

乐正远航
2023-03-14

好的。堆栈跟踪显示:

 java.lang.NullPointerException  
 br.unicamp.ft.courseviewer.modelo.CatalogoDAO.open(CatalogoDAO.java:22)

所以,在第22行,这是

InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/catalogos/2012_36.xml");

您将得到一个NullPointerException。

您已经在CatalogoResource类中执行了以下操作:

@Context ServletContext context;

这告诉JAX-RS在实例化类之后,它应该注入ServletContext。因此,只需将此上下文传递给您的DAO构造函数或方法

 public Catalogo open(ServletContext context, int ano, int curso) throws URISyntaxException {
    try {           
        InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/catalogos/2012_36.xml"); 
        // ...
 类似资料:
  • 我刚刚开始使用JSP,遇到了一个问题。 据我所知,WEB-INF下的JSP页面可以通过浏览器在localhost中使用URL进行访问: 但是,如果我在WEB-INF文件夹(即'MyFolder')中创建另一个子文件夹,并尝试通过URL访问相同的JSP页面: 它给出了一个错误404。JSP文件导航系统与HTML文件导航系统有区别吗? 编辑:我正在使用servlet来显示我的JSP页面: EDIT2:

  • 使用Freemarker模板有两种不同的要求。一个是打印网页的某些部分,另一个是生成定制的HTML文件。我已将所有FTL文件放在路径WEB-INF/FTL/下,WEB应用程序从上述位置提取正确的FTL文件并打印网页。当我不得不生成HTML文件时,Freemarker无法找到相应的FTL文件。 我试图将特定的FTL文件保存在resources/FTL/下,但它仍然无法获取该文件。我在src下创建了一

  • 问题内容: 我想将我的JSF 2.0 xhtml文件放在WEB-INF \ jsf下。那我该如何访问它们?我知道WEB- INF中的任何内容都不会暴露给外部,因此我需要一个控制器将我重定向到相应的JSP,对吗?(这也是模型2模式iirc)。 我可以使用web.xml / faces- config.xml中的参数来实现吗?我认为FacesServlet是我的webapp的控制器,因此它应该达到这个

  • 如何从Windows文件资源管理器访问Docker containers文件夹和文件?

  • 问题内容: 我对JQuery和Ajax有点陌生,所以如果这是新手的问题,我深表歉意。 我正在尝试使用本地文件中的ajax来访问Web(例如,获取文本文件)。 我没有使用IIS或任何其他来自硬盘驱动器的简单文件(我需要它保持这种状态)。 在IE8和Chrome(版本11.0.696.60)上都进行了检查。 这是一些JavaScript来说明: 此代码试图从Web加载文本文件-IE和chrome上的操

  • 问题内容: 我无法从存储在WEB- INF中的JSP访问某些图像和CSS文件。我的servlet调用了JSP,并且全部加载正常,但是页面无法找到图像和CSS文件。我对这种事情很陌生,希望能提供帮助。我知道过去对此存在一些疑问,我已经尝试过这些建议提出的建议,但是我似乎无法回避它。这是JSP的内容(我尝试了一堆不同的方法): 这是我的目录结构: http://gyazo.com/0a7aea0a44