- 1. Servlet 技术
- 1.1 什么是Servlet
- 1.2 手动实现 Servlet 程序
- 1.3 url地址到Servlet程序的访问
- 1.4 Servlet 的生命周期
- 1.5 Servlet 请求的分发处理
- 1.6 通过继承 HttpServlet 实现 Servlet 程序
- 1.7使用 IDEA 创建 Servlet 程序
- 1.8 Servlet 类的继承体系
- 2. ServletConfig类
- 2.1 ServletConfig 类的三大作用
- 3 ServletContext 类
- 3.1 什么是 ServletContext?
- 3.4 ServletContext 类的四个作用
- 4 Http 协议
- 4.1 什么是 Http 协议
- 4.2 请求的 http 协议格式
- 4.2.1 GET请求
- 4.2.2 POST请求
- 4.2.3 哪些是GET请求,哪些是POST请求
- 4.3 响应的 HTTP 协议格式
- 4.4 常见的响应码
1、Servlet 是 javaEE规范之一。规范就是接口 2、Servlet 是 javaWeb三大组件之一。 三大组件分别是:Servlet程序,Filter过滤器, Listener监听器 3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应给客户端。1.2 手动实现 Servlet 程序
1、编写一个类去实现 Servlet 接口
2、实现Servlet 方法,处理请求,并响应数据
package main.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
public HelloServlet() {
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3、HelloServlet 被访问了");
// 类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
doget();
}else if("POST".equals(method)){
dopost();
}
}
public void doget(){
System.out.println("get请求");
}
public void dopost(){
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3、到 web.xml中去配置 servlet 程序的访问地址1.3 url地址到Servlet程序的访问
http://localhost:8080/06_servlet/hello
| 符号 | 含义 |
|---|---|
| http:// | 表示http协议 |
| localhost | 服务器ip |
| 8080 | 端口号 |
| /06_servlet | 是工程路径 |
| hello | 资源路径 |
通过 ip 地址定位服务器 通过端口号定位 Tomcat 通过工程路径确定访问哪个工程 web.xml 中配置的路径优先检查
找到这个类
最终在该类中找到方法
1.4 Servlet 的生命周期1、执行 Servlet 构造器方法 2、执行 init 初始化方法(第一,二步在第一次访问时创建 Servlet 程序会调用) 3、执行 Servlet 方法(第三步每次访问都会调用)
4、执行 destroy 销毁方法(第四步在web工程停止的时候调用)
package main.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
public HelloServlet() {
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3、HelloServlet 被访问了");
// 类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
doget();
}else if("POST".equals(method)){
dopost();
}
}
public void doget(){
System.out.println("get请求");
}
public void dopost(){
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4、destroy销毁方法");
}
}
1.5 Servlet 请求的分发处理
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3、HelloServlet 被访问了");
// 类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
doget();
}else if("POST".equals(method)){
dopost();
}
}
public void doget(){
System.out.println("get请求");
}
public void dopost(){
System.out.println("post请求");
}
1.6 通过继承 HttpServlet 实现 Servlet 程序
public class HelloServlet2 extends HelloServlet{
@Override
public void doget() {
System.out.println("helloservlet2 的 get方法");
}
@Override
public void dopost() {
System.out.println("helloservlet2 的 post方法");
}
}
web.xml 文件配置
1.7使用 IDEA 创建 Servlet 程序HelloServlet2 main.servlet.HelloServlet2 HelloServlet2 /hello2
注意:不要 ✔ 创建JavaEE6+注解类 自动配置web.xml文件,只需要填写路径1.8 Servlet 类的继承体系
Interface Servlet (Servlet 接口,只是负责定义 Servlet 程序的访问规范) ↑ 实现接口 Class GenericServlet (GenericServlet 类实现了 Servlet 接口。做了很多空实现。 并持有一个ServletConfig类的引用。并对ServletConfig的使用做一些方法) ↑ 继承 Class HttpServlet (HttpServlet 抽象类实现了 Service() 方法,并实现了请求的分发处理) ↑ 继承 自定义的 Servlet 程序 (根据业务需要重写doget或dopsot方法即可)2. ServletConfig类
ServletConfig类从类名上看,是Servlet程序的配置信息类。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问时创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的ServletConfig 对象。
2.1 ServletConfig 类的三大作用1、可以获取 Servlet 程序的别名 servlet-name 的值
2、获取初始化参数 init-param
3、获取 ServletContext 对象
web.xml配置
1、ServletContest 是一个接口,它表示 Servlet 上下文
2、一个 web 工程,只有一个 ServletContext 对象实例
3、ServletContext 对象是一个域对象
4、ServletContext 是在 web 工程部署的启动的时候创建。在 web 工程停止的时候销毁
什么是域对象?
域对象,是可以像Map一样存取数据的对象,这里的域指的是存取数据的操作范围,整个 web 工程
| 存数据 | 取数据 | 删除数据 | |
|---|---|---|---|
| Map | put() | get() | remove() |
| 域对象 | setAttribute() | getAttribute() | removerAttribute() |
1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式:/工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map 一样存储数据
package main.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);
// 2、获取当前的工程路径,格式:/工程路径
System.out.println("当前工程路径:"+ context.getContextPath());
// 3、获取工程部署后在服务器硬盘上的绝对路径
System.out.println("工程部署的路径是:"+ context.getRealPath("/"));
// 4、像 Map 一样存储数据
}
}
package main.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("保存之前:context1 获取key1的值是:"+ context.getAttribute("key1"));
context.setAttribute("key1","value1");
System.out.println("Conttext1 中获取域数据key1的值是:"+ context.getAttribute("key1"));
System.out.println("Conttext1 中获取域数据key1的值是:"+ context.getAttribute("key1"));
}
}
package main.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("context2 中获取域数据key1的值是:"+context.getAttribute("key1"));
}
}
在 ContextServlet2 中也可以获取在 ContextServlet1 中存储的数据4 Http 协议 4.1 什么是 Http 协议
什么协议? 协议是指双方或多方相互约定好,大家都需要遵守的规则,叫做协议 所谓http协议,是指客户端和服务器之间通信时,发送的数据,需要遵守的协议,叫 http 协议。 http 协议中的数据叫报文。4.2 请求的 http 协议格式
客户端给服务器发送数据叫请求 服务器给客户端传回数据叫响应 请求分为GET请求,POST请求(最常用的)4.2.1 GET请求
1、请求行
(1)请求的方式 GET
(2)请求的资源路径 [ +?+请求参数 ]
(3)请求的协议版本号 http/1.1
2、请求头
key:value 组成 不同键值对,表示不同的含义
1、请求行
(1)请求的方式 POST
(2)请求的资源路径 [ +?+请求参数 ]
(3)请求的协议版本号 http/1.1
2、请求头
key:value 组成 不同键值对,表示不同的含义
空行
3、请求体 ===>>>> 发送给服务器的数据
GET请求:
1、from标签 method=get 2、a 标签 3、link 标签引入css 4、Script 引入js文件 5、img 标签引入图片 6、iframe 引入 html 页面 7、在浏览器地址栏中输入地址后回车
POST请求:
1、form 标签 method=post4.3 响应的 HTTP 协议格式
1、响应行
(1)响应协议和版本号
(2)响应状态码
(3)响应状态码描述
2、响应头
(1)key:value 不同的响应头,有不同的含义
空行
3、响应体 ===>>> 回传给客户端的数据
响应体
200:请求成功
302:重定向
404:请求地址错误
500:服务器内部错误



