• Spring MVC


    SpringMVC

    SpringMVC 是一个基于 MVC 模式的表现层框架

    特点:

    1、基于的是 servlet 模式

    2、控制器不再需要继承其他类,只需要用 @Controller 注解

    3、应用控制器方法参数,由前端控制器负责封装,方法前面定义灵活

    4、返回页面直接在方法中指定,可以是String,也可以是其他的,比如:ModelAndView 或 void 等

    5、性能也很优秀

    在spingMVC中存在两种控制器:前端控制器和应用控制器

    前端控制器(DispatcherServlet)本身就是Servlet,负责接收客户端请求,根据请求路径访问应用控制器。负责将页面参数填充javabean,负责转发页面,对标签类进行调用。

    应用控制器(用户书写的Controller),负责产生业务组件,调用业务组件的方法完成业务,根据结果返回转发的页面对象。

    SpringMVC 的工作流程:

    1、当客户端请求服务器,服务器使用前端控制器DispatcherServlet 接受请求。

    2、DispatherServlet 借助 HanderMapping,根据请求的URL 路径,定位到具体的Controller,和应用控制器的具体方法。并将封装好数据的实体对象传入应用控制器方法。

    3、由应用控制器方法,完成业务组件的业务方法的调用,然后根据业务方法处理的结果,返回需要转发的页面路径。DispatcherServlet 根据路径,完成页面转发。

    Spring Boot

    Spring Boot 其设计目的是用来简化新 spring 应用的初始搭建以及开发过程

    Spring Boot 框架使用了特点的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者

    Spring Boot 是由一系列启动器组成的,这些启动器构成一个强大的灵活的开发助手。开发人员根据项目需要,选择并组合响应的启动器,就可以快速搭建一个适合项目需要的基础运行框架

    注意:
    springboot 只是简化了项目开发---->让开发效率更快---->运行效率会降低(占用资源会更多)

    框架


    环境搭建:

    在父工程中导入:

    1.    org.springframework.boot
    2.    spring-boot-starter-parent
    3.    2.7.2
    4.    
    1.    org.springframework.boot
    2.    spring-boot-starter-web

    创建启动类:

    1. @SpringBootApplication //标识该类为springBoot启动类
    2. public class Main {
    3. public static void main(String[] args) {
    4. //启动tomcat容器,并完成初始化,扫描启动类所在包,及所在包的子包中的spring组件
    5. SpringApplication.run(Main.class);
    6. }
    7. }

    编写应用控制器:

    注意 应用控制器必须建在启动类所在包的子包中

    1. @RestController
    2. public class TestController {
    3.    @RequestMapping("/sp") //客户端以/sp为路径进行访问
    4.    public String speak(){
    5.        return "说话";
    6.   }
    7.    @RequestMapping("/ad")//客户端以/ad为路径进行访问
    8.    public String add(){
    9.        return "添加";
    10.   }
    11. }

    springBoot的配置文件

    SpringBoot 有很多的自动配置,在开发中,我们可能需要修改SpringBoot自动配置的默认值。比如,服务器启动端口,数据源等。

    SpringBoot的配置文件名称是固定的,application.yml 或 application.properties,需要在maven项目中的resource目录中创建。

    修改服务器启动端口:

    application.properties ---->  server.port=8088

    application.yml:

    server:
             port:8088


    springBoot 静态资源

    springBoot 静态资源存放目录,需要在classPath类路径下。如果是maven 工程,需要放在resource 目录下。META-INF/resources 、 resources 、 static 、 public 可以任选一个作为静态资源存放目录。

    META-INF/resources > resources > static > public


    在应用控制器中,得到表单数据

    html页面

    1. "/land" method="post">
    2.   用户名:"text" name="username" >
    3.   密码:"password" name="pwd" >
    4.    "submit" value="登录">

    应用控制器

    1. @RestController
    2. public class UserController {
    3.    //要求表单名和形参名一致。如果表单名和形参名不一致,需要加入@RequestParam(表单名)
    4.    //表示该表单名对应的表单值,赋值给当前形参
    5.    @RequestMapping("land")
    6.    public String login(@RequestParam("name")String username,
    7. String pwd){//要求表单名和形参名一致
    8.        if ("刘三".equals(username)&&"123".equals(pwd)){
    9.            return "登录成功";
    10.       }else {
    11.            return "登录失败";
    12.       }
    13.   }
    14. }

    如果应用控制器形参为实体 Bean,会按属性名和表单名一致的原则,进行属性值的填充

    1. @RequestMapping("land")
    2. public String login(UserBean user){}

    springMVC 中有默认的类型转换器,可以对大部分类型进行转换。不过,在开发中,有些时候需要根据业务自定义转换规则。默认情况下,springMVC 不支持 LocalDate 的转换。

    1. @Component
    2. public class LocalDateChange implements Converter {
    3.    @Override
    4.    public LocalDate convert(String s) {
    5.        if (s != null && s.matches("\\d{4}-\\d{2}-\\d{2}")){
    6.            return LocalDate.parse(s);
    7.       }
    8.        return null;
    9.   }
    10. }

    在开发中,同一个url 路径不能用于两个应用控制器的方法。但是在开发中,有些时候会有两个方法使用同一个url路径的情况,这时应该由命令空间防止url同名

    1. @RestController
    2. @RequestMapping("user")
    3. public class UserController {
    4.    @RequestMapping("land")
    5.    public String login(){}
    6. }

    此时,访问login方法的路径为 /user/land


    表单中的url 路径问题

    "user/land">

    action中,如果url路径没有以 / 开始,那么表示在当前目录下查找资源

    "/user/land">

    action中,如果url路径以 / 开始,表示在根目录下查找资源


    在应用控制器中,可以申明该方法只能以某种请求方式进行访问

    1. @RequestMapping(value = "add",method = RequestMethod.POST)
    2. public String add(UserBean user){}

    method = RequestMethod.POST 表示该方法只能以 post 方式访问。否则会抛出405异常。

    也可以直接使用 @PostMapping、@GetMapping... 代替 @RequestMapping,指定请求方式。


    从url路径中,得到请求数据

    html:

    <a href="/user/del/5">删除a>

    服务器:

    1.    @RequestMapping("del/{userId}")
    2. //表示形如/user/del/XX 路径的请求,由该方法处理
    3.    public String del(@PathVariable("userId")int id){}

    @PathVariable("userId")int id 表示URL 路径中userId表示的内容,赋值给形参


    请求参数的默认值

    1.    @RequestMapping("/update")
    2.    public String update(@RequestParam(value = "id",
    3. defaultValue = "0") int id){}
    4. //表示如果表单名为id的表单值为null,则赋默认值0,赋给形参id。
    5. //如果不为null,则将表单id的值赋给形参id

    在应用控制器中访问web容器中的请求/响应对象

    在应用控制器中,有些应用可能需要访问容器中的请求响应对象,直接在应用控制器方法中,申明形参即可。

    1. @RequestMapping("/update")
    2. public String update(@RequestParam(value = "id",defaultValue = "0") int id,
    3.                     HttpServletRequest request, HttpServletResponse response){
    4.    return "修改"+id;
    5. }

    1. @RequestMapping("show")
    2. public List showLink(){
    3.    List list = new ArrayList<>();
    4.    list.add(new LinkBean("王五", LocalDate.parse("1998-02-02"),"13188880302"));
    5.    list.add(new LinkBean("摘录", LocalDate.parse("1998-05-02"),"13188666302"));
    6.    list.add(new LinkBean("大宝", LocalDate.parse("1998-06-02"),"13999880302"));
    7.    return list;
    8. }

    如果方法返回的是集合,或实体类对象,会将集合、实体类对象,以json字符串的方式发送给客户端。


    @Controller 和 @RestController的区别

    @Concroller 对方法返回的字符串,默认进行页面跳转。@RestController 对方法返回的字符串原样输出到客户端。

    @RestController 对方法返回的是java对象,则默认将java对象转化成json字符串,然后再输出到客户端。相当于@Controller 和@ResponseBody的结合体。


    在控制器中加入@Controller后,跳转页面的方式有两种:请求转发和重定向

    Return “/show.html” 请求转发到指定页面 Return “redirect:/show.html” 重定向到指定页面

    重定向的工作流程: 客户端访问服务器,服务器在产生响应时,产生 302 状态码,同时产生 location 响应头,存放第二次请求的路径。客户端在接受到响应信息后,发现是 302 状态码,就会读取location响应头的内容,然后再向服务器发出第二次请求。

    请求转发:服务器在接收到客户端请求后,在服务器内部进行资源调配,客户端可以只发一次请求。

    重定向和请求转发的区别
    1、重定向客户端需要发出两次请求,所有,无法共享 request 中绑定的数据。而请求转发中客户端只发出一次请求,可以共享 request 中绑定的数据。
    2、请求转发,浏览器地址栏不会发生变化,重定向会在第二次请求时,将路径设置为真实路径。 3、请求转发,只能转发本服务器内部的资源,而重定向可以在第二次请求时,访问别的服务器。

  • 相关阅读:
    备份服务器数据的重要
    yarn设置应用优先级
    liunx 运行jmeter脚本jmx
    LeetCode刷题---有效的括号
    基于android的心理自测咨询APP-计算机毕业设计
    数据分析:数据预处理流程及方法
    使用cv2将图片改为素描图
    JavaWeb~利用会话管理(基于Session+Cookie)来模拟实现用户登录以及敏感资源的访问
    (大数据应用考察)全国水资源分析可视化
    花菁染料 Cy3.5 酸,Cy3.5 acid,Cyanine3.5 carboxylic acid物化光谱特性及结构式解析
  • 原文地址:https://blog.csdn.net/weixin_66564094/article/details/126575009