java – WebAppContext将参数传递给servlet构造函数

我在主类中有webAppContext,我有一个servlet,它有WebServlet注释和带args的构造函数.我怎么能把args从Main类传递给Servlet?

Main.java

String webappDirLocation = "src/main/java/frontend/webapp/";
WebAppContext webAppContext = new WebAppContext();
webAppContext.setResourceBase("public_html");
webAppContext.setContextPath("/");
webAppContext.setDescriptor(webappDirLocation + "WEB-INF/web.xml");
webAppContext.setConfigurations(new Configuration[]{
                new AnnotationConfiguration(),new WebXmlConfiguration(),new WebInfConfiguration(),new PlusConfiguration(),new MetaInfConfiguration(),new FragmentConfiguration(),new EnvConfiguration()}
);
webAppContext.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/classes/.*");
webAppContext.setParentLoaderPriority(true);

web.xml中:

Metadata-complete="false"
        version="3.0">

Servlet的:

@WebServlet(name = "WebSocketGameServlet",urlPatterns = {"/gameplay"})
public class WebSocketGameServlet extends WebSocketServlet {
    static final Logger logger = LogManager.getLogger(GameWebSocket.class);
    private final static int IDLE_TIME = 6000 * 1000;
    private AccountService accountService;
    private Game game;
    private WebSocketService webSocketService;

    public WebSocketGameServlet(AccountService accountService,Game game,WebSocketService webSocketService) {
        this.accountService = accountService;
        this.game = game;
        this.webSocketService = webSocketService;
    }

    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.getPolicy().setIdleTimeout(IDLE_TIME);
        factory.setCreator(new GameWebSocketCreator(accountService,game,webSocketService));
    }
}
最佳答案
好吧,据我所知,您使用JavaSE和嵌入式Jetty创建了Web应用程序.您可以使用注释将servlet添加到服务器.
然后Jetty创建它调用默认构造函数的servlet.
但是你需要以某种方式将你在main()中创建的对象的链接传递给你的servlet.

所以,有几种解决方案:

>创建自己的“dependency injection”:将单例类Context添加到您的应用程序.在main()中将您的服务放到Map< Class<?>,Object>上下文.并将它们放入servlet中.
>使用依赖注入框架.像Spring.
>转到J2EE并使用EJB.在这种情况下,您需要忘记自己的main()并由Web服务器管理.

附: jetty服务器有方法addBean(…).您可以将“bean”添加到服务器(代码或配置中).但据我所知,不可能将这个bean放在servlet中.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...