Servlet整个体系
1. Servlet结构分析
2. ServletConfig 类
- Servlet程序的配置信息类
- Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
- Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象。
2.1 ServletConfig 类的三大作用
- 可以获取Servlet的别名 servlet-name 的值
- 获取初始化参数 init-param
- 获取 ServletContext 对象
xml配置
<!--servlet 标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name 标签 servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class 是Servlet程序的全类名-->
<servlet-class>com.han.code.HelloServlet</servlet-class>
<!--init-param是初始化参数-->
<init-param>
<!--参数名-->
<param-name>username</param-name>
<!--参数值-->
<param-value>root</param-value>
</init-param>
<init-param>
<!--参数名-->
<param-name>url</param-name>
<!--参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
java类获取
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
// 1. 可以获取Servlet的别名 servlet-name 的值
System.out.println("HelloServlet类的别名为:"+servletConfig.getServletName());
// 2. 获取初始化参数 init-param
System.out.println("初始化参数Username的值为:"+servletConfig.getInitParameter("username"));
System.out.println("初始化参数URL的值为:"+servletConfig.getInitParameter("url"));
// 3. 获取 ServletContext 对象
System.out.println(servletConfig.getServletContext());
}
- 在其他位置也可以使用ServletConfig
注:重写init方法后
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config); // 重写之后一定要调用父类中的init(ServletConfig)操作
System.out.println("重写了init方法");
}
3. ServletContext类
3.1 什么是ServletContext
- ServletContext 是一个接口, 它表示 Servlet 上下文对象
- 一个web工程,只有一个ServletContext对象实例
- ServletContext对象是一个域对象
- ServletContext 是在web工程部署启动的时候创建,在web工程停止的时候销毁
什么是域对象?
域对象,是可以像Map一样存取数据的对象,叫域对象
这里的域指的是存取数据的操作范围,整个web工程
存数据 | 取数据 | 删除 数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
3.2 ServletContext类的四个作用
- 获取web.xml 中配置的上下文参数context-param
- 获取当前的工程路径,格式:/工程路径
- 获取工程部署后在服务硬盘上的绝对路径
- 像Map一样存取数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取 web.xml 中配置的上下文参数 context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param 参数username的值是:"+username);
System.out.println("context-param 参数password的值是:"+context.getInitParameter("password"));
// 2、获取当前的工程路径,格式: /工程路径
System.out.println("当前工程路径:"+context.getContextPath());
// 3、获取工程部署后在服务器硬盘上的绝对路径
/**
* /斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录
*/
System.out.println("工程部署的路径是"+context.getRealPath("/"));
// 4、像 Map 一样存取数据
context.setAttribute("key1","value1");
System.out.println("Context中获取域数据key1的值 是:"+context.getAttribute("key1"));
}