servlet和http基础

Servlet

概念

  • 运行在服务器的小程序

    • servlet就是一个接口,定义了java类被浏览器访问到的规则。

    • 在java中,我们自己定义的类,实现servlet接口,复写方法。

入门程序

  • 定义一个JavaEE项目

  • 定义一个类,实现servlet接口,实现接口的抽象方法

  • 配置web.xml配置文件

<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</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会将字节码文件加载进内存,并且创建其对象

  • 调用其方法

 

Sevlet的生命周期方法

  • 被创建,执行init方法,只执行一次

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

    • 可以修改的创建时机

    <load-on-startup>-1</load-on-startup>  //设置为负数,第一次访问时被执行
    <load-on-startup>0</load-on-startup> //设置为0或整数,服务器启动时执行
    • init方法只执行一次,说明内存中 只存在一个对象,servlet是单例的

      • 多个用户访问时,可能存在线程安全问题

      • 尽量不要在servlet中定义成员变量,定义了,也不要对其修改值

  • 提供服务,执行service方法执行多次(方法参数为servletRequest和servletResponse

  • 被销毁,执行destory方法,只执行一次

    • 只有服务器正常关闭后,才会执行destory方法

    • destory方法在servlet被销毁之前执行,一般用于释放资源

 

Sevlet3.0

  • 支持注解配置,可以不需要web.xml了

  • 使用步骤

    • 创建javaEEx项目,选择Servlet的版本3.0以上;

    • 定义一个类,实现sevlet接口

    • 复写方法

    • 在类上使用@WebServlet注解,进行配置

      • @WebServlet("资源路径")

      • loadOnStartup也可以配置

 

IDEA与tomcat的相关的配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件

    • 查看控制台的log:Using CATALINA_BASE: "C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast"

  2. 工作空间项目 和 tomcat部署的web项目

    • tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源

    • WEB-INF目录下的资源不能被浏览器直接访问。

    • 可以通过转发,重定向访问

 

 

Servlet体系结构

Servlet -- 接口 | GenericServlet -- 抽象类 | HttpServlet -- 抽象类

  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

    • 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

  • HttpServlet:对http协议的一种封装,简化操作

    1. 定义类继承HttpServlet

    2. 复写doGet/doPost方法

建议使用HttpServlet

 

Servlet路径配置

  • 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})

  • 路径定义规则:

  1. /xxx:路径匹配

  2. /xxx/xxx:多层路径,目录结构

  3. *.do:扩展名匹配 *此处不要加/

 

Http

概念:超文本传输协议

  • 超文本:图片,链接,视频等文件

  • 传输协议:定义了客户端和服务端通信时,发送数据的格式;

 

特点

  • 基于TCP/IP的高级协议

  • 默认端口号:80

  • 基于请求/响应模型,一次请求对应一次请求

  • 无状态的:每次请求之前相互独立,不能交互数据(cookie和session解决了这个问题)

请求头

GET/sample.jspHTTP/1.1
Host: wx.qq.com   主机名
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0     请求的浏览器类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;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, br 可以接收的压缩格式
Referer: https://www.baidu.com/link?url=6VPeFjZ2yOmar2e25U_VPLPpRypyQzDF1Ik4Wp_e7v_&wd=&eqid=d572c23a00000583000000065ee384e7
Connection: keep-alive 连接
Cookie: mm_lang=zh_CN; MM_WX_NOTIFY_STATE=1; MM_WX_SOUND_STATE=1
Upgrade-Insecure-Requests: 1 升级的信息
Cache-Control: max-age=0

请求体: name=zhangsan

客户端浏览器告诉服务器一些信息

  • 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1

    * 请求方式:
    * HTTP协议有7中请求方式,常用的有2种
    * GET:
    1. 请求参数在请求行中,在url后。
    2. 请求的url长度有限制的
    3. 不太安全
    * POST:
    1. 请求参数在请求体中
    2. 请求的url长度没有限制的
    3. 相对安全

 

  • 请求头名称: 请求头值,常见的请求头:

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

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

  • Referer: https://www.baidu.com/link?

    • 告诉服务器,我(当前请求)从哪里来?

      • 作用:

        • 防盗链

        • 统计工作:

 

  • 请求空行 空行,就是用于分割POST请求的请求头,和请求体的。

 

  • 请求体(正文):

    • 封装POST请求消息的请求参数的

posted @ 2020-06-12 21:34  w574  阅读(120)  评论(0)    收藏  举报