Servlet 学习 (1月18日)
一、 什么是Servlet?
(1). Servlet 是javaEE 规范之一, 规范就是接口
(2). 是javaweb三大组件之一, 三大组件分别是 servlet, Filter过滤器, Listener监听器
(3). 接收客户端发来的请求, 并响应数据发送给客户端
二、 手动实现Servlet.
1. 创建一个类 实现Servlet接口, 并重写里面的service() 方法. 一般工程下, 类继承ServletRequest
2. 在 web.xml 中配置servlet 程序的 访问地址.
```java
<!-- servlet 标签给Tomcat 配置servlet 程序 -->
<servlet>
<!-- servlet-name 为servlet程序 起一个 别名 ( 一般是全类名 )-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class 为 servlet程序的 全类名 -->
<servlet-class>com.langsin.show.HelloServlet</servlet-class>
</servlet>
<!-- servlet-mapping 为 servlet程序 配置 访问地址 -->
<servlet-mapping>
<!-- servlet-name 标签的作用是 我当前配置的地址 是给哪个 servlet 程序 使用 -->
<servlet-name>HelloServlet</servlet-name>
<!-- url-pattern 标签 配置 访问地址 -->
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
```
配置Servlet 遇到的 常见错误
1. url-pattern 的 值不是以 斜杠 / 开头
2. servlet-mapping 中的servlet-name 与 servlet 中 servlet-name 值不一致
3. servlet 中 servlet-class 的全类名路径不对
三、 url地址如何定位
四、 Servlet 的生命周期
1. 先执行servlet的构造方法
2. 执行servlet 中的init() 方法 // 1 和 2 只有在程序刚开始执行时, 执行一次
3. 执行service() 方法 // 浏览器没刷新一次, 该方法就执行一次
4. 执行destroy() 方法 // 当停止执行该程序的时候, 执行该方法
五、 eclipse 直接创建 一个Servlet 程序
![@WebServlet("/Hello3") 就相当于在web.xml 中配置改地址](https://img-blog.csdnimg.cn/76caf911365742cbac1feacafa21e0ce.png)
@WebServlet(
name=“Hello”,
urlPatterns={"/hello3"},
loadOnStartup=1
) 就相当于下面这些代码
六、 servletConfig 类的三大作用
1. 可以获取servlet程序的别名. servletConfig.getservletname()
2. 可以获取初始化参数 init-param. <init-param>里面包含类似键值对 (<param-name> 和 <init-value>)
3. 可以获取servletContext 对象.
***注意:***
重写init方法时, init方法里面一定要调用父类的init(servletConfig)方法.
七、 servletContext 类的 四大作用
1. 获取web.xml中 上下文参数 context-param
ServletContext context = getServletContext();
String initParameter = context.getInitParameter("password");
2. 获取当前的工程路径
```java
String path = context.getContextPath();
```
3. 获取工程部署在服务器硬盘上的绝对路径
```java
String realPath = context.getRealPath("/css");
System.out.println(realPath);
```
4. 像map一样存储数据
getAttribute()
八、 HTTP协议
客户端给服务端发送数据叫请求, 服务端给客户端传回数据叫 响应.
请求 分为 GET 请求 和 POST 请求
1. GET请求 (请求行 和 请求头)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e1170c7e208245e5a82020e7f73b36ab.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFydmV5TXU=,size_20,color_FFFFFF,t_70,g_se,x_16)
2. POST请求
请求行 , 请求头 , 空格, 请求体
3. 区分GET请求 和 POST请求
GET请求:
(1). form标签, method=get
(2). a标签
(3). link标签引入css
(4). script标签引入js文件
(5). img标签引入图片
(6). iframe引入 html 页面
(7). 在浏览器中输入地址敲回车
POST请求:
form标签, method=post
4. HTTP协议响应示例 (响应行, 响应头, 空格, 响应体)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed5abc212b7b4419afc9dab427cf4448.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFydmV5TXU=,size_20,color_FFFFFF,t_70,g_se,x_16)
5. 常见的响应状态码
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了, 但你请求的数据不存在 (网页地址错误)
500 表示服务器已经收到请求, 但服务器内部错误 (代码错误)
6. MIME类型 (HTTP 数据类型) 格式是 大类型/小类型
九、 请求转发
十、 请求重定向
请求重定向的特点:
1. 地址栏会发生改变
2. 两次请求
3. 不共享Request域中的数据
4. 不能访问WEB-INF下的资源
5. 能够访问工程外的资源