“localhost / prj”和“xyz.com/prj”的ServletContext是否相同?

时间:2014-12-25 23:36:27

标签: servlets external internal

根据以下代码,Tomcat项目(prj.war)的内部和外部访问,ServletContext似乎有所不同。我说明了这一点,因为在对servlet进行了一些内部访问后,外部调用会重置该值并正常进行。我可以有你的意见吗?感谢。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    response.setHeader("Connection",    "keep-alive");
    PrintWriter out = response.getWriter();
  //-------------------------------------------------------------------------------------------------------------//
  //                                            P A R A M E T E R S                                              //
  //-------------------------------------------------------------------------------------------------------------//
    String x_value = request.getParameter("value"); if ( x_value == null ) {x_value = "0";}
  //-------------------------------------------------------------------------------------------------------------//
    String w_value = ( String ) getServletConfig().getServletContext().getAttribute("value");
    if   ( w_value == null ) {
           w_value = "0";
           getServletConfig().getServletContext().setAttribute("value", w_value);
           out.println("value reset !!!");
    }

    out.println("current value = " +   w_value);
    out.println("add     value = " +   x_value);
    out.println("total   value = " + ( w_value =    String.valueOf(Integer.valueOf(w_value).intValue() + Integer.valueOf(x_value).intValue()) ));
    getServletConfig().getServletContext().setAttribute("value", w_value);
    out.println("new value set");
}

编辑:

SERVER.XML

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>

<!-- ************************ -->
<!-- package.xyz.com          -->
<!-- ************************ -->
  <Host name="package.xyz.com"  appBase="webapps"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">

    <Context docBase="package" path=""/>
  </Host>



<!-- ************************ -->
<!-- www.package.xyz.com      -->
<!-- ************************ -->
  <Host name="www.package.xyz.com"  appBase="webapps"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">

        <Context docBase="package" path=""/>
  </Host>

INIT

@Override
public void init(ServletConfig config) throws ServletException {
        super.init(config);
}

1 个答案:

答案 0 :(得分:0)

无论您采用哪种方式(内部或外部),背景都是相同的。如Oracle文档中所述:

  

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

您确定没有重新加载您的应用程序(例如服务器上的热部署)吗?