首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问正在运行的Servlets实例

访问正在运行的Servlets实例
EN

Stack Overflow用户
提问于 2015-07-02 15:39:48
回答 1查看 684关注 0票数 1

对于java来说,这个问题不同于典型的java工作流,需要来自node.js背景的非常有经验的架构师的帮助,试图实现基于我已经用node.js和PHP实现的一些设计模式以及一些前端语言(包括Java )的体系结构,我期待着为Java实现同样的架构。

我理解在servlet中,doGet、doPost等是请求的入口点,一个servlet的单个实例被实例化,并通过多线程并发地重用所有传入请求。

对于这些设计模式(另一个主题,需要它自己的线程),我需要有一个uber级别的访问权限来获取这些servlet实例,并将我的参与者设置为委托/侦听器。

我读到servlet要么在第一个请求之后实例化,要么直接与容器一起加载,因此要实现这一点,我需要在启动时加载它们,以便对它们执行操作。

同样,这个问题是不同的,可能需要一些讨论,以深入了解,以帮助我们交换关于彼此世界的东西。

简而言之,我需要以下两件事情来使它发挥作用。

  1. 一种定义我自己的类(比如Uber)的方法,让它在容器被装载时加载。
  2. 然后Uber类能够获得对加载servlet的引用,或者servlet可以与Uber联系。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 15:44:57

解决第一点很容易。创建一个实现ServletContextListener的类,并在方法contextInitialized中创建Uber实例。

第二点是不可能的。服务器不允许向您提供有关它创建的Servlet实例的信息。不推荐获取这些信息的方法( ServletContext#getServlet )。此外,应用服务器可能使用一个或多个Servlet实例,服务器将在运行时决定行为。

由于我们不太清楚您了解Servlet实例的目的以及如何处理它们,所以我们不能提供更多的帮助。

不过,在第1点中,由于您创建了Uber实例,您可以将它作为属性存储在ServletContext中,然后使用HttpServletRequest#getServletContext在每个servlet中检索它。

从您的评论来看,您似乎希望/需要实现前控制器。为此,最好使用单个servlet来完成这项工作,并创建类来完成处理请求的真正工作。与其重新发明轮子,我建议您使用一个已经实现了这个功能的框架,比如JSF或Spring。如果您仍然希望/需要自己实现该模式,请检查这里

这就是(奇数和不值得推荐的)设计的样子(基于Jozef的评论 )。

代码语言:javascript
复制
@WebListener
public class AppListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent e) {
        Uber uber = new Uber();
        /* configure uber */
        //store it in ServletContext
        e.getServletContext().setAttribute("uber", uber);
    }
    @Override
    public void contextDestroyed(ServletContextEvent e) {
        //...
    }
}

然后在servlet中,将其注册到Uber实例中:

代码语言:javascript
复制
@WebServlet(value="/myServlet", name="myServlet")
public class MyServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) {
        Uber uber = (Uber)config.getServletContext().getAttribute("uber");
        uber.registerServlet("myServlet", this);
    }
    //more code...
}

不过,我不喜欢另一个类需要了解您的Servlet的想法。

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

https://stackoverflow.com/questions/31188987

复制
相关文章

相似问题

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