Servlets 是'的ServletContext;localhost/prj';和';xyz.com/prj';相同的?
根据以下代码,Tomcat项目(prj.war)的内部和外部访问,ServletContext似乎是不同的。我之所以这样说,是因为在对servlet进行几次内部访问之后,外部调用会重置该值并正常进行。我可以听听你的意见吗?谢谢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",
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);
}