Как передать аргументы командной строки (тип массива String) в метод init сервлета во время выполнения - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь преобразовать настольное приложение Java в веб-приложение, так как данные будут взаимодействовать между двумя разными серверами.В настольном приложении мы получали ввод в основном методе, используя аргументы командной строки, которые были заданы в конфигурации запуска.Теперь при преобразовании проекта в веб-приложении я не понимаю, как передать аргументы времени выполнения через сервлет.

Код настольного приложения:

public class A extends B {
public static void main(String[] args) {//Get this args value on runtime through arguments set in run configuration
     new A().initialize(args);
    }
    public void initializeProcess(String[] args) {
    ...
     ...
    }

Теперь после преобразования в сервлеты:

public class A  extends B
 {     
  public void init() throws ServletException
  {
   new A().initializeProcess(args);//How to get this args, as it is throwing errors
}
   public void initializeProcess(String[] args) {
  ....
  ....
 }

Я пытался использовать init-params в web.xml

 <servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>or.com.test</servlet-class>
    <init-param>
            <param-name>args</param-name>
            <param-value>api</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

Класс сервлета:

public class A  extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException{

                PrintWriter pw = response.getWriter();
                pw.println(getServletConfig().getInitParameter("args"));

            }

    public void init() throws ServletException
    {
    new A().initializeConsumerProcess(pw);//Not getting how to pass the init param value here
  }

Как передать значение аргумента программы в мой класс сервлета.

1 Ответ

0 голосов
/ 08 октября 2018

Когда приложение запускается из командной строки, вы получаете один запущенный экземпляр приложения в JVM.Вот почему параметры командной строки можно использовать для передачи параметров в ваше приложение.Это не относится к веб-контейнерам.Сам веб-контейнер может запускать десятки приложений / сервлетов.Так какой же из этих дюжин «передать параметры»?Не выполнимоОбратите внимание, что веб-контейнеры имеют эту функцию, называемую «виртуальные хосты», поэтому может даже случиться, что одно и то же приложение запускается более одного раза, по одному на каждом из любого количества «виртуальных хостов».Конфигурация для одного и того же приложения может отличаться между этими «виртуальными хостами» по ряду веских причин.

Количество альтернатив для передачи параметров приложению, когда оно выполняется в качестве сервлета в веб-контейнере:

Свойства системы.Они могут быть определены с помощью -D в командной строке, используемой для запуска контейнера, или могут быть определены в настройках контейнера для данного сервлета, если контейнер обладает такими функциями.

Система JNDI.

Свойства контекста.Определяется в контейнере для конкретного развертывания приложения.Доступ к ним может быть выполнен в вашем методе init () с использованием getContext (). GetInitParameters () и связанных с ним методов.

Файлы свойств, которые должны быть развернуты с приложением (так, чтобы файлы свойств появлялись в пути к классам сервлета и былиможно найти с помощью Class.getResource () или некоторых других).Обратите внимание, что при отмене развертывания будет потеряна существующая информация о конфигурации, если это возможно, по конкретным мерам для противодействия этому.

Свойства контекста (параметры инициализации контекста), вероятно, являются вашим лучшим вариантом, хотя также необходимо учитывать, кто будет управлять этиминастройки и [эргономика] того, как это будет сделано.

И, наконец, если намерение параметров командной строки было специально и явно для конечного пользователя , чтобы предоставить их, тогда приложение должно быть переписано так, что оно предоставит пользователю веб-страницу, где он может ввести эквивалентные данные.

...