h) Servlet 类的继承体系
2. ServletConfig 类
ServletConfig 类从类名上来看,就知道是Servlet程序的配置信息类。
Servlet程序和ServletConfig 对象都是有Tomcat负责创建,我们负责使用。
Servlet程序默认是第一次访问的时候创建,ServletConfig 是每一个Servlet程序创建时,就创建一个对应的ServletConfig对象。
a) ServletConfig类的三大作用
1、可以获取Servlet程序的别名servlet-name 的值
2、获取初治化参数init-param
3、获取 ServletContext对象
web.xml中的配置
<!-- servlet标签给Tomcat配置Servlet程序 --> <servlet> <!-- servlet-name 标签 Servlet程序起一个别名(一般是类名) --> <servlet-name>HelloServlet</servlet-name> <!-- servlet-class 标签 Servlet程序的全类名 --> <servlet-class>com.servlet.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>
HelloServlet
@Override 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()); }
输出结果
注意点:
否则
3. ServletContext 类
a)什么是ServletContext?
1、ServletContext是一个接口,它表示Servlet上下文对象
2、一个web工程,只有一个ServletContext对象实例。
3、ServetContext对象是一个域对象
4、ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
什么是域对象?
域对象,是可以像Map一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,整个web工程。
存数据 |
取数据 | 删除数据 | |
Map | put() | get() | remove() |
域对象 | setAttribute() | getAtribute() | removeAttribute(); |
b)ServletContext类的四个作用
1、获取web.xml中配置的上下文参数context-param
2、获取当前的工程路径,格式:工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像Map一样存取数据
ServletContext 演示代码
ContextServlet
package com.servlet; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class ContextServlet extends HttpServlet { @Override 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参数username的值是:"+context.getInitParameter("password")); System.out.println("init-param参数url的值是:"+context.getInitParameter("url"));//null // 2、获取当前的工程路径,格式:工程路径 System.out.println("当前工程路径:"+context.getContextPath()); // 3、获取工程部署后在服务器硬盘上的绝对路径 /** * / 斜杠被服务器解析地址为:http://ip:prot/工程名/ 映射到IDEA代码的web目录 * */ System.out.println("工程部署的路径是:"+context.getRealPath("/")); System.out.println("工程下css目录的绝对路径是:"+context.getRealPath("/css")); System.out.println("工程下imgs目录1.jpg的绝对路径是:"+context.getRealPath("/imgs/1.jpg")); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
web.xml中的配置
<!-- Context-Param是上下文参数(它属于整个web工程)--> <context-param> <param-name>username</param-name> <param-value>context</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>root</param-value> </context-param> <servlet-mapping> <servlet-name>ContextServlet</servlet-name> <url-pattern>/contextServlet</url-pattern> </servlet-mapping>
ContextServlet1
package com.servlet; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class ContextServlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取ServletContext对象 ServletContext context = getServletContext(); System.out.println(context); System.out.println("保存之前:Context1 中获取域数据key1的值是:"+context.getAttribute("key1")); context.setAttribute("key1","value1"); System.out.println("Context1 中获取域数据key1的值是:"+context.getAttribute("key1")); } }
ContextServlet2
package com.servlet; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class ContextServlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context=getServletContext(); System.out.println(context); System.out.println("Context2 中获取域数据key1的值是:"+context.getAttribute("key1")); } }
4. Http 协议
a) 什么是HTTP协议
什么是协议?
协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。
所谓HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议。
HTTP协议中的数据又叫报文。
b)请求的HTTP协议格式
客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。
请求又分为GET请求,和POST请求两种
i.GET请求
1、请求行
(1)请求的方式 GET
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2、请求头
key : value 组成 不同的键值对,表示不同的含义。
ii.POST请求
1、请求行
(1)请求的方式 POST
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2、请求头
1)key:value 不同的请求头,有不同的含义
空行
3、请求体 ===>>> 就是发送给服务器的数据
iii.常用请求头的说明
Accept:表示客户端可以接收的数据类型
Accpet-Languege:表示客户端可以接收的语言类型 User-Agent:表示客户端浏览器的信息
Host:表示请求时的服务器ip和端口号
iv.哪些是GET请求,哪些是POST请求
GET请求有哪些:
1、form标签method=get
2、a标签
3、link标签引入css
4、Script标签引入js文件
5、img标签引入图片
6、ifame引入html页面
7、在浏览器地址栏中输入地址后敲回车
POST请求有哪些:
8、form标签method=post
c)响应的HTTP协议格式
1、响应行
(1)响应的协议和版本号
(2)响应状态码
(3)响应状态描述符
2、响应头
(1) key :value 不同的响应头,有其不同含义
空行
3、响应体 —>>> 就是回传给客户端的数据
d)常用的响应码说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求,但是服务器内部错误(代码错误)
e)MIME类型说明
MIME是HTTP协议中数据类型。 I
MIME的英文全称是"Multipurpose Internet MailExtensions"”多功能Internet邮件扩充服务。MIME类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应。
常见的MIME类型:
浏览器如何查看HTTP协议