zoukankan      html  css  js  c++  java
  • 第71节:Java中HTTP和Servlet

    标题图

    第71节:Java中HTTP和Servlet

    前言

    哭着也要看完!!!字数:

    字数

    学习xmlTomCat

    会写xml,看懂xml
    
    解析对象
    SAXReader reader = new SAXReader();
    
    解析文件
    Document document = reader.read(...);
    
    获取根元素
    Element rootElement = document.getRootElement();
    
    Element element = rootElement.element("stu").element("name");
    String namerootElement.element("stu").element("name").getText();
    
    List<Element> list = rootElement.elements("stu");
    for(int i= 0 ; i<list.size ; i++){
     Element element = list.get(i);
     element.getText();
    }
    
    rootElement.selectNodes("//stu");
    rootElement.selectSingleNode("//stu");
    

    协议HTTP

    HTTP协议和Servlet

    什么是协议,就是规则,规范,用于双方在交互,通讯的时候遵循的一种规范,规则.而http协议是对网络上的客户端和服务端在执行http请求的时候遵循的一种规范,其实就是规定了客户端在访问服务器端的时候,要带上一些东西,服务端返回数据的时候,也要带点东西,礼尚往来嘛!!!

    http协议的版本有: “1.0” 和 "1.1"等.

    "1.0"在请求数据,服务器返回后,就会断开连接.而"1.1"版本在请求数据,服务器返回后,还会保留连接,除了服务器关掉(一定时间会自动关掉).

    安装抓包工具.

    下载HttpWatch

    下载成功

    http://localhost:8080/examples/servlets/
    

    效果

    效果

    效果

    效果

    HW3001功能请求返回HTTP状态代码失败或导致内部浏览器错误。失败的请求可能会阻止网页正常运行并导致性能问题1发生

    请求行

    请求的数据包含三种:
    请求头,请求行,请求体.

    请求行 请求地址路径

    POST
    GET
    
    Accept: 
    客户端向服务器表示,我能支持什么类型的数据
    Referer:
    真正请求的地址路径,全路径
    Accept-Language:
    支持语言格式
    User-Agent:
    用户代理 向服务器表明 当前来访的客户端信息
    Content-Type:
    提交的数据类型,经过urlencoding编码的form表单的数据
    Accept-Encoding:
    压缩算法
    Host:
    主机地址
    Content-Length:
    数据长度
    Connection:
    保存连接
    Cache-Control:
    对缓存的操作
    

    浏览器发送的数据

    key = value
    

    htttp响应

    数据分析: 响应行, 响应头, 响应体

    状态码:

    200: 成功
    404: 找不到资源
    403: 拒绝
    500: 服务器异常
    

    响应头:

    Server: 服务器类型
    Content-Type: 服务器返回客户端的内容类型
    Content-Length: 返回数据长度
    Date: 响应时间
    

    GETPOST的区别

    请求路径不同,post请求不带数据,Get带数据.
    带上的数据不同,post会使用流方式写数据,GET请求在地址上带数据.
    post使用流写数据,所以要Content-Length说明长度.

    post
    数据是一流的方式写的,不会显示在地址上
    以流的方式写数据,所以没有大小限制
    
    get
    会再地址上拼接数据
    数据有限制
    

    有两种分类:
    静态:
    html,js,css
    动态:
    servlet/jsp

    servlet

    servlet是什么?
    其实就是一个java程序,用于接收和响应.

    创建web工程

    服务器创建成功

    配置

    效果

    测试

    效果

    效果

    效果

    效果

    servlet

    javax.servlet
    接口
    interface servlet

    all known implementing Classes:
    
    public interface Servlet 
    Implemented by: FacesServlet,GenencServlet,JspPage
    

    效果

    servlet是用来接收和响应客户端的请求.

    效果

    效果

    servlet是运行在web服务器中的小型java程序,servlet通常通过http超文本传输协议接收和响应来自web客户端的请求.

    效果

    ctrl+t

    Servlet -> 
    GenericServlet
    HelloServlet
    ConetProcessor
    JspPage
    
    Provides an abstract  class to be subclassed to create
    an htttp servlet suitable for a web site, a subclass of
    <code> httpservlet </code> must override at least
    
    // servlet
    servlet
    genericservlet
    httpservlet
    

    效果

    效果

    // 源码
        protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    
            String method = req.getMethod();
    
            if (method.equals(METHOD_GET)) {
                long lastModified = getLastModified(req);
                if (lastModified == -1) {
                    // servlet doesn't support if-modified-since, no reason
                    // to go through further expensive logic
                    doGet(req, resp);
                } else {
                    long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                    if (ifModifiedSince < (lastModified / 1000 * 1000)) {
                        // If the servlet mod time is later, call doGet()
                        // Round down to the nearest second for a proper compare
                        // A ifModifiedSince of -1 will always be less
                        maybeSetLastModified(resp, lastModified);
                        doGet(req, resp);
                    } else {
                        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);