Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaServlet:强制init在Payara服务器上创建数据对象启动?_Java_Servlets_Init_Payara - Fatal编程技术网

JavaServlet:强制init在Payara服务器上创建数据对象启动?

JavaServlet:强制init在Payara服务器上创建数据对象启动?,java,servlets,init,payara,Java,Servlets,Init,Payara,我正在寻找一种在第一个请求之前在我的Javaservlet(Payara上)中生成数据对象的方法,因为创建的数据对象需要一些时间来解析其他网站(大约4秒) 我想这就足够了 @WebServlet(urlPatterns = "/reports/*", loadOnStartup = 1) 在开始时,在启动payara服务器时强制servlet容器初始化(基于)。但是,它不起作用。对于第一个请求,我仍然有4秒的延迟,后续请求没有延迟。下面的代码可以工作,问题只是第一个请求的延迟 @WebServ

我正在寻找一种在第一个请求之前在我的Javaservlet(Payara上)中生成数据对象的方法,因为创建的数据对象需要一些时间来解析其他网站(大约4秒)

我想这就足够了

@WebServlet(urlPatterns = "/reports/*", loadOnStartup = 1)
在开始时,在启动payara服务器时强制servlet容器初始化(基于)。但是,它不起作用。对于第一个请求,我仍然有4秒的延迟,后续请求没有延迟。下面的代码可以工作,问题只是第一个请求的延迟

@WebServlet(urlPatterns = "/reports/*", loadOnStartup = 1)
public class SingleReportServlet extends HttpServlet {

    ReportData m_myData;

    @Override
    public void init() throws ServletException {        
        m_myData = new ReportData(); //This takes about 4 seconds, once
        System.out.println("My servlet has been initialized");        
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        String requestPath = request.getPathInfo();
        String[] components = requestPath.split("/");
        String requestedData = components[components.length-1].trim().toUpperCase();
        String report = m_myData.getFullReport(requestedData, Locale.GERMAN, DisplayType.HTML_PARTIAL);
        String headline = "Report for "+requestedData;
        System.out.println(headline);
        System.out.println(report);         
        request.setAttribute("headline", headline);
        request.setAttribute("report", report); 
        request.getRequestDispatcher("/WEB-INF/singleReport.jsp").forward(request, response);       
    }    
}

与其在servlet
init
方法中初始化
ReportData
,我建议您使用
ServletContextListener

e、 g


怎么样
ServletContextListener
?请看,您能详细说明一下我如何使用它来准备好在servlet中使用我的数据对象吗?我刚刚阅读了上的示例&您的示例,并假设我将移动我的ReportData m_myData=new ReportData();到contextInitialized节->是否正确?我如何在servlet中访问它?对不起,我是新加入servlets的……非常感谢您的帮助!当然,我会通过ServletContext ctx=getServletContext()访问它;然后是ReportData test=(ReportData)ctx.getAttribute(“RDATA”);在servlet中,并正常运行?感谢您的反馈
@WebListener
public class ServletContextListenerImpl implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ReportData m_myData = new ReportData ();
        System.out.println("My ServletContextListenerImpl has been initialized");

        // then add to your session for later use
        sce.getServletContext().setAttribute("RDATA", m_myData);
    }
    ..
 }