开门见山
ServletContext 对象不仅包含了我们之间说的应用初始化参数和应用域属性,还有包含有关 Web 应用的信息。
例如,当前 Web 应用的根路径、应用的名称、应用组件间的转发以及容器下其他 Web 应用的 ServletContext 对象等。
ServletContext 接口访问当前应用信息的方法
· getContextPath() 返回当前 Web 应用的根路径
· getServletContextName() 返回 Web 应用的名字,也就是 元素中 元素
· getRequestDispatcher(String path) 返回一个用于向其他 Web 组件转发请求的 RequestDispatcher 对象
· getContext(String uripath) 根据参数指定的 URL 返回当前 Servlet 容器中其他 Web 应用的 ServletContext() 对象,URL 必须以 “/” 开头的绝对路径
获取应用信息方法
【代码】ContextAppInfoServlet.java
【运行结果】
【Bug 处理】
对,没错,出 Bug了,如果你出现了这个 Bug。
就看之前的文章吧
代码奉上
【ContextAppInfoServlet.java】
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*/
@WebServlet("/ContextAppInfoServlet")
public class ContextAppInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ContextAppInfoServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 设置响应到客户端MIME类型和字符编码方式
response.setContentType("text/html;charset=UTF-8");
// 获取当前ServletContext对象
ServletContext context = super.getServletContext();
// 获取容器中URL路径为“/chapter01”的应用的ServletContext对象
ServletContext contextByUrl = context.getContext("/chapter02");
// 获取当前Web应用的上下文根路径
String contextPath = context.getContextPath();
// 获取当前Web应用的名称
String contextName = context.getServletContextName();
// 获取容器中URL路径为“/chapter02”的应用的应用名称
String contextByUrlName = contextByUrl.getServletContextName();
// 获取转发请求的RequestDispatcher对象
RequestDispatcher rd = context.getRequestDispatcher("/ForwardServlet");
// 获取输出流
PrintWriter out = response.getWriter();
out.println("当前Web应用的上下文根路径是:" + contextPath + "
");
out.println("当前Web应用的名称是:" + contextName + "
");
out.println("容器中URL路径为“/chapter02”的应用的应用名称是:" + contextByUrlName);
}
}