根据以下代码,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");
}
编辑:
<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);
}
答案 0 :(得分:0)
无论您采用哪种方式(内部或外部),背景都是相同的。如Oracle文档中所述:
每个Java虚拟机每个“Web应用程序”有一个上下文。 (“Web应用程序”是安装在服务器URL命名空间的特定子集下的servlet和内容的集合,例如/ catalog,可能通过.war文件安装。)
您确定没有重新加载您的应用程序(例如服务器上的热部署)吗?