如何在运行时将命令行参数(字符串数组类型)传递给 servlet init 方法
How to pass command line args (String array type) to a servlet init method at runtime
我正在尝试将 java 桌面应用程序转换为 Web 应用程序,因为数据将在两个不同的服务器之间交互。
在桌面应用程序中,我们使用在 运行 配置中设置的命令行参数在 main 方法中获取输入。
现在在 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
中使用初始化参数
<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 class:
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 中传递程序参数值 class.?
当使用命令行启动应用程序时,您会在 JVM 中获得该应用程序的一个 运行 实例。这就是为什么命令行参数可用于将参数传递给您的应用程序的原因。在 web 容器中情况并非如此。 Web 容器本身可能会启动几十个 applications/servlets。那么 "pass parameters to" 那一打中的哪一个?不可行。请注意,Web 容器具有称为 "virtual hosts" 的此功能,因此甚至可能出现同一应用程序多次启动的情况,在任意数量的 "virtual hosts" 中的每一个上启动一次。由于各种充分的原因,相同应用程序的配置可能在这些 "virtual hosts" 之间有所不同。
当应用程序 运行 作为 Web 容器中的 servlet 时,将参数传递给应用程序的多种选择:
系统属性。它们可以在用于启动容器的命令行上使用 -D 定义,或者可以在给定 servlet 的容器设置中定义,如果容器具有该功能。
JNDI 系统。
上下文属性。在容器内为应用程序的特定部署定义。可以在您的 init() 方法中使用 getContext().getInitParameters() 和相关方法访问它们。
属性 文件将与应用程序一起部署(这样 属性 文件就会出现在 servlet 的类路径中,并且可以使用 Class.getResource() 或类似的方法找到)。请注意,取消部署将丢失现有的配置信息,如果可能的话,模数特定的措施来解决这个问题。
上下文属性(上下文初始化参数)可能是您的最佳选择,但还必须考虑谁将管理这些设置以及[人体工程学]将如何完成。
最后,如果命令行参数的目的是专门为 最终用户 提供的,那么必须重写该应用程序,以便为用户提供一个网页,用户可以在其中输入等效数据。
我正在尝试将 java 桌面应用程序转换为 Web 应用程序,因为数据将在两个不同的服务器之间交互。 在桌面应用程序中,我们使用在 运行 配置中设置的命令行参数在 main 方法中获取输入。 现在在 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
中使用初始化参数 <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 class:
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 中传递程序参数值 class.?
当使用命令行启动应用程序时,您会在 JVM 中获得该应用程序的一个 运行 实例。这就是为什么命令行参数可用于将参数传递给您的应用程序的原因。在 web 容器中情况并非如此。 Web 容器本身可能会启动几十个 applications/servlets。那么 "pass parameters to" 那一打中的哪一个?不可行。请注意,Web 容器具有称为 "virtual hosts" 的此功能,因此甚至可能出现同一应用程序多次启动的情况,在任意数量的 "virtual hosts" 中的每一个上启动一次。由于各种充分的原因,相同应用程序的配置可能在这些 "virtual hosts" 之间有所不同。
当应用程序 运行 作为 Web 容器中的 servlet 时,将参数传递给应用程序的多种选择:
系统属性。它们可以在用于启动容器的命令行上使用 -D 定义,或者可以在给定 servlet 的容器设置中定义,如果容器具有该功能。
JNDI 系统。
上下文属性。在容器内为应用程序的特定部署定义。可以在您的 init() 方法中使用 getContext().getInitParameters() 和相关方法访问它们。
属性 文件将与应用程序一起部署(这样 属性 文件就会出现在 servlet 的类路径中,并且可以使用 Class.getResource() 或类似的方法找到)。请注意,取消部署将丢失现有的配置信息,如果可能的话,模数特定的措施来解决这个问题。
上下文属性(上下文初始化参数)可能是您的最佳选择,但还必须考虑谁将管理这些设置以及[人体工程学]将如何完成。
最后,如果命令行参数的目的是专门为 最终用户 提供的,那么必须重写该应用程序,以便为用户提供一个网页,用户可以在其中输入等效数据。