我有一种情况,我有一系列类似的JSP,每个JSP都是根据用户输入的选项从servlet调用的。
但是,我想调整这些JSP,以便可以从服务器上每小时运行一次的程序批量调用它们,并将JSP输出写入文本文件。
有谁能告诉我这是怎么做的?
我正在思考:
URL url = new java.net.URL("http://127.0.0.1/myServlet");
URLConnection con = url.openConnection();
或者有更好的方法吗?
好的:我必须在这里做一些非常愚蠢的事情,因为这似乎不起作用:我有一个批处理程序,每小时运行一次,它包含以下代码:
try {
URL url = new java.net.URL("http://127.0.0.1:8084//myApp//myServletMapping?par=parValue");
URLConnection connection = url.openConnection();
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setDoInput(true);
InputStream response = connection.getInputStream();
}
catch (Exception ex) {
logger.error("Error calling servlet in batch", ex);
}
根据我对this tutorial中的指令的理解,上面应该足以触发servlet中的get方法,该方法由上面代码中的myServletMapping映射。这个servlet的get方法包含一个简单的System.out.println(“Here”);我希望看到。
我做错了什么?
答案 0 :(得分:3)
或者有更好的方法吗?
不是真的。这是基本的。当服务器收到HTTP时,servlet会被“调用”,而这正是你提出的代码所做的。
你可以使用HTTPUnit等库,或者使用不同的编程语言,但这一切都归结为发送HTTP请求。
答案 1 :(得分:3)
除了Matt所说的关于在发出HTTP请求时调用servlet的内容:
不需要从批处理文件调用Java类。只需使用wget来检索页面:
wget http://127.0.0.1/myServlet -O mypage.jsp
wget是开源的,可用于(几乎)所有操作系统
答案 2 :(得分:2)
我认为您的解决方案很好。我唯一要改变的是实际上并没有自己阅读资源。我建议像这样使用Google的Resources.toString lib
String data = Resources.toString(url, ...);
答案 3 :(得分:1)
答案 4 :(得分:1)
你也可以查看Apache HTTP Client库...再次,这可能是一个库,可以调用一个简单的Servlet ..
答案 5 :(得分:0)
如果可能的话,你应该重构你的servlet并将逻辑移到一个不依赖于请求/响应的服务类,这样你就可以从任何你喜欢的地方调用它。
两周前我做了类似的事情 - 从Web应用程序生成的报告需要作为预定作业运行。我将Spring控制器中的所有代码(无论如何都在那里做了什么?)移动到服务类中,并从控制器和预定的Quartz作业调用该代码。