【无标题】Springmvc发送和接收请求

 

DispatcherServlet ;是客户端所有请求处理的入口,负责请求转发。
RequestMapping ;负责存储请求url到后端handler对象之间的映射。
Handler; 用于处理DispatcherServlet对象转发过来的请求数据。
ViewResolver;负责处理所有Handler对象响应结果中的view。

当用户发送一个请求给服务端时,首先是DispatcherServlet接收到请求,然后交给RequestMapping进行映射找到对应的Handler,RequestMapping是个Map的存在key是url,value则是对应的Handler,Handler处理完请求后在交给DispatcherServlet,DispatcherServlet在交给ViewResolver响应到页面上,再次返回给DispatcherServlet然后进行响应

进行代码入门

添加依赖Spring Web Thymeleaf  springmvc会内嵌一个tomcat

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在static目录创建一个html网页可以直接访问

而在templates目录中创建的网页则需要需要基于后端控制器进行访问步骤如下

/*@Controller描述的对象为spring框架的bean,
* 这个通常作为spring web模块的一个请求处理器对象*/
@Controller//此注解用于告诉springweb模块这个对象是个控制层响应处理器
public class TemplaController {//在springmvc中称之为Handler

    //在项目启动的时候会把这个@Controller类和这个url对应的方法存进行一个映射存储到一个集合当中
    //底层一般使用的是map存储

    //借助@RequestMapping定义请求url到方法映射
    @RequestMapping("/doTempla")
    public String doTemplateUI(Model mOdel){//此方法由DispatcherServlet
        mOdel.addAttribute("name", "Default");
        return "default";//这个名字为view的名字
        //此返回值交给DispatecherServlet
        //这个view的名字交给ViewResolver(ThymeleafViewResolver)
        //这个解析的作用就是添加前缀和后缀
        //对html页面中的元素进行解析(对特点属性进行处理)
    }

然后再templates目录中创建一个网页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> The DeFalt [[${name}]] lalalallalal</h1>

</body>
</html>

如果不是在默认的地址则可能报错500

server.port=8081
spring.thymeleaf.cache=false
#spring templeaf
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html

#spring.thymeleaf.prefix这是配置的前缀
#spring.thymeleaf.suffix这配置的后缀  

MVC对象的划分1view (负责呈现数据)2Controller(负责请求响应调度调度中心) 3Model(处理各种逻辑)

MVC设计思想 spring web就是实现这种思想

1通过DispatcherServlet处理请求调度

2通过Handler处理请求响应数据

3通过ViewResolver对View(html)进行解析

相比传统的springmvc做了很多简化

1内嵌web服务器(默认为tomcat)

2默认将DispatcherServlet,ViewResolver等对象配置进行了默认实现

3无需打成war包,可以直接运行jar包工程

项目结构static和templates

static目录中的页面可以直接访问,但是不能直接从model中获取数据

templates目录中的html不能直接访问但是可以通过controller访问并且可以添加额外thymeleaf表达式

thymeleaf是模板引擎,可以将html作为模板,可以对html元素进行功能扩展,通过表达式从model取数据,通过属性实现循环操作

ModelAndView对象则是将view和model对象封装在一起的对象代码如下
    @RequestMapping("/haha")
    public ModelAndView dogo(ModelAndView model){
        model.addObject("age", 321);
        model.addObject("nn",123);
        model.setViewName("vie");
        return  model;
    }

页面html模板代码如下需要和key名字对应

<h1> The DeFalt [[${age}]] </h1>
<h1> The DeFalt [[${nn}]] </h1>

Json数据对象:Json就是一种数据格式,有些程序不需要返回ModelAndView只需要数据,Json可以满足各种设备的适配代码如下

1首先定义一个pojo来封装数据

package com.cy.pj.module.pojo;

public class ResponseResult {
    /*状态码*/
    private Integer code;
    /*响应信息*/
    private String message;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

 2定义一个url来请求

package com.cy.pj.health.controller;

import com.cy.pj.module.pojo.ResponseResult;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class JesonController {


    @RequestMapping("/lala")
    @ResponseBody//不再将响应结果理解为view,并将响应结果转为为json格式响应到客户端
    public ResponseResult doConverResponToJson(){
            ResponseResult result = new ResponseResult();
            result.setCode(200);
            result.setMessage("ok");
            return  result;
    }

}

需要注意的是需要添加@ResponseBody这个注解,将响应结果转为json格式,前提需要满足能转换,在springboot工程中 web模块里面会去调用jackson api,将返回值转为为json格式,但是在传统项目中则没有自动添加ackson api需要手动添加,即开箱即用

转换原理则是基于pojo对象的get方法进行字符串的拼接,pojo中的get方法中,get单词后面的名字作为key(首字母小写),value作为get方法的返回值 

结果如下

{
code: 200,
message: "ok"
}

SpingMVC 请求参数数据处理

第一种情况

将请求参数直接赋值给方法参数中的直接量变量(8大基本封装类+String+Date)
    /*直接量的方式就收参数 方法中参数名需要请求参数名相同  http://localhost:8081/dogo?name=12*/
    @RequestMapping("/dogo")
    public String doHandelParam(String name){
        return  "Requet params is" + name;
    }

请求http://localhost:8081/dogo?name=12*/

特别提示@RequestParam(required=false/true)可以规定参数是否必须传值描述方法参数

不然就会报错

第二种情况rest风格一种软件加个编码风格,这种风格中定义了url的一种格式,其语法 

在{}中的则为变量

/**
 * /a/b/{c}/s/{e}
 * a/b/100/s/200
 *
 */
  */
    @RequestMapping("/doHanReq/{id}")
     public String ddoHandelParam(@PathVariable Integer id){
        return  "request params name="+id;
    }

}

如果url中的参数名和方法的参数名不同则需要在@PathVariable注解中与url的参数名相同

如果是对象传参的话则是

package com.cy.pj.module.pojo;

public class RequqsetParamerter {
    private String namee;

    @Override
    public String toString() {
        return "RequqsetParamerter{" +
                "name='" + namee + '\'' +
                '}';
    }

    public String getNamee() {
        return namee;
    }

    public void setNamee(String namee) {
        this.namee = namee;
    }
}

接收参数

   @RequestMapping("/doHanReqq")
    public String ddoHandelParamm(RequqsetParamerter pojo){
        return  "request params"+pojo.toString();
    }
}

pojo对象中的set方法需要与请求参数的参数名匹配 

访问控制层的方法时spring会默认创建实体对象进行调用set方法进行赋值 

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值