如何从批处理程序中调用servlet?

时间:2011-06-30 16:59:23

标签: java jsp servlets batch-processing

我有一种情况,我有一系列类似的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”);我希望看到。

我做错了什么?

6 个答案:

答案 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)

我不确定你的意思是

  

我想调整这些JSP,以便可以批量调用它们

他们需要身份验证吗?

无论如何,根据您的要求,您甚至可以使用spring batch

进行尝试

http://static.springsource.org/spring-batch/

答案 4 :(得分:1)

你也可以查看Apache HTTP Client库...再次,这可能是一个库,可以调用一个简单的Servlet ..

答案 5 :(得分:0)

如果可能的话,你应该重构你的servlet并将逻辑移到一个不依赖于请求/响应的服务类,这样你就可以从任何你喜欢的地方调用它。

两周前我做了类似的事情 - 从Web应用程序生成的报告需要作为预定作业运行。我将Spring控制器中的所有代码(无论如何都在那里做了什么?)移动到服务类中,并从控制器和预定的Quartz作业调用该代码。