首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在pax-web中使用@WebServlet和@Component

如何在pax-web中使用@WebServlet和@Component
EN

Stack Overflow用户
提问于 2015-03-09 15:13:47
回答 1查看 465关注 0票数 0

我有一个使用的设置,这样我就可以以标准的方式注册servlet。

在使用WAR之前,servlet是一个单例,我可以在其中注入其他osgi引用。使用扩展程序,服务会因为声明性服务XML而被注入,但是当我使用浏览器访问Servlet时,就会创建一个新实例,而不需要注入其他服务。

代码语言:javascript
复制
@Component
@SuppressWarnings("serial")
@WebServlet(name="TestServlet", urlPatterns={"/Test"})
public class TestServlet extends HttpServlet{

    private UserDataManager userDataManager;

    public TestServlet(){
        System.out.println("------------------- New Servlet");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        MbsSessionId mbsId = (MbsSessionId)session.getAttribute("MbsSessionId");

        UserData userData = userDataManager.getUserData(mbsId);         
        resp.getOutputStream().println(userData.toString());
    }

    @Reference
    void bindUserDataManager(UserDataManager userDataManager){
        this.userDataManager = userDataManager;
    }
}

我的目标是避免以编程方式调用。是否有任何配置,因此我的Servlet被视为Singleton,或者OSGi-服务被重新注入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 07:24:38

问题是你在这里混合了两种技术。Pax确实确保相应地注册了附加说明的Servlets,但不知道任何关于DS的信息。这就是为什么这根本行不通。但是,如果将它与Pax结合使用,则可以通过CDI方法将任何服务注入Servlet。

查看一个示例这里

这是一段节选:

代码语言:javascript
复制
 @Inject
 @OsgiService
 private CookBookService cookBookService;

顺便说一句,您还可以将它配置为动态的,这意味着Pax-CDI将在相应的servlet消失时将Servlet取下来。有关Pax Web和Pax CDI的更多细节,请查看相应的文档/项目。

Pax 文档

Pax 项目

Pax 项目

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28945446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档