Servlet和Http协议

Servlet


概述

1. 概念:运行在服务器端的小程序
2. public interface Servlet :是一个接口
3. 自定义一个类, 实现servlet,重写这个这些方法

快速入门

1. 创建javaee项目
2. 定义一个类来实现servlet接口,重写方法

        @Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("Hello World");

}
3. 配置servlet

 `<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <!--配置Servlet -->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>com.liangxin.web.servletDemo1</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
</web-app>`

分析:servlet的执行流程


1. 在服务器中输入url地址:浏览器解析url通过端口号找到Tomcat服务器中的项目 
2. 找到web.xml文件中的servlet配置文件, 先找到servletmapping 中的url-pattern 中的servlet-name, 
3. 得到对应servlet的全限定类名, 通过反射技术, 服务器自动创建servlet实现类的对象, 执行service方法

Servlet的生命周期

1. init() servlet只会创建一次
2. service(), 访问一次,就会执行一次
3. destroy(), 当服务器关闭的时候就会执行,只会执行一次

详解servlet的生命周期

1. init() servlet只会创建一次-- 在内存中只存在一个对象,单例模式 (尽量不要在servlet中定义成员变量)
    1.默认情况下,第一次访问的时候就会创建 ,默认是负数
    2.指定servlet的创建时机在服务器启动的时候创建
    3.<load-on-startup>5</load-on-startup>
    <!--为负数的的时候 在第一次访问的时候被创建, 默认是负数, 为正数的时候,在服务器启动的时候创建-->
2. service(), 访问一次,就会执行一次 提供服务的
    每次访问的时候,service都会执行
3. destroy(), 当服务器关闭的时候就会执行,只会执行一次  
    1. 只有在服务器正常关闭的时候才会执行,
    2. destroy()方法在Servlet被销毁之前执行,一般用于释放资源
    3. 服务器关闭的时候,servlet被销毁

servelt注解配置

1. 支持注解配置,不需要xml文件配置
2. 使用servlet3.0以上, 不创建web.xml文件
3. @WebServlet注解的使用;、
4. javaee6开始支持3.0
5. @WebServlet("资源路径")
6. 

 `@Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WebServlet {
        String name() default "";

        String[] value() default {};

        String[] urlPatterns() default {};

        int loadOnStartup() default -1;

        WebInitParam[] initParams() default {};

        boolean asyncSupported() default false;

        String smallIcon() default "";

        String largeIcon() default "";

        String description() default "";

        String displayName() default "";`

Idea和Tomcat相关配置

1. idea会单独建立一份配置文件C:\Users\Lbaci\.IntelliJIdea2017.3\system\tomcat
2. idea中工作空间和web项目的位置是不一样的
3. tomcat真正访问的是tomcat 部署额web项目, tomcat部署的web项目对应的着工作空间的web项目下的所有的资源
4.WEB-INF文件下的资源是不能直接访问的
5.debug的方式变了点击小虫子图标启动

Servlet体系结构

1. Servelt接口 --实现了 --- (抽象类) GenericServlet--extends-- (抽象类)HttpServlet
2. GenericServlet抽象了service方法,其他的方法进行了空实现
3. HttpServlet(对Http协议进行封装)(不用再判断是get还是post) 提供了方法DoGet()和DoPost()

Serlet-urlpartten

1.使用注解定义url-partten 是一个数组,我们可以定义多个urlpartten
2.servlet路径的定义规则    
    1. /xxx @WebServlet("/demo")
    2. /xxx/xxx多层路径@WebServlet("/demo/demo3")
    3. /* @WebServlet("/*") 优先级很低
    4. @WebServlet("*.do")前面不能加/

Http

1. 超文本传输协议:Http http1.1(复用连接) 
2. 传输协议: 数据传输的协议:定义了客户端和服务器端数据传输的格式;
3. 基于请求响应模型
# 请求数据格式 #
    1. 请求行 请求方式 请求url 请求协议/版本
    GET /login.html HTTP/1.1
    get 和post的区别
        1. get 参数在url中拼接(请求行),post 参数在请求体中
        2. get url的长度有限制,post url没有限制

    2. 请求头 host: localhost 键值对的形式(浏览器告诉服务器一些信息)
        1. 常见的请求头 
            1. host 主机名
            2. User-Agent 浏览器的版本信息(浏览器告诉服务器浏览器的版本信息)
            3. Accept: 可以解析什么格式
            4. Language:支持的语言
            5. Referer:告诉服务器(当前请求) 我从哪里来,作用:防盗链 统计工作
            6. Connection: keep-alive 连接可以复用 
    3. 请求空行
        就是用户分割post请求的请求头和请求体的
    4. 请求体(正文)(get没有请求体)(post传递参数)
        1. 封装post请求的参数的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值