Как вызвать сервлет из пакетной программы? - PullRequest
0 голосов
/ 30 июня 2011

У меня есть ситуация, когда у меня есть ряд похожих JSP, каждый из которых вызывается из сервлета на основе параметра, введенного пользователем.

Однако я хотел бы настроить эти 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);
   }

Согласно моему пониманию инструкций в этого урока , вышеупомянутого должно быть достаточно для запуска метода get в сервлете, который отображается myServletMapping в приведенном выше коде. Метод get этого сервлета содержит простой System.out.println ("Здесь"); который я бы ожидал увидеть.

Что я делаю не так?

Ответы [ 6 ]

3 голосов
/ 30 июня 2011

В дополнение к тому, что Мэтт сказал о вызываемом сервлете, когда вы делаете HTTP-запрос:

Нет необходимости в классе Java, который вызывается из командного файла. Просто используйте wget для получения страницы:

wget http://127.0.0.1/myServlet -O mypage.jsp

wget с открытым исходным кодом и доступен (почти) для всех операционных систем

3 голосов
/ 30 июня 2011

Или есть способ получше?

Не совсем. Это так же просто, как и получается. Сервлет «вызывается», когда сервер получает HTTP, и именно это будет делать предложенный вами код.

Вы можете использовать библиотеку, такую ​​как HTTPUnit , или другой язык программирования, но все это сводится к отправке HTTP-запроса.

2 голосов
/ 30 июня 2011

Я думаю, что ваше решение в порядке.Единственное, что я хотел бы изменить, - это не читать сам ресурс.Я бы предложил использовать Resources.toString lib от Google, например

String data = Resources.toString(url, ...);
1 голос
/ 30 июня 2011

вы также можете посмотреть на библиотеку Apache HTTP Client ... опять же, это может быть слишком большая библиотека, чтобы вызывать простой сервлет.

1 голос
/ 30 июня 2011

Я не уверен, что вы имеете в виду, спрашивая

Я бы хотел настроить эти JSP так, чтобы они могли дополнительно вызываться в пакетном режиме

им нужна аутентификация?

в любом случае, в зависимости от ваших потребностей, вы даже можете попробовать его с пружинной партией

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

0 голосов
/ 30 июня 2011

Если возможно, вам следует провести рефакторинг ваших сервлетов и переместить логику в класс обслуживания, который не зависит от запроса / ответа, чтобы вы могли вызывать его откуда угодно.

Я сделал что-то похожее дванесколько недель назад - отчет, сгенерированный из веб-приложения, необходимо было запустить как запланированное задание.Я переместил весь код из контроллера Spring (что он вообще там делал?) В класс обслуживания и вызвал этот код из контроллера и запланированного задания Quartz.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...