Javaweb学习笔记之ServletContext(一):获取当前 web 应用的路径

package com.demo.h_servletcontext;

import java.io.IOException;

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;

/**
ServletContext 对象:叫做 Servlet 上下文对象,表示一个当前的 web 应用环境。

	ServletConfig 与 ServletContext 的区别:
		ServletConfig 对象用于加载一个 Servlet 的初始化参数,也就是说一个 Servlet 对象对应一个
			ServletConfig 对象;如果一个 web 应用有多个 Servlet 对象,那么就会有多个 ServletConfig 对象;
		ServletContext 对象用于描述一个 web 应用环境,一个 web 应用对应一个 ServletContext 对象,
			也就是说一个 web 应用中不管有多少个 Servlet 对象,ServletContext 对象有且只有一个;
			而且如果一个 web 应用中有多个 Servlet 对象,那么所有的 Servlet 对象都共用一个 ServletContext 对象; 
			所以 ServletContext 对象也叫作 域对象,可以实现在多个 Servlet 中共享数据。
	
	ServletContext 的创建和得到
		创建时机:tomcat 服务器在加载 web 应用的时候创建 ServletContext 对象;
		得到时机:通过 ServletConfig 对象得到 ServletContext 对象(只有这一个途径获取 ServletContext 对象);
	
	核心 API:
		getContextPath():获取当前 web 应用的路径
		request.getContextPath():作用和 servletContext.getContextPath()一样,也是获取 web 应用路径
		
		getInitParameter(String name):得到 web 应用的初始化参数(根据参数名获取参数值)
 		getInitParameterNames():得到 web 应用的初始化参数的集合
 		
 		setAttribute(String name, Object object):将数据存入域对象
 		getAttribute(String name):从域对象中获取数据
 		removeAttribute(String name):将数据从域对象中移除

		getRequestDispatcher(String path).forward(request, response):转发
		request.getRequestDispatcher(String path).forward(request, response):等价于上面代码,都是转发
		
		getRealPath(String path):得到 web 应用的资源文件
		getResourceAsStream(String path)			
 */

@SuppressWarnings("serial")
@WebServlet("/ContextDemo1")
public class ContextDemo1 extends HttpServlet {
	/**
	 * 获取当前 web 应用的路径
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		// 获取 ServletContext 对象
//		ServletContext context = this.getServletConfig().getServletContext();
		// getServletContext()方法中的代码为:return getServletConfig().getServletContext();
		ServletContext context = this.getServletContext(); 
		
		/*
		 * 获取当前 web 应用的路径 (/02_Servlet)
		 * web 应用路径:就是部署到 tomcat 服务器上运行的 web 应用的名称(即项目名称);
		 */
		String contextPath = context.getContextPath();
		System.out.println("contextPath:" + contextPath);
		
		/*
		 * 获取当前 web 应用的路径 (/02_Servlet)
		 * 等价于上面的代码,作用和 context.getContextPath() 一样
		 */
		String contextPath2 = request.getContextPath();
		System.out.println("contextPath2:" + contextPath2);
		
		/*
		 * 案例:用于请求重定向
		 */
//		response.sendRedirect("/02_Servlet/index.html");
		response.sendRedirect(contextPath + "/index.html");
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值