Servlet简介

一、servlet介绍

1、概念

servlet是一个运行在服务器端的小程序,也是一个接口,介绍了Java类被tomcat识别的规则。

2、servlet的创建和使用

(1)创建一个JavaEE项目

(2)定义一个类,实现servlet接口

(3)实现接口中的抽象方法

①servlet有五个方法,如下图代码所示:

javascript 复制代码
@WebServlet("/demo2" )
public class servletDemo1 implements Servlet {

//    初始化方法,在servlet被创建时,执行,只会执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

//    获取servlet(config)配置对象
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*提供服务的方法
    每一次servlet被访问时执行。执行多次*/
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("study1");
    }

//    获取servlet的一些信息,eg:版本、作者.....
    @Override
    public String getServletInfo() {
        return null;
    }

//    销毁方法,在服务器正常关闭时执行,执行一次
    @Override
    public void destroy() {

    }

②servlet被创建的时机?

默认情况下,第一次被访问时,servlet被创建。

也可进行配置:

第一次被访问时,创建:<load-on-startup>的值为负数

在服务器启动时,创建:<load-on-startup>的值为0或正整数

注意事项 :Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的,多个用户同时访问时,可能存在线程安全问题。

解决方法:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

③服务器正常关闭时,才会执行destroy方法,destroy方法在Servlet被销毁之前执行,一般用于释放资源。

(4)配置servlet

方法一:在web.xml中进行配置

javascript 复制代码
       <servlet>
	        <servlet-name>demo1</servlet-name>
	        <servlet-class>全类名</servlet-class>
	    </servlet>
	
	    <servlet-mapping>
	        <servlet-name>demo1</servlet-name>
	        <url-pattern>/demo1</url-pattern>
	    </servlet-mapping>

执行原理 :当服务器接收到客户端的请求时,会解析请求的url,获取访问servlet的资源路径。查找web.xml文件,是否有对应的<url-pattern>标签体内容,若存在查找对应的<servlet-class>全类名,tomcat会将字节码文件加载进内存,并且创建其对象,最后调用其方法。

方法二:在tomcat3.0以后便支持注解配置,也就可以不在web.xml中进行配置了。

在类上使用@WebServlet注解,进行配置---- @WebServlet("资源路径"),资源路径的定义多种:

javascript 复制代码
//@WebServlet({"/demo1","/d1"})
//@WebServlet("/user/demo3")
//@WebServlet("demo3.do ")
@WebServlet( "/Demo1")
public class responseDemo1 extends HttpServlet {

}

3、servlet体系结构

(1)GenericServlet

①Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,因此继承GenericServlet,实现service()方法即可。

②GenericServlet是一个通用的Servlet类,适用于为不特定的协议提供服务。

(2)HttpServlet

①对http协议的一种封装,专门用于处理HTTP协议的Servlet类。

②提供了针对HTTP请求方法的处理方法,doGet/doPost方法,因此继承HttpServlet,实现doGet/doPost方法方法即可。

二、HTTP

1、概念

HTTP(超文本传输协议):定义了客户端与服务器进行通信时,发送数据的格式。

特点:

(1)基于TCP/IP的高级协议。

(2)默认端口号80。

(3)一次请求对应一次响应

(4)每次请求之间是独立的,不能进行交互。

历史版本:

1.0:每一次请求响应都会建立新的连接

1.1:复用连接

2、请求消息

请求消息字符串格式:

javascript 复制代码
POST /login.html	HTTP/1.1
		Host: localhost
		User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
		Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
		Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
		Accept-Encoding: gzip, deflate
		Referer: http://localhost/login.html
		Connection: keep-alive
		Upgrade-Insecure-Requests: 1
		
		username=zhangsan	

(1)请求行

格式:请求方式 请求url 请求协议/协议版本号

*请求方式有7种:常用的有post和get,在前面的知识点中介绍过了。

(2)请求头:客户端浏览器告诉服务器一些信息

格式:请求头名称:请求头值

常见的请求头:

①User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

作用: 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

②Referer:告诉服务器,当前请求的来源

作用: 防盗链

统计工作

(3)请求空行

用于分割请求头和请求头的一条空行。

(4)请求体

封装post请求消息的请求参数。

3、响应消息

响应字符串简化格式:

javascript 复制代码
HTTP/1.1 200 OK
		Content-Type: text/html;charset=UTF-8
		Content-Length: 101
		Date: Wed, 06 Jun 2018 07:08:42 GMT

<--!响应体内容-->
		<html>
		  <head>
		    <title>$Title$</title>
		  </head>
		  <body>
		  hello , response
		  </body>
		</html>

(1)响应行

①格式

响应协议/协议版本号 响应状态码 状态码描述

②响应状态码(3位)

服务器告诉客户端浏览器本次请求和响应的一个状态。

③分类:

javascript 复制代码
1xx:服务器接收客户端的消息但是未完全接受完,等待一段时间后发送1xx状态码。

2xx:表明服务器成功接收、理解和处理了客户端发送的请求。

3xx:重定向。表示客户端采取进一步操作以完成请求。当服务器收到请求后,可能需要将客户端重定向到另一个URL或执行其他操作。

4xx:客户端错误。
    例如:
        404(请求路径没有对应的资源) 
		405:请求方式没有对应的doXxx方法

5xx:服务器端错误

(2)响应头

①格式

响应头名称:响应头的值

②常见响应头
javascript 复制代码
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
		值:
			in-line:默认值,在当前页面内打开
			 attachment;filename=xxx:以附件形式打开响应体。文件下载

(3)响应空行

响应头和响应主体之间的一个空白行。

(4)传输的数据

传输的数据。

*下一篇我将介绍一下request对象和response对象。

相关推荐
时差9539 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
苍老流年9 小时前
Hive中各种Join的实现
数据仓库·hive·hadoop
静听山水10 小时前
Hive:UDTF 函数
hive
EDG Zmjjkk11 小时前
Hive 查询(详细实操版)
数据仓库·hive·hadoop
ajsbxi11 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
lzhlizihang12 小时前
【Hive sql 面试题】求出各类型专利top 10申请人,以及对应的专利申请数(难)
大数据·hive·sql·面试题
Hsu_kk12 小时前
Hive 查询各类型专利 Top 10 申请人及对应的专利申请数
数据仓库·hive·hadoop
静听山水12 小时前
Hive 的数据存储单元结构
hive
大数据编程之光12 小时前
Hive 查询各类型专利 top10 申请人及专利申请数
大数据·数据仓库·hive·hadoop
杰克逊的日记12 小时前
Hive详解
数据仓库·hive·hadoop