post&get请求总结

开发动态资源:
静态资源:刷新界面,数据始终不会发生改变,如果要改变界面需要修改源代码
动态资源:刷新界面,数据可能发生改变,数据可来源于数据库
servlet:使用Java开发动态资源的技术
--WebContent  项目根路径
----html
------test.html   访问路径:http://localhost:6666/MyFirstWeb/html/Test.html
----index.html   访问路径:http://localhost:6666/MyFirstWeb/index.html
----META-INF
----WEB-INF (不能通过url直接访问WEB-INF中的资源,如果需要访问,需要在web.xml中进行配置)
------lib      存放关联架包
------web.xml  web项目核心配置文件
 
如何创建servlet:
 
 
 
 
 
 
方法一:
1.创建一个普通的类
2.继承HttpServlet(普通的类——》Servlet)
3.重写父类的doGet( )方法
4.在在web.xml中配置servlet
<!-- 配置servlet -->
  <servlet>
       <!-- 给FirstServelt设置一个名称 -->
      <servlet-name>firstServelt</servlet-name>
      <!-- 配置Servlet的完整类名(包名+类名) -->
      <!-- 此路径错误 /MyFirstWeb/src/com/igeekhome/igeekhome/FirstServlet.java -->
      <servlet-class>com.igeekhome.igeekhome.FirstServlet</servlet-class>
  </servlet>
 
  <!-- 设置servlet映射路径 -->
  <servlet-mapping>
      <!-- 声明给哪个servlet设置路径  一定要与上面的servlet配置的name一致-->
      <servlet-name>firstServelt</servlet-name>
      <!-- 设置路径 -->
      <url-pattern>/first</url-pattern>
  </servlet-mapping>
方法二:
  1. 直接右键新建Servlet
  2. 在web.xml中配置servlet(暂时先删除注解)
注意:servlet不能直接运行,需要交给tomcat运行
同上
 
 
HTTP协议:
超文本传输协议:浏览器客户端与服务端的数据传输规范
HTTP协议内容:
(1)HTTP请求:(浏览求客户端到服务端)
 
GET /MyFirstWeb/second HTTP/1.1      --请求行
Host: localhost:8086          -- 目的主机地址以及端口          --以下都是请求头
Connection: keep-alive        -- 此次请求过后连接的状态(close 关闭  keep-alive 保持连接)
Cache-Control: max-age=0      -- 缓存存活时间
Upgrade-Insecure-Requests: 1     -- 支持http请求
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36    --  浏览器类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8    -- 告诉服务器 浏览器所支持的数据类型
Accept-Encoding: gzip, deflate, br    ---告诉服务器 浏览器所支持的数据压缩格式
Accept-Language: zh-CN,zh;q=0.8    --- 告诉服务器 浏览器支持的语言
 
(1)请求行
(2)请求头
(3)请求体:GET请求的数据是拼接在url之后的   只有POST请求才有请求体
解析:
GET /MyFirstWeb/second HTTP/1.1      --请求行
请求方式     请求的URI     协议、协议的版本
A.请求方式:GET、POST、PUT、DELETE…
常用请求方式:GET、POST
 
 
GET请求 VS POST请求:
GET请求:
  1. GET请求的数据是拼接在URL后面的
 拼接格式: 请求路径?参数名=参数值&参数名=参数值
参数名就是表单的name
  1. GET请求的数据有大小限制(1kb左右)
  2. GET请求一般不适合提交敏感信息
  3. 使用浏览器请求的方式一般都是get请求
POST请求:
  1. POST请求数据放在请求体中      
           FormData:(请求体)     请求数据的name就是表单的name
  1. POST请求提交的数据没有大小限制
  2. 一般用于提交敏感信息以及文件上传
 
B.URI:统一资源标记符 (指定本地资源 也可以指定网络资源)
URL(统一资源定位符 定位网络资源) 是 URI的一个分支
C.HTTP 1.0 VS HTTP 1.1
HTTP 1.0 建立一次连接之后,只能发送一次请求就断开连接
HTTP 1.1 建立一次连接之后,可以发送多个请求(基本都是HTTP 1.1)
 
HttpServletRequest
获取请求数据
  1. 请求行
  1. 请求头
  2. 表单数据
 
(2)HTTP响应:
HTTP/1.1 200 OK                         ---  响应行
Cache-Control: private                 ---响应头
Connection: Keep-Alive
Content-Length: 93              服务端返回给客户端的数据的大小
Content-Type: baiduApp/json; v6.27.2.14; charset=UTF-8    服务端返回给客户端的数据类型、编码格式
Date: Wed, 13 Sep 2017 02:06:02 GMT                  服务端响应的事件
Expires: Wed, 13 Sep 2017 03:06:02 GMT               缓存过期事件
Server: suggestion.baidu.zbb.df                      服务器类型
 
 
  1. 响应行   
    A:HTTP协议版本 
     B:状态码:服务端处理请求的结果   
    200:正确处理并正常返回
    404:找不到资源
    状态的描述
2.     响应头      
  1. 实体内容:服务端具体返回的数据
             HttpServletResponse:更改服务端响应
           更改响应行(不建议更改)
        更改响应头
         更改实体内容
 
 
 
 
http:协议
localhost:访问的服务端的ip地址
8086:端口   -> Tomcat
20170913_respons: 项目名   ->在webapps目录中查找项目
test:  在20170913_respons查找资源
查找资源的步骤:【在服务器启动的时候,tomcat会加载webapps中所有项目的web.xml】
  1. 以test查找资源,先到项目的web.xml中查找是否存在匹配的url-partten
  2. 如果查找到,在当前servelt-mapping中找出相对应的servlet-name
  3. 以servlet-name再去查找是否有同名的配置的servlet
  4. 如果有同名的servlet ,取出当前sevelt的servlet-class(com.igeekhome.servlet.TestServlet【字符串】)
 
 
 
 
底层:
  1. 通过反射,由完整类名的字符串(com.igeekhome.servlet.TestServlet)创建对象
  2. 通过反射,调用servlet中的方法
实现过程:
  1. 通过配置文件获取到完整类名(com.igeekhome.servlet.TestServlet)
  2. 通过完整类名创建字节码对象
Class clazz = Class.forName(“com.igeekhome.servlet.TestServlet”);
  1. 通过反射创建Servlet对象(【1】构造方法)
Object obj = clazz.newInstance();
  1. 获取init方法
Method m = obj.getDeclareMethod(“init”,ServletConfig.class);
  1. 调用init方法   ---实例化servlet对象
m.invoke(obj,config);
6.  获取service方法
Method m = obj.getDeclareMethod
(“service”,HttpServletRequest.class,HttpServletResponse.class);
  1. 调用service方法
m.invoke(obj,request,response);
8.  获取destroy()方法
9.  执行destroy()方法
 
路径配置:
<servlet>
    <servlet-name>testServlet</servlet-name>
    <servlet-class>com.igeekhome.servlet.TestServlet</servlet-class>
  </servlet>
      <servlet-mapping>
      <servlet-name>testServlet</servlet-name>
      <url-pattern>/test</url-pattern>
  </servlet-mapping>
<url-pattern>/test</url-pattern>:配置匹配路径
 
精确匹配:
         /test     http://localhost:8086/20170913_response/test
         /igeekhome/test   http://localhost:8086/20170913_response/igeekhome/other
模糊匹配:
         /*       匹配任意路径
         *.action          匹配任意后缀
         *.do
注意:
1.精确匹配优先级最高
2.匹配路径只能以/ 或者*开头
3.模糊匹配不能同时使用多种匹配方式
Tomcat提供了一个缺省路径 (<url-pattern>/</url-pattern>)
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
       <!—初始化参数-- >
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <!—Servlet自启动 -- >
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
 </servlet-mapping>
剖析:
  1. index.html 先到web.xml进行匹配,查找有同名的url-partten
  2. 如果不存在同名的url-partten,会默认调用DefaultServlet,查找静态资源
  3. 根据index.html,查找静态资源,如果找到了,就返回给客户端进行显示,如果未找到,就返回404
总结:先找动态资源 再找静态资源
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/liyang6/p/10497106.html