gpt4 book ai didi

java - 如何在运行时将命令行参数(字符串数组类型)传递给 servlet init 方法

转载 作者:行者123 更新时间:2023-12-01 19:47:19 25 4
gpt4 key购买 nike

我正在尝试将 java 桌面应用程序转换为 Web 应用程序,因为数据将在两个不同的服务器之间交互。在桌面应用程序中,我们使用在运行配置中设置的命令行参数在主方法中获取输入。现在,在 Web 应用程序中转换项目时,我不知道如何通过 servlet 传递运行时参数。

桌面应用程序代码:

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) {
...
...
}

现在转换为 servlet 后:

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) {
....
....
}

我尝试在 web.xml 中使用 init-params

 <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>

Servlet 类:

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
}

我应该如何在 servlet 类中传递程序参数值?

最佳答案

当使用命令行启动应用程序时,您会在 JVM 中获得该应用程序的一个正在运行的实例。这就是为什么命令行参数可用于将参数传递给您的应用程序。 Web 容器中的情况并非如此。 Web 容器本身可以启动数十个应用程序/servlet。那么,要“将参数传递给”这十几个中的哪一个呢?不可行。请注意,Web 容器具有称为“虚拟主机”的功能,因此甚至可能会出现同一应用程序多次启动的情况,即在任意数量的“虚拟主机”中的每个虚拟主机上启动一次。由于多种充分的原因,同一应用程序的配置在这些“虚拟主机”之间可能会有所不同。

当应用程序作为 servlet 在 Web 容器中运行时,有多种将参数传递给应用程序的替代方法:

系统属性。它们可以在用于启动容器的命令行上使用 -D 进行定义,或者可以在给定 servlet 的容器设置中进行定义(如果容器具有该功能)。

JNDI 系统。

上下文属性。在容器内定义用于应用程序的特定部署。可以在 init() 方法中使用 getContext().getInitParameters() 和相关方法来访问它们。

要与应用程序一起部署的属性文件(以便属性文件出现在 servlet 的类路径上,并且可以使用 Class.getResource() 或类似方法找到)。请注意,取消部署将丢失现有的配置信息,如果可能的话,将采取特定措施来应对这种情况。

上下文属性(上下文初始化参数)可能是您的最佳选择,但还必须考虑谁将管理这些设置以及如何完成这些设置[的人体工程学]。

最后,如果命令行参数的目的是专门且明确地供最终用户提供它们,则必须重写应用程序,例如它将向用户显示一个网页,他可以在其中输入等效数据。

关于java - 如何在运行时将命令行参数(字符串数组类型)传递给 servlet init 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52701978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com