1 ServletContext
1.1 ServletContext概述
在Tomcat服务器中的web的项目 也叫做WEB应用程序。在java中 万物皆对象,那么,应用程序也是对象。
在Java Web开发中,使用ServletContext对象表示WEB应用程序。
说明:
1. 在一个WEB应用程序中,只能存在一个ServletContext对象。
2. 每个应用程序,都有它自己所对应的一个ServletContext对象。
3. 在服务器启动的时候,为每个web应用程序创建一个单独的ServletContext对象。
4. ServletContext是接口, 此接口的实现类是tomcat引擎提供
1.2 ServletContext对象的作用
- 获取WEB应用程序的初始化参数
- 获取WEB应用程序下任意资源的绝对路径
- ServletContext作为域对象,存储数据
1.3 获取ServletContext对象
* ServletContext对象 (Servlet上下文对象)
* 就是Web应用程序对象,描述的是整个web程序
* 每个应用程序只有一个对象
*
* 接口: ServletContext
* 接口实现类对象 Tomcat启动的时候,已经创建好了,获取使用
* 获取方式简单:
* 父类的父类中,定义方法 public ServletContext getServletContext()
* 继承关系,直接调用即可
*
* 原理: Tomcat服务器会在启动的时候扫描 webapps
* 找所有的Web程序,每个web程序 ,创建对象ServletContext
实例:
public class Context1Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
System.out.println(context);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.4 作用一:获取WEB应用程序的初始化参数(意义不大)
因为一个web应用程序只有一个ServletContext对象,所以这个对象对整个应用程序的相关内容都是了解的
- web.xml 配置WEB应用程序的初始化参数
目前获取初始化参数意义不大
以前的时候,在配置文件中,配置数据库的连接信息
现在使用连接池技术
<!-- 配置的是WEB程序的初始化参数-->
<context-param>
<param-name>heima</param-name>
<param-value>java</param-value>
</context-param>
- API操作
方法 | 返回值 | 描述 |
---|---|---|
getInitParameter(String name) | String | 获取web应用程序的初始化参数 |
- 代码演示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 获取ServletContext对象
* 父类的方法
* org.apache.catalina.core.ApplicationContextFacade实现接口ServletContext
*/
ServletContext context = getServletContext();
System.out.println(context);
//context对象,获取配置文件中的初始化参数
String value = context.getInitParameter("heima");
System.out.println(value);
}
1.5 作用二:获取WEB应用程序下任意资源的绝对路
方法 | 返回值 | 描述 |
---|---|---|
getRealPath(String path) | String | 接收一个资源的相对路径,返回真实路径(完整路径)的字符串 |
- 获取web目录下的a.txt绝对路径
- 获取web目下WEB-INF目录下的b.txt绝对路径
- 获取src目录下的c.txt绝对路径
- 获取web02 module下的d.txt绝对路径,获取不到
1 Tomcat的运行目录与我们的开发目录是不同的
2 Tomcat的运行目录只有两个东西:我们开发目录中的web目录下的文件和src下文件,所以module下的文件路径是获取不到的
实例:
/**
* ServletContext对象的方法:
* String getRealPath(String path)
* 方法: 可以获取到Web应用程序下,任何资源的绝对路径
* 参数传递的是相对路径,返回绝对路径
*
* ServletContext对象:表示整个web应用程序
*/
public class Context3Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
//获取到a.txt文件的绝对路径,参数写的是a.txt文件相对路径
//怎么写相对路径, 相对的是谁
//context对象相对的是web应用程序 web02
String aPath = context.getRealPath("a.txt");
System.out.println(aPath);
//获取到b.txt的绝对路径
String bPath = context.getRealPath("WEB-INF/b.txt");
System.out.println(bPath);
// 获取到c.txt的绝对路径
String cPath = context.getRealPath("WEB-INF/classes/c.txt");
System.out.println(cPath);
// 获取到d.txt的绝对路径
//IDEA工程下的文件,不会发布在Tomcat,获取不到
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.6 作用三:ServletContext作为域对象
ServletContext是在服务器启动的时候为每个web项目 单独创建一个ServletContext对象。当web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。向ServletContext中保存的数据一直存在(当服务器关闭的时候ServletContext对象被销毁,然后里面数据才会失效)。
* ServletContext对象,域对象
* 是个容器,存储数据
* 作用域:
* 最大的一个作用域,在ServletContext对象中,存储的任何数据
* 在整个Web应用程序中,全有效
- ServletContext作用范围:整个web应用。
方法 | 返回值 | 描述 |
---|---|---|
setAttribute(String key, Object value) | void | 向域对象存储数据 |
getAttribute(String key) | Object | 取出域对象数据 |
removeAttribute(String key) | void | 移除域对象数据 |
tips:域对象概念
可以在不同Servlet之间传递数据的对象,就是域对象
只要是域对象都有如下方法
setAttribute(name,value);存储数据的方法
getAttribute(name);根据name获取对应数据值
removeAttribute(name);删除数据
public class Context4Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
//域对象存储键值对
context.setAttribute("java","heima");
//取出域对象中的数据
Object o = context.getAttribute("java");
System.out.println(o);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2 Response
2.1 Response概述
方向: 服务器 -> 浏览器
负责对浏览器进行响应的对象
什么是响应: 服务器接收到请求需要进行处理,将处理以后的结果显示回浏览器端(将这个过程称为是响应Response)。
- 查看Servlet中的service方 法得知, Servlet中使用的ServletResponse接口, 而我们使用的是ServletResponse的子接口HttpServletResponse, 它继承自ServletResponse, 是与HTTP协议相关的Response响应对象
- 我们使用的子接口HttpServletResponse, 此接口对象由Tomcat引擎提供
- 可以实现对客户端的响应, 响应内容包括: 响应行,响应头,响应体
* Response对象,负责向客户端响应数据的对象
* Sun接口:
* ServletResponse接口
* 适用任何网络传输协议
*
* 目前传输协议都是HTTP协议,专门使用HTTP协议
* 做了一个子接口HttpServletResponse
* 使用的对象是子接口HttpServletResponse的实现类对象
* 此实现类对象,是Tomcat引擎创建,调用方法doGet传递参数
*
* 客户端响应:
* 响应行; 协议名 状态码
* 响应头: 键值对格式 数据k:v的形式