Tomcat使用静态变量

时间:2013-09-29 09:32:59

标签: java tomcat tomcat7

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

4 个答案:

答案 0 :(得分:1)

  

所有Servlet的数据

您可以使用ServletContext

  

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

     

每个Java虚拟机每个“Web应用程序”有一个上下文。 (“Web应用程序”是安装在服务器URL命名空间的特定子集下的servlet和内容的集合,例如/ catalog,可能通过.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");
  }

A complete example here.

对象

设置

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

获得

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

您可以通过servlets访问这些对象。

答案 1 :(得分:0)

是的,你可以做到。

但最好使用web.xml<context-param> tag中定义这些常量。

然后,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>

答案 2 :(得分: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");

答案 3 :(得分:0)

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

由于它在servlet上下文中使用,请确保其线程安全。