SpringMVC全面学习

SpringMVC全面学习

img

1.SpringMVC初步认识

1.1介绍

Spring MVC是Spring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能

Java Web开发者必须要掌握的技术框架

1.2MVC是什么

MVC是一种软件架构思想,把软件按照模型,视图,控制器来划分
Model:模型层,指工程中的JavaBean,用来处理数据

JavaBean分成两类:

  • 一类称为实体类Bean:专门用来存储业务数据,比如Student,User
  • 一类称为业务处理Bean:指Servlet或Dao对象,专门用来处理业务逻辑和数据访问
  • View:视图层,指工程中的html,jsp等页面,作用是和用户进行交互,展示数据
  • Controler:控制层,指工程中的Servlet,作用是接收请求和响应浏览器

1.3工作流程

流程:

  • 客户端发送请求至前端控制器DispatcherServlet。
  • DispatcherServlet收到请求调用HandlerMapping处理器映射器根据请求的URL找到对应的处理器(Controller)。
  • Controller调用业务逻辑后,将ModelAndView对象(封装视图和模型信息)返回给DispatcherServlet
  • DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  • ViewReslover视图解析器解析后返回具体的View给DispatcherServlet
  • DispatcherServlet根据View和Model渲染视图响应给客户端

在这里插入图片描述

2.SpringMVC环境搭建

3.RequestMapping注解

Spring MVC通过@RequestMapping注解把URL请求和业务方法进行映射,在控制器的类定义处以及方法定义处都可以添加@RequestMapping,在类定义处添加相当于多了一层访问路径

value:指定URL请求的实际地址,是@RequestMapping的默认值

method:指定请求的method类型,包括GET、POST、PUT、DELETE等

params:指定request请求中必须包含的参数值,如果不包含的话,就无法调用该方法

4.参数绑定

4.1URL风格参数绑定

1.在业务方法定义时声明参数列表(在RequestMapping里添加param属性赋值)

img

2.给参数列表添加@RequestParam注解进行绑定(在方法参数前添加@RequestParam注解)

img

4.2RESTful风格的URL参数获取

  • 传统的URL:localhost:8080/hello/index?id=1&name=tom
  • RESTful URL:localhost:8080/hello/index/1/tom
    在这里插入图片描述

@PathVariable和@RequestParam的区别:

@PathVariable用于获取URL中的路径参数,通常用于RESTful风格的接口,例如,如果URL为/users/{id},那么可以使用@PathVariable注解来获取id的值。

@RequestParam注解用于从请求参数中获取参数值,可以获取URL中的查询参数或表单提交的参数。

img

4.3映射Cookie

img

4.4使用POJO绑定参数

Spring MVC会根据请求参数名和POJO属性名进行匹配,自动为该对象填充属性值,并且支持属性级联

为了避免出现乱码问题,应该在web.xml中配置过滤器

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

主体对象可以没有无参构造器,但是级联对象必须要有无参构造器

级联就是一个实体类里面的一个属性为另一个实体类

img

4.5JSP页面的转发和重定向

Spring MVC默认是通过转发的形式响应JSP,可以手动进行修改

转发顾名思义就是通过了中间人,将信息转达给另一个人处理再返回结果。就拿客户端和服务器端来说,客户不知道这个信息转发了,只知道返回来的结果(不改变url)

在这里插入图片描述

重定向则是重新选择方向,就是重新给了一个地址去访问,处理一些请求(改变url)

在这里插入图片描述

五、Spring MVC数据绑定

数据绑定就是直接获取前端HTTP请求中的参数,HTTP请求参数都是String类型的,但是Spring MVC的HandlerAdapter组件会在执行Handler业务方法之前,完成参数的绑定

@Reponsebody注解

img

5.1基本数据类型

在这里插入图片描述

如果id为空会报500,如果id类型不符合会报400

5.2包装类

在这里插入图片描述

在请求中不传参不会报错,但是如果添加了@PathVariable(require=“true”),仍然没有传参数,则会报400,还有就是传参类型不同会报404

5.3POJO(java对象)

public class User {
    private Integer id;
    private String name;
    private Address address;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address=" + address +
                '}';
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


img

5.4List

Spring MVC不支持List类型的直接转换,需要包装成Object

在这里插入图片描述

注意:User类一定要有无参构造,否则抛出异常

5.5JSON

以ajax实现登录案例为例

ajax是一种异步数据传输技术,页面无需刷新的情况下,能够更新部分网页内容

AJAX是使用JavaScript技术来实现的

JSON是一种轻量级的数据交换格式,JSON有对象结构和数组结构两种数据结构

在这里插入图片描述

1.在WebContent下新建“statics/scripts”文件夹,加入JQuery框架脚本“jquery-3.6.0.min.js”

2.修改“login.jsp”页面,发送Ajax请求登录
页面中引入JQuery框架脚本,并为“提交”按钮增加“onclick”事件,在事件中发送Ajax请求

在这里插入图片描述

3.编写函数ajaxLogin

function ajaxLogin(){
var name=$("#username").val();//使用了 jQuery 的选择器 $("#username") 来选取页面中 id 为 "username" 的元素,然后使用 .val() 方法获取该元素的值,将其赋给变量 name
var pass=$("#password").val();
//发送ajax请求
$.ajax({
//定义请求地址
url:"${pageContext.request.contextPath}/doAjaxLogin",
//定义请求类型
type:"post",
//将js对象转换成JSON格式字符串发送给后台
data:JSON.stringify({username:name,password:pass}),
//定义发送请求的数据格式为JSON字符串
contentType:"application/json;charset=UTF-8",
//定义回调响应的数据格式为JSON字符串
dataType:"json",
success:function(data){//这个data是controller返回出来的result,也就是自定义的实体类MsgResult
alert(data.msg);
}
});
}

4.写controller

在这里插入图片描述

@RequestBody将前端传过来的json字符串转换为java对象

@ReponseBody将返回的java对象通过转换器转换为JSON字符串,放入response中响应给前端

自定义通用结果类

package entity;

public class MsgResult {
    private int flag;//1代表成功 0代表失败
    private String msg;//返回的消息
    private Object content;//返回的数据内容

    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "MsgResult{" +
                "flag=" + flag +
                ", msg='" + msg + '\'' +
                ", content=" + content +
                '}';
    }
}

5.需要修改“spring-mvc.xml”配置文件,解决找不到“jquery-3.4.1.min.js”(静态资源访问)的问题

有三种方式

这里就只说明毕竟好用的一种

在这里插入图片描述

还有两种解决方案的链接:https://blog.csdn.net/ssy052085156/article/details/101036963

拦截器

1.创建一个名为Interceptor的包

在这里插入图片描述

2.创建一个名为LoginInterceptor的类implements HandlerInterceptor的方法

3.在preHandle里写详细逻辑

在这里插入图片描述

4.在配置文件里配置拦截器

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值