2

是否可以在我的项目中使用静态变量来存储所有 Servlet(它们在一个 .war 文件中)和不同请求的数据?(这不是属于不同会话的数据)

4

4 回答 4

1

所有 Servlet 的数据

你可以用ServletContext 这个。

定义一组 servlet 用来与其 servlet 容器通信的方法,例如,获取文件的 MIME 类型、分派请求或写入日志文件。

每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文。(“Web 应用程序”是安装在服务器 URL 命名空间的特定子集(例如 /catalog)下的 servlet 和内容的集合,并且可能通过 .war 文件安装。)

例如:在web.xml

 <context-param>
    <param-name>param</param-name>
    <param-value>Myname is web xml</param-value>
  </context-param>

在您的 servlet 中

    public class ParameterServlet extends HttpServlet {

---

public void init(ServletConfig config) throws ServletException {
    super.init(config);
    ServletContext context = getServletContext();
    name= context.getInitParameter("param");
  }

这里有一个完整的例子。

对于对象

环境

getServletContext().setAttribute("myObj", obj);

得到

MyObj attribute = (MyObj)getServletContext().getAttribute("myObj");

您可以通过servlets.

于 2013-09-29T09:36:07.037 回答
0

是的,你可以这么做。

但是,最好在web.xml使用<context-param> tag.

然后 Servlet 可以检索使用<context-param> tagusing 调用定义的常量:

 context.getInitParameter()

中的名称-值对示例web.xml

  <context-param>
    <param-name>name</param-name>
    <param-value>Joe</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>password</param-value>
  </context-param>
于 2013-09-29T09:37:38.160 回答
0

在 web.xml 你可以定义

<context-param>
    <description>My variable</description>
    <param-name>variable.name</param-name>
    <param-value>value</param-value>
</context-param>

然后从 Servlet 代码中访问它:

String variable = getServletContext().getInitParameter("variable.name");
于 2013-09-29T09:37:45.270 回答
0

是的,您可以,所有 servlet 线程都可以访问静态变量。但是关于使用静态变量,您应该根据要存储的数据的生命周期和要存储的数据量等因素做出正确的决定。

并且由于它在 servlet 上下文中使用,因此请确保它是线程安全的。

于 2013-09-29T09:42:07.093 回答