我正在寻找一种在第一个请求之前在我的java servlet(Payara上)中生成数据对象的方法,因为创建的数据对象需要一些时间来解析其他网站(大约4秒)。
我以为这就足够了
@WebServlet(urlPatterns = "/reports/*", loadOnStartup = 1)
在启动payara服务器时强制servlet容器初始化(基于
http://www.codejava.net/java-ee/servlet/webservlet-annotation-examples
).然而,它不起作用。对于第一个请求,我仍然有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);
}
}