Java:HTTP协议(2)

@Controller:修饰类,表示这个类可以作为动态资源的承载容器

      这个类下允许出现一些方法,这些方法最终表现成Web动态资源

   被这些注解中一个修饰的方法(并且存在于@Controller修饰的类中),会被作为一个动态资源存在,资源最终的URL路径,就是注解中标注的路径.

 @RequestMapping:这个动态资源支持所有的HTTP方法

 @GetMapping:这个动态资源只支持HTTP的GET方法

 @PostMapping:这个动态资源只支持HTTP的POST方法

@Controller
public class Web2 {
    @GetMapping("/demo")
    @ResponseBody
    public String name(@RequestParam("age") String age){

        System.out.println(age);
        return "<h1>成功</h1>";
    }
}

@ResponseBody: 这个注解修饰的方法,表示该方法完整的返回了整个响应体的内容,方法返回的String类型的值,会被当做HTTP的响应的响应体


 这个类从没被实例化过web2,方法也没有被调用过name.

其实是Ioc在做事情

1. run方法会扫描web1包下的所有类文件(*.class),找到被@Controller注解修饰的类

 2.利用Java的反射机制(运行期间操作类文件的能力),将刚才得到的类实例化.

 3. 扫描该类下的所有方法反射机制,找到所有被@RequestMapping修饰的方法

  读取资源路径,最终得到类似该结构的Map

  Map<String,方法>  key是资源路径 value是具体哪个方法

 4. 当请求来临时,Sping通过HTTP请求的标准格式,可以解析出本次请求的资源路径是什么,记为path,根据path去第三步map中找到对应的方法

 5.调用该方法


我们在浏览器中输入URL都是GET方法访问.

POST请求:不借助第三方工具只有两种方法1.form表单2.使用JS发起HTTP请求(ajax)

通过ajax发送请求 

//1.实例化一个XMLHttpReques对象,简称XHR对象
var xhr = new XMLHttpRequest()

//2.调用对象的open()方法,设置发起请求1.方法2.资源路径
xhr.open('post','/demo')

//3.设置回调函数,当/demo资源响应返回时,应该干什么
//通过事件绑定机制
xhr.onload = function(){

   console.log(xhr.status)
   console.log(xhr.responseText)
}

// 4. 真正发送请求出去
xhr.send()

执行顺序:1,3,4,2 


GET VS POST区别

  1.get是幂等的无副作用:每次查询的结果都一样,不会改变表中的数据

     post是不幂等的有副作用: 第一次执行成功,不代表以后会成功,并且会修改表中的数据

  2.幂等性 + 无副作用的HTTP请求是可以被缓存的,反之不允许

3.get把数据携带在URL中,post携带在请求体中

4.post比get安全,get放在URL中容易被看到

5. get是key-value形式,post比较灵活

 重定向: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值