Servlets 是'的ServletContext;localhost/prj';和';xyz.com/prj';相同的?

Servlets 是'的ServletContext;localhost/prj';和';xyz.com/prj';相同的?,servlets,external,internal,Servlets,External,Internal,根据以下代码,Tomcat项目(prj.war)的内部和外部访问,ServletContext似乎是不同的。我之所以这样说,是因为在对servlet进行几次内部访问之后,外部调用会重置该值并正常进行。我可以听听你的意见吗?谢谢 public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setHeader("Cache-Control",

根据以下代码,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
上下文是相同的,无论您以何种方式到达上下文(内部或外部)。如Oracle文档中所述:

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


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

谢谢您的回复。我不知道你的话怎么可能是真的,因为整个代码都在上面。我编辑我的问题是为了包含示例servlet的SERVER.XML和INIT方法。我认为,这里有一些棘手的问题:“…安装在服务器URL的特定子集下…”本地/外部访问将自然更改URL。即使是xyz.com/prj和www.xyz.com/prj也会有不同的servlet上下文。
<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>
@Override
public void init(ServletConfig config) throws ServletException {
        super.init(config);
}