Http协议&Servlet

Http协议

  1. 超文本传输协议(HTTP,HyperText Transfer Protocol),HTTP是一个客户端和服务器端请求和应答的标准(TCP)。
  2. 版本 1.0 => 请求数据,服务器返回后, 将会断开连接;1.1 => 请求数据,服务器返回后, 连接还会保持着。 除非服务器 | 客户端 关掉。 有一定的时间限制,如果都空着这个连接,那么后面会自己断掉。
  3. Http请求:包括 请求行 、 请求头 、请求体
  • 请求行:包括请求方式,请求地址,协议版本
    POST /examples/servlets/servlet/RequestParamExample HTTP/1.1
  • 请求头
Accept: 客户端向服务器端表示,我能支持什么类型的数据。 
Referer : 真正请求的地址路径,全路径
Accept-Language: 支持语言格式
User-Agent: 用户代理 向服务器表明,当前来访的客户端信息。 
Content-Type: 提交的数据类型。经过urlencoding编码的form表单的数据
Accept-Encoding: gzip, deflate : 压缩算法 。 
Host : 主机地址
Content-Length: 数据长度
Connection : Keep-Alive 保持连接
Cache-Control : 对缓存的操作
  • 请求体:浏览器发送给服务器的数据
  1. Http响应: 响应行 、 响应头 、响应体
  • 响应行:协议版本,状态码 ,对应状态码的消息
    HTTP/1.1 200 OK
  • 响应头
Server:  服务器是哪一种类型。  Tomcat
Content-Type : 服务器返回给客户端你的内容类型
Content-Length : 返回的数据长度
Date : 通讯的日期,响应的时间  
  • 响应体:服务器返回客户端请求的数据
  1. GET 请求和 POST 请求
  • GET:数据拼接在地址栏中,数据的长度有限(2k-8K),安全性低
  • POST:以流的方式写数据,数据在请求体中。有一个Content-Length的请求头表明数据的长度。数据长度更长,安全性更高
  • 使用:一般单纯从服务端获取数据或者携带普通数据使用GET,需要携带敏感数据或者文件使用POST

Servlet

  1. Web资源
  • 静态资源:html 、 js、 css
  • 动态资源:servlet/jsp
  1. servlet
  • servlet是什么:其实就是一个java程序,运行在我们的web服务器上,用于接收和响应客户端的http请求。 更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet。
  1. servlet的使用
  • 导包
  • 编写一个类实现Sevrlet接口
public class HelloServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println(1);
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

  • 或者继承HttpServlet
public class Servlet2 extends HttpServlet {
    /**
     * get 请求执行这里
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        System.out.println("doGet");
    }

    /**
     * post 请求执行这里
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
        System.out.println("doPost");
    }
}
  • 配置Servlet,在WEB-INF/web.xml写入


    
    
        HelloServlet
        com.servlet.HelloServlet
    

    
    
        HelloServlet
        /a
    

  • 在地址栏上输入 http://localhost:8080/a
  1. Servlet 的生命周期:从创建到销毁的一段时间
  • init方法 在创建该servlet的实例时,就执行该方法。一个servlet只会初始化一次, init方法只会执行一次,默认情况下是 : 初次访问该servlet,才会创建实例。
  • service方法:只要客户端来了一个请求,那么就执行这个方法了。该方法可以被执行很多次。 一次请求,对应一次service方法的调用
  • destroy方法:servlet销毁的时候,就会执行该方法
  • 注意:doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。
  1. 让Servlet创建实例的时机提前
  • 默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。
  • 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。
  • 在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。

      HelloServlet
      com.servlet.HelloServlet04
      2

  1. ServletConfig对象
  • Servlet的配置,通过这个对象,可以获取servlet在配置的时候一些信息
    //1. 得到servlet配置对象 专门用于在配置servlet的信息
    ServletConfig config = getServletConfig();
    
    //获取到的是配置servlet里面servlet-name 的文本内容
    String servletName = config.getServletName();
    System.out.println("servletName="+servletName);
    //2、。 可以获取具体的某一个参数。 
    String address = config.getInitParameter("address");
    System.out.println("address="+address);
    //3.获取所有的参数名称
    Enumeration names = config.getInitParameterNames();
    //遍历取出所有的参数名称
    while (names.hasMoreElements()) {
        String key = (String) names.nextElement();
        String value = config.getInitParameter(key);
        System.out.println("key==="+key + "   value="+value);
        
    }

你可能感兴趣的:(Http协议&Servlet)