4.5.4 Web应用程序之间的访问
优质
小牛编辑
126浏览
2023-12-01
当前的Web应用程序不仅可以通过ServletContext对象访问自己的资源,而且还可以访问其他Web应用程序中的资源。假设在server.xml中配置了如下两个Web应用程序:
<!-- 本例所在的应用程序 -->
<Context docBase="demo" path="/demo" reloadable="true"
crossContext="true" source="org.eclipse.jst.jee.server:demo">
<Parameter name="myParam" override="false" value="newValue" />
<Parameter name="myParam1" override="true" value="newValue1" />
</Context>
<!-- 要访问的Web应用程序 -->
<Context docBase="mydemo" path="/mydemo" reloadable="true"
source="org.eclipse.jst.jee.server:mydemo">
<Parameter name="mydemo.param" value="mydemo.value"
override="false" />
</Context>
上面的代码使用了两个<Context>元素分别配置了两个Web应用程序,而且在demo应用程序中的<Context>元素中使用了crossContext属性,如果该属性为true,则在当前Web应用程序中可以访问其他的Web应用程序,否则,将无法访问其他的Web应用程序,也就是无法获得其他Web应用程序的ServletContext对象。
在mydemo工程中配置了一个mydemo.param参数,同时在mydemo应用程序中的web.xml中也配置了一个初始化参数,代码如下:
<context-param>
<param-name>name</param-name>
<param-value>超人</param-value>
</context-param>
在demo应用程序中建立一个Servlet,并且在该Servlet中获得mydemo应用程序的ServletContext对象,并输出上述的两个初始化参数。该Servlet的代码如下:
public class OtherContextServlet extends HttpServlet
{
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// 获得mydemo应用程序的ServletContext对象
ServletContext context = this.getServletContext().getContext("/mydemo");
if(context != null)
{
// 输出mydemo应用程序中两个初始化参数值
out.println("mydemo.param=" + context.getInitParameter("mydemo.param") + "<br/>");
out.println("name=" + context.getInitParameter("name"));
}
}
}
OtherContextServlet的配置代码如下:
<servlet>
<servlet-name>OtherContextServlet</servlet-name>
<servlet-class>chapter4.OtherContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OtherContextServlet</servlet-name>
<url-pattern>/OtherContextServlet</url-pattern>
</servlet-mapping>
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/OtherContextServlet
浏览器显示的信息如图4.9所示。
图4.9 显示其他Web应用程序的初始化参数