【发布时间】:2013-09-29 09:32:59
【问题描述】:
是否可以在我的项目中使用静态变量来存储所有 Servlet(它们在一个 .war 文件中)和不同请求的数据? (不是属于不同会话的数据)
【问题讨论】:
是否可以在我的项目中使用静态变量来存储所有 Servlet(它们在一个 .war 文件中)和不同请求的数据? (不是属于不同会话的数据)
【问题讨论】:
所有 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 访问这些对象。
【讨论】:
serializable。 :)
是的,你可以这样做。
但是,最好使用<context-param> tag 在web.xml 中定义这些常量。
Servlet 然后可以通过调用检索使用<context-param> tag 定义的常量:
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>
【讨论】:
在 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");
【讨论】:
是的,您可以,所有 servlet 线程都可以访问静态变量。但是关于使用静态变量,您应该根据要存储的数据的生命周期和要存储的数据量等因素做出正确的决定。
而且由于它是在 servlet 上下文中使用的,因此请确保它是线程安全的。
【讨论】: