当前位置: 首页 > 面试题库 >

在应用程序中获取ServletContext

耿学义
2023-03-14
问题内容

您能否解释一下如何ServletContext在我Application的子类中获取实例?可能吗?我已尝试按照以下代码片段的方式进行操作,但它似乎不起作用-
ctx未设置:

import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;

//...

@ApplicationPath("/")
public class MainApplication extends Application {

    @Context ServletContext ctx;

    @Override
    public Set<Class<?>> getClasses() {     
        Set<Class<?>> classes = new HashSet<Class<?>>();
//...
        return classes;
    }
}

web.xml:

<web-app ...>
 <context-param>
  <param-name>environment</param-name>
  <param-value>development</param-value>
 </context-param>
 <filter>
  <filter-name>jersey-filter</filter-name>
  <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
   <init-param>
   <param-name>javax.ws.rs.Application</param-name>
   <param-value>my.MainApplication</param-value>
  </init-param>
</filter>
...
</web-app>

问题是我需要从中获取上下文参数。如果有其他方法,请给我一个提示,我将不胜感激。

我了解Context注记可能并非为此目的。实际上,我不需要ServletContext自己。如果只有我可以从web.xml中获取上下文参数,我将非常高兴。

这是我真正需要的一个例子:

import java.util.HashSet;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;

import org.glassfish.hk2.utilities.binding.AbstractBinder;

public class MainApplication extends Application {

    @Context ServletContext ctx;

    @Override
    public Set<Object> getSingletons() {
        Set<Object> set = new HashSet<Object>();
        final String environment = ctx.getInitParameter("environment");
        //final String environment = ... get context parameter from web xml
        set.add(new AbstractBinder() {

            @Override
            protected void configure() {
                bind(new BaseDataAccess(environment)).to(DataAccess.class);             
            }
        });
        //...
        return set;
    }
}

谢谢。


问题答案:

从Jersey
2.5开始,可以将ServletContext直接注入到构造函数中:https
:
//java.net/jira/browse/JERSEY-2184

public class MyApplication extends ResourceConfig {
    public MyApplication(@Context ServletContext servletContext) {
       // TODO
    }
}


 类似资料:
  • 伙计们,我们外包了我们的移动应用程序开发,公司只是给了我一个IPA文件,我必须重新签署,然后上传到iTunes Connect。现在,我只想看到这个应用程序的试飞,我看了一个youtube视频,认为这将是直接的,所以我创建了一个生产证书后,我做了我的应用程序id,然后我创建了一个发行版供应配置文件,并选择应用商店作为我的发行版。我曾经为了改变我在这里找到的教程而进行设计,但是当我使用应用程序加载器

  • 问题内容: 我使用AppFuse创建了一个基本的应用程序外壳,并按照AppFuse教程使用Jax- RS创建了一个简单的RESTful服务。那很好。调用时,将Person对象的集合作为Json格式的字符串返回,并带有正确的数据。 我现在想从Appfuse提供的RESTful服务中访问和对象(以使用需要这些对象的另一个库)。 我 _认为_应该可以通过添加@Context注释来实现,但是,如果我添加@

  • 要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?

  • 我做了一个C应用程序,它假设使用Kerberos身份验证来访问HDFS。这个应用程序的webserver也是用C编写的。 我正在尝试使用Kerberos票证在此应用程序中进行透明身份验证。 我使用以下命令对未经授权的用户进行了服务器响应: HTTP/1.1 401未经授权 WWW-认证:协商 浏览器会对标题中的授权字段做出反应,如下所示: 授权:协商Yiecgygkwybbqucoid/jCCA/

  • 问题内容: 我正在尝试在Java Webstart应用程序中加载许多资源。 我最初尝试使用以下命令加载这些文件: 但这没有用-它引发了IllegalArgumentException。进一步的研究表明,该方法不适用于从jar文件访问资源,因此我需要使用以下方法: 但是,当我从Jnlp使用它运行时,得到奇怪的结果。如果我运行以下命令: 在我的IDE中,我得到了对与错(正如我期望的那样)。从jnlp运

  • 我有一个Web应用程序,它对不同端口上的Web服务执行ajax请求(即我的应用程序和服务器位于不同的域中)。 我无法访问服务器 API,因此我无法使用 JSONP。 我正在使用Smiley的HTTP代理Servlet进行解析,因此我的web.xml文件包含以下部分: 不幸的是,我必须在不同的机器(开发、测试、生产)上部署web应用程序,这些机器响应不同的IP地址<是否有一种方法可以在web上动态更