Java 使用jersey servlet容器访问Web INF文件夹
我试图访问WEB-INF文件夹中的内容,并将该文件用于我的JAXB解组功能,但我尝试了所有方法,但都没有成功。 首先,我使用jersey和grizzly服务器在本地测试它,但现在我想将它移动到tomcat服务器上,并使用一个.war文件部署它,该文件包含WEB-INF文件夹和index.html 我有3个包(资源、模型和主包)。哪一个是我的资源所在。Java 使用jersey servlet容器访问Web INF文件夹,java,tomcat,jersey,Java,Tomcat,Jersey,我试图访问WEB-INF文件夹中的内容,并将该文件用于我的JAXB解组功能,但我尝试了所有方法,但都没有成功。 首先,我使用jersey和grizzly服务器在本地测试它,但现在我想将它移动到tomcat服务器上,并使用一个.war文件部署它,该文件包含WEB-INF文件夹和index.html 我有3个包(资源、模型和主包)。哪一个是我的资源所在。 在其中一个(模型)中,我有一个类,我正在使用这个解组函数对WEB-INF文件夹中的一个文件进行解组,这个类由参考资料中的一个类调用 如何访问WEB
在其中一个(模型)中,我有一个类,我正在使用这个解组函数对WEB-INF文件夹中的一个文件进行解组,这个类由参考资料中的一个类调用 如何访问WEB-INF中的文件 编辑-它不是内置在servlet类中的,让我进一步解释一下。 我正在使用jaxrs和jersey创建一个restful api Catalogo类(它是映射到url的资源) 然后,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;
}
}
但仍然没有成功
添加我的get请求和文件夹结构的图像。
第一个图像显示异常,表示该文件不存在,但正如您所看到的,第二个图像证明它存在,并显示.war扩展之前我的tomcat服务器中的文件夹结构
类型异常报告
消息java.lang.NullPointerException
说明服务器遇到阻止它的内部错误
不履行这一要求
例外情况
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.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
java.lang.NullPointerException
br.unicamp.ft.courseviewer.modelo.CatalogoDAO.open(CatalogoDAO.java:22)
br.unicamp.ft.courseviewer.resource.CatalogoResource.ReturnaCatalogo(CatalogoResource.java:24)
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)
java.lang.reflect.Method.invoke(未知源)
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutingVoker.doDispatch(JavaResourceMethodDispatcherProvider.java:195)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:402)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:349)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:106)
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:267)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:318)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1010)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
好的。因此堆栈跟踪显示:
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
这意味着上下文为空
为什么它是空的
因为你从未初始化过它。它只是对象的一个字段,任何人都不会初始化它
如何获得对ServletContext的引用
您已经在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");
// ...
您可以查看一下@dsp\u user,IDE无法识别ServletContext类@dsp_用户我从servelt api导入了它,并进行了编辑。试着看一下,那代码到底出了什么问题?您得到了什么样的例外?非常感谢您,对于问题进展过程中出现的任何问题,我深表歉意。
public Catalogo open(ServletContext context, int ano, int curso) throws URISyntaxException {
try {
InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/catalogos/2012_36.xml");
// ...