Servlet-1

1.Servlet技术

a.什么是servlet

  1. Servlet是javaEE规范之一,规范就是接口(servlet本身即为接口)
  2. Servlet是javaWeb三大组件之一.(三大组件:Servlet程序,Filter过滤器,Listener监听器)
  3. Servlet是运行在服务器上的一个java小程序,它可以接受客户端发送过来的请求并相应数据给客户端

b.手动创建Servlet程序

  1. 编写一个类去实现Servlet接口
  2. 实现service方法,处理请求并响应数据.
  3. 到web.xml中去配置servlet程序的访问地址

service方法实现

@Override //实现servlet中service方法
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("HelloServlet 被访问了");
}

web.xml配置

<servlet>
    <!--该标签给servlet程序起一个别名(一般是类名)-->
    <servlet-name>HelloServlet</servlet-name>
    <!--该标签是servlet程序的全类名-->
    <servlet-class>com.example.web_01.HelloServlet</servlet-class>
</servlet>

<!--该标签给servlet程序配置访问地址-->
<servlet-mapping>
    <!--该标签告诉服务器当前配置的地址给哪个servlet程序使用-->
    <servlet-name>HelloServlet</servlet-name>
    <!--该标签配置访问地址
    / 在服务器解析的时候,标识地址为http://ip:port/工程路径
    / hello标识地址为 http://ip:port/工程路径/hello (定位servlet程序用的,路径下无需有文件,相当于别名)
    -->
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

c.url地址如何定位到Servlet程序去访问

对应域名后加hello即可访问到service程序http://localhost:8080/web_01_war_exploded/hello
原理见图:(06_servlet即为web_01_war_exploded)
image

d.Servlet生命周期

  1. 执行Servlet构造器方法 (构造函数)
  2. 执行init初始化方法 (init)
  3. 执行service方法 (service)
  4. 执行destroy销毁 (destroy)
  • 第1,2步时在第一次访问的时候创建servlet程序会调用
  • 第3步service方法每次访问都会调用
  • 第4步web工程停止时才会执行

e.get和post请求的分发处理

a.html

<form action="http://localhost:8080/web_01_war_exploded/hello" method="post">
    <input type="submit">
</form>

service方法中对应修改(要获取getmethod方法需向下转型为httpServletRequest)

    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    String method = httpServletRequest.getMethod();
    System.out.println(method);

f.通过继承HttpServlet实现Servlet程序

  • 一般在实际项目开发中,都是使用继承HttpServlet类的方法去实现Servlet程序
  1. 编写一个类去继承HttpServlet类
  2. 根据业务需要去重写doGet和doPost方法
  3. 到web.xml中去配置Servlet程序的访问地址

1.编写HelloServlet2继承(2、3修改web.xml与a.html类似于前面)

public class HelloServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("HelloServlet2的doGet方法");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("HelloServlet2的doPost方法");

}
}

g.使用idea创建servlet程序

  • 包右键new 点击servlet即可创建
    image

h.整个servlet类的继承关系

image

2.ServletConfig类

  • Servlet程序的配置信息类
  • servlet程序和ServletConfig对象都是由Tomcat复杂创建,我们负责使用
  • Servlet程序默认是第一次访问的时候创建;ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。

a.ServletConfig类的三大作用

  1. 可以获取Servlet程序别名servlet-name的值
  2. 获取初始化参数init-param
  3. 获取ServletContext对象

1:System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
2:需先配置web.xml中对应的servlet

<!--servlet标签给Tomcat配置servlet程序-->
<servlet>
    <!--该标签给servlet程序起一个别名(一般是类名)-->
    <servlet-name>HelloServlet</servlet-name>
    <!--该标签是servlet程序的全类名-->
    <servlet-class>com.example.web_01.HelloServlet</servlet-class>

    <!--初始化参数-->
    <init-param>
        <!--参数名-->
        <param-name>username</param-name>
        <!--参数值-->
        <param-value>root</param-value>
    </init-param>
</servlet>

获取初始化参数init-param:
System.out.println("初始化参数username的值是:" + servletConfig.getInitParameter("username"));
3:System.out.println(servletConfig.getServletContext());

3.ServletContext类

a.什么是ServletContext

  1. ServletContext是一个接口,其表示Servlet上下文对象
  2. 一个web工程只有一个ServletContext对象实例
  3. ServletContext对象是一个域对象
  4. ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
    (域对象是一个可以向map一样存取数据的对象,域指的是存取数据的操作范围)
存数据 取数据 删除数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute()

b.ServletContext类的四个作用

  1. 获取web.xml中配置的上下文参数context-param
  2. 获取当前的工程路径:格式:/工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像map一样存取数据

1:配置web.xml

<!--context-param是上下文参数(属于整个web工程)-->
<context-param>
    <param-name>username</param-name>
    <param-value>context</param-value>
</context-param>
<context-param>
    <param-name>root</param-name>
    <param-value>password</param-value>
</context-param>

读取context-param

    ServletContext servletContext = getServletConfig().getServletContext();
    String name = servletContext.getInitParameter("username");
    String password = servletContext.getInitParameter("root");
    System.out.println(name + " " + password);

2: 获取工程路径
System.out.println("当前工程路径:" + servletContext.getContextPath());

3:获取绝对路径(不太理解)

    System.out.println("工程补暑的路径是 " + servletContext.getRealPath("/"));
    // /被服务器解析地址为http://ip:port/工程名/  映射到idea代码的web目录<br/>

4: 存取数据

    ServletContext context = getServletContext();
    context.setAttribute("key1","value1");

    System.out.println("context中key1的值为:" + context.getAttribute("key1"));

注意两点:
1.一个web工程只有一个ServletContext对象实例
2.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。

4. Http协议

  • 协议是指双方或多方相互约定好,大家都需要遵守的规则。

a.什么是Http协议

  • http协议就是指客户端和服务器之间通信时发送数据需要遵守的规则。
  • http协议中的数据又叫做报文

b.请求的http协议

  • 客户端给服务器发送数据叫请求(get,post)
  • 服务器给客户端回传数据叫响应

1 get请求

  1. 请求行
    (1)请求的方式 get
    (2)请求的资源路径[+?+请求参数]
    (3)请求的协议的版本号 HTTP/1.1
  2. 请求头
    key:value 组成 不同的键值对表示不同的含义

get请求http协议内容介绍:

课程详述:
image

from firefox:
image

2 post请求

  1. 请求行
    (1)请求的方式 post
    (2)请求的资源路径[+?+请求参数]
    (3)请求的协议的版本号 HTTP/1.1
  2. 请求头
    key:value 组成 不同的键值对表示不同的含义

空行

  1. 请求体 --->>>发送给服务器的数据

课程详述:
2:post请求http协议内容
image

from firefox(请求行与请求头):
image
请求体:
image

3 常用请求头的说明

  1. Accept: 客户端可以接受的数据类型
  2. Accept-Language: 表示客户端可以接受的语言类型
  3. User-Agent: 表示客户端浏览器的信息
  4. Host: 表示请求时的服务器ip和端口号

4 区分get请求与post请求

get请求

  1. form表情 method=get
  2. a标签
  3. link标签引入css
  4. Script标签引入js文件
  5. img标签引入图片
  6. iframe引入html页面
  7. 在浏览器地址栏中输入地址后敲回车

post请求

  1. form标签 method=post

c.相应的http协议格式

  1. 相应行
    (1)相应的协议和版本号 HTTP/1.1
    (2)相应的状态码
    (3)相应状态描述符
  2. 响应头
    (1)key:value 不同的响应头有其不同的含义

空行

  1. 响应体 --->>> 回传给客户端的数据

详述 http协议内容:
image

d.常用的响应码说明

  1. 200: 请求成功
  2. 302: 请求重定向
  3. 404: 请求服务器已收到但数据不存在(请求地址错误)
  4. 500: 表示服务器已经收到请求,但是服务器内部错误(代码错误)

e.MIME类型说明

MIME是HTTP协议中数据类型。(Multipurpose Internet Mail Extensions)多功能Internet邮件扩充服务。
MIME类型格式是“大类型/小类型”,并与某一种文件的扩展名相对应。

常见MIME类型见下图:
image

f.Chrome/Firefox查看HTTP相应协议

  1. Chrome
    image
  2. Firefox
    见get请求from firefox图片(查看原始信息需点击原视按钮
posted @ 2021-09-05 11:47  rttrti  阅读(43)  评论(0编辑  收藏  举报