zoukankan      html  css  js  c++  java
  • servlet和http请求

    1.servlet
    servlet是和平台无关的服务器组件,可以交互式的来浏览和修改数据,生成动态的web内容。它运行于
    servlet容器中
    2.servlet容器
    servlet容器负责servlet和客户的通信和调用servlet方法。
    servlet和客户通信采用“请求/相应”模式。
    3.创建servlet,及其工作原理
    (1)创建一个HelloServlet.java类,实现Servlet接口,实现接口方法

    init()
    service();
    getServletConfig();
    getServletInfo();
    destory();

    (2)在/WEB-INF/web.xml里面配置HelloServlet
    做两件事
    a.注册:把servlet名字和对应的class注册到servlet容器中。

    <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.servlet.HelloServlet</servlet-class>
    </servlet>


    b.定义url:即页面可以通过什么样的url可以访问到servlet,/是根目录

    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet1</url-pattern>
    </servlet-mapping>

    c.当通过浏览器访问url: http://127.0.0.1/8080/view-servlet/HelloServlet访问是

    容器首先把根目录截取出来:http://127.0.0.1/8080/view-servlet/
    获取servlet名字:HelloServlet
    根据servlet名字,找到servlet对应的类
    调用类中对应的doGet() doPost()方法

    3.servlet方法和生命周期,以下方法都是有servlet容器调用(servlet响应请求过程)

    (1)构造器:只调用一次,第一次请求到达时,初始化servlet(说明servlet是单实例,非线程安全)
    (2)init():只调用一次,创建完实例后,用于初始化servlet,传入ServletConfig 参数
    (3)service():多次调用,用于响应请求。
    (4)destory():只调用一次,所在web应用被卸载前调用。

    4.load-on-startup参数:

    <load-on-startup>param</load-on-startup>1)param为负数时,容器启动时,不加载servlet
    (2)param>=0时,值越大,启动越晚

    5.servlet映射细节

    (1)一个servlet可以有多个servlet-mapping与之匹配
    (2)通配有两种方式
    a. /* (带下划线)
    b. *.do *.action *.aa(不带下划线)
    /*.do不合法

    6.init方法中的 ServletConfig,封装了servlet信息

    (1)获取servlet的初始化参数<init-param>
    <init-param>
    <param-name>p1</param-name>
    <param-value>v1</param-value>
    </init-param>
    获取方法:arg0.getInitParameter("p1")
    (2)获取ServletContext

    7.ServletContext

    (1)可以由ServetConfig获取
    arg0.getServletContext()
    (2)可以认为代表当前WEB应用,可以获取当前web应用的各个反面的信息
    a. 获取全局初始化参数
    <context-param>
    <param-name>c1</param-name>
    <param-value>c2</param-value>
    </context-param>
    b.获取当前web应用某一个文件,在容器中的绝对路径。
    getRealPath("")

    c.获取当前web应用的名称
    getContextPath();
    d.获取输入流
    getResourceAsStream("/WEB-INF/class/jdbc.properties") web根目录


    8.Http简介
    (1)什么是http

    web浏览器与web服务器之间,一问一答的交互过程,必须遵循一定规则,这个规则就是http协议。
    http(超文本传输协议),是一个应用层协议,用于定义,web浏览器与web服务器之间的数据交换的过程,及交换
    过程中,数据的格式。

    (2)http会话方式分四步

    a.建立连接
    b.发送请求
    c.回应请求
    d.关闭连接    

    (3)http请求结构:

    一个请求行
    GET http://192.168.1.246:10085/manager/objcetstore/add_obj_user.json?obj_name=lvyafei&obj_password=123456&_=1451025520332 HTTP/1.1
    多个消息头:
    Host: 192.168.1.246:10085
    Proxy-Connection: keep-alive
    Accept: application/json, text/javascript, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Referer: http://192.168.1.246:10085/manager/views/service/index.html    
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: zh-CN,zh;q=0.8
    Cookie: X-LENOVO-SESS-ID=gfp0p4t3dbr3km3eemmrl95sp1; language=zh; JSESSIONID=aaaCFA_Q49wlj7MXN2xhv; lenovo_user_id=1; lenovo_user_name=admin; lenovo_user_pwd=fbc683e842c2c61496de800fed2d0de3
    空行
    实体内容
    obj_name:lv
    obj_password:123456
    _:1451025520332


    (4)http响应结构

    一个状态行
    HTTP/1.0 200 OK
    多个消息头
    Server: Tengine/2.0.3
    Date: Fri, 25 Dec 2015 07:10:34 GMT
    Content-Type: application/json;charset=UTF-8
    X-Cache: MISS from Gateway-02
    Via: 1.0 Gateway-02 (squid/3.1.9)
    一个空行
    
    实体内容
    <html><body>.....</body></html>

    (5)POST和GET请求的区别

    a. GET http://localhost:8080/HelloServlet1?txt=lvyf&passwd=123
    特点:把请求参数放在url的问号后面,传输数据一般在1K以下
    b. POST 在Request Headers下面有一栏FormData,请求参数在FormData里面
    特点:把请求参数放在FormData里面,以http消息的实体内容发送到服务器,传输数据量大

    9.在servlet里面获取请求信息

    (1)
    servlet的service(ServletRequest request, ServletResponse response)方法
    ServletRequest(接口)封装了请求信息
    ServletResponse(接口)封装了响应信息
    (2)获取参数:request.getParamter("username");

    10.HttpServlet

    HttpServlet是一个Servlet,针对Http请求定制
    在service方法中,把ServletRequest转为HttpServletRequest,然后就可获取请求的方法是post还是get
    ,根据请求方式创建doPost,doGet方法。

    11. get请求-->到达service--service里面获取HttpServlet对象-->HttpServletRequest对象获取请求方式-->调 对应的doXX()

    12.请求转发和重定向的区别?

    HttpServletResponse.sendRedirect方法
        RequestDispatcher.forward方法 
        (1)看名字就可以看出来RequestDispatcher的转发,只是向服务器内部转发,重定向是响应,不仅可向内部,也可向
        外部发送请求。
        (2)forward在转发者和被转发者之间共享HttpServlet对象资源,重定向,被重向的地址获取不到HttpServlet资源
  • 相关阅读:
    SpringMVC-11-文件上传和下载
    SpringMVC-10-拦截器Interceptor
    SpringMVC-09-Ajax技术
    SpringMVC-08-整合SSM之CRUD
    SpringMVC-08-SpringMVC层编写
    SpringMVC-08-整合SSM之Spring层编写
    SpringMVC-08-Mybatis层编写
    SpringMVC-08-整合SSM之基本环境搭建
    SpringMVC-07-JSON讲解
    SpringMVC-06-数据处理
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/http.html
Copyright © 2011-2022 走看看