spring mvc基础详解

目录

spring mvc的简单使用

配置前端控制器

初始化配置文件路径

扫描注解

配置action注解

返回值

第1种,就是返回ModelAndView

第2种,返回String

2种方式跳转

第3种使用void

spring mvc架构说明

自我理解

3大组件

配置3大组件

如何找到3大组件

本地语言校验

输入法校验

映射处理器handlerMapping

适配器

视图解析器

配置最新的组件

在springmvc配置文件里配置

注解驱动直接配置最新3大组件

视图解析器的功能配置

修改前缀,后缀

参数绑定

原始获取参数的形式

简单参数绑定

参数名不同

绑射对象类型

传递参数的乱码问题

绑定包装类对象类型(QueryVo)

处理日期参数

类型转换器

注解方式

属性编辑器方式

数组类型参数绑定

包装类来接收数组

List类型参数绑定

异常处理器

编写处理异常类

在springmvc里注册异常处理器

自定义异常

springmvc和struts2的区别

spring mvc上传图片

配置tomcat文件路径

在方法上加上MultipartFile就能接受到字节流

保存图片

json数据交互(注解方式)

在public后面的requestBody是用于返回json数据

随意请求链接

拦截器

在spring mvc里配置

写一个自定义的类

解决登录问题

spring mvc注解开发

requesMapping 用于映射url链接

在类的上面注解上前缀

requesParam

pathVariable

responseBody 

requestBody 

cookievalue

modelAttriabute

modelAttriabute例子

sessionAttributes

清除sessionAttributes


前言

struts2的基础详解  https://blog.csdn.net/yzj17025693/article/details/88624294

spring mvc的简单使用

配置前端控制器

/*   拦截所有的jsp,js,css,图片

*.action  拦截以action结尾的请求

/  拦截所有但不包括jsp,也就是说jsp不能直接跳转jsp,对静态资源也会放行

初始化配置文件路径

扫描注解

spring mvc的约束文件和spring的是一样的

配置action注解

如果知道struts2的就知道,如果页面发送了itemlist.action请求

就会访问此方法,setViewName就是指定跳转到什么页面(默认是使用转发)


返回值

第1种,就是返回ModelAndView

第2种,返回String

可以由model来带数据,虽然第一种方便,但是不利于解耦,因为数据和视图是一起的,第二种和以前Struts2的差不多,数据和视图是分开的

这里直接返回itemList,其实是一个页面跳转,只不过省去了前缀和后缀(具体看下面)

model存的数据是request域的数据

2种方式跳转

一个是重定向,一个是转发

第3种使用void

是为了迎合ajax请求

spring mvc架构说明

自我理解

1 用户发送的请求被我们在web.xml配置的前端控制器拦截

2 前端控制器收到请求后,调用HandlerMapping用来处理 映射器

3 而映射器的作用就是根据请求的url找到具体的处理器,处理器就是处理对应功能的,有很多的功能,所以有一个处理链

然后发送回前端控制器

4 由前端控制器请求处理器的适配器

5 处理器的适配器如果感觉可以执行这个功能,那么就交给处理器执行

6 处理器执行完后返回数据给处理器适配器

7 适配器感觉这个处理没问题,又把处理结果返回给前端控制器

8 前端控制器不做事情的,就是一个中转的,他继续把处理结果给视图解析器

9 视图解析器把东西封装成view对象发送回前端控制器

10 前端控制器把东西交给页面渲染

3大组件

黄色的是3大组件,没有颜色的是核心组件,绿色的是我们要写的

3大主键还有一个视图解析器

配置3大组件

如何找到3大组件

本地语言校验

输入法校验

比如一些全角半角什么的

映射处理器handlerMapping

第1个是配置式开发,也就是使用xml方式开发的时候,默认走这个映射器

第2个是注解式开发,如果我们写的处理器上面有注解,那默认走的就是第2个映射器

适配器

默认是第3个,使用注解开发的时候的适配器,

视图解析器

默认的jsp视图解析器

配置最新的组件

上面默认的映射处理器已经过期了,所以我们要配置最新的

在springmvc配置文件里配置

默认的适配器也过期了,也需要配置

注解驱动直接配置最新3大组件

可以使用注解驱动来替代上面的配置,只需要写上一句即可

视图解析器的功能配置

修改前缀,后缀

是每次跳转页面,都要写xxx/jsp/这些前缀,哪天改了目录结构就完完了

在视图解析器里先配置好前缀和后缀

参数绑定

假如我们发送的请求带有参数,那么就需要处理参数

原始获取参数的形式

直接写上request和response还有session

使用addObject可以把对象传递到页面去,然后用el表达式取出来,这个后面会讲

简单参数绑定

直接在参数上写上id即可(最好是用封装类Integer)

传入过来的参数名称和我们的形参的名称要对应

参数名不同

传入过来的参数名称和我们的形参的名称如果非要不同,也可以使用注解方式来解决

但是传过来的值不能为空,不然报错,但是可以加上required=false解决

还可以设置,如果传过来的值为空,则默认值为1

绑射对象类型

这里我们直接写Items类型,所以我们提交过来的name要和Items里面的字段名称一样

传递参数的乱码问题

下面的param-name的encoding,是CharacterEncodingFilter类里的成员变量

    <!--解决控制器乱码问题-->
    <filter>
        <filter-name>encoding</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

绑定包装类对象类型(QueryVo)

对应的页面参数肯定也需要改

处理日期参数

类型转换器

上传上来的日期不能直接封装到对象中

需要调整适配器从而能直接把数据封装到对对象中

注解驱动里加上转换器服务

然后自定义转化器

转化器需要使用Converter接口

注解方式

属性编辑器方式

属性编辑器方式转换类型这里不做介绍,可以直接百度

数组类型参数绑定

包装类来接收数组

使用包装类来接收数组,jsp页面不需要修改,也可以接收到,因为是不在乎包装类的

在意的是包装类里的属性,我们包装类里面有Integer[] ids

List类型参数绑定

在包装类里写上list集合,不能在形参上写List集合,springmvc不认识,数组是原生态的,以及pojo都认识

但是List<xxx>不认识

在jsp页面修改,使用EL表达式代替索引

异常处理器

编写处理异常类

这个类需要实现异常处理器接口HandlerExceptionResolver

setViewName是设置一个返回值,会跳转到对应的jsp页面,这里会跳转到error.jsp里,因为我们设置了前缀和后缀,所以这里直接写error

但是我们必须有一个error.jsp的页面在对应的目录下

使用EL表达式直接取出来即可

在springmvc里注册异常处理器

自定义异常

先写一个异常类基础Exception

抛一个异常测试

在异常处理器里补充

注意e instanceof MessageException, 因为MessageException继承了Exception

https://www.cnblogs.com/zjxynq/p/5882756.html

https://www.cnblogs.com/greatfish/p/6096038.html

所以相当于所有的异常都能通过if,因为自身类初创建的对象 instanceof 自身类也是true

springmvc和struts2的区别

spring mvc上传图片

之前实现过struts2上传文件,而struts2其实只负责接收文件的路径

配置tomcat文件路径

之所以在这里配置,是因为不能在项目里放,因为项目无时无刻会重新部署,之前的图片就没了

这样开启tomcat,直接访问浏览器,加上/pic/能访问本地的图片

在方法上加上MultipartFile就能接受到字节流

这是一个接口,且需要配置一个实现类

在springmvc里创建,这个id不能变,是固定的,因为上面的接口是要用的

保存图片

UUID生成的格式是xxx-xxx-xxx-xxx,所以我们把它转换一下

后面可能还需要分多级目录

transferTo是保存文件的意思

json数据交互(注解方式)

使用post和ajax是一样的,但是使用ajax发送json数据需要声明一下json

在public后面的requestBody是用于返回json数据

而形参上面的requestBody是用于接收json数据自动封装到对象里

spring mvc不需要我们自己转json然后传给客户端,只需要把返回值改成对象(对象里有对应的字段),然后加上

requestBody,这样返回回去的便是json数据

随意请求链接

RestFul风格开发

老外使用post就是添加,put是修改

假如我们请求路径是这个奇形怪样的,使用商品的id.action,直接把id作为action的名称

只需要从路径里获取对应的变量id即可

然后在参数前面加上PathVariable注解

拦截器

拦截器可以有多个

在spring mvc里配置

path= /** 是代表拦截所有的请求,写**是因为可能有多级目录

写一个自定义的类

方法前有一个开关,就是return 如果返回false,那就是不放行,下面的方法不会执行

如果我们真的写了2个拦截器,那么拦截流程如下

解决登录问题

如果不包含login,那就判断是否登录了,如果没有,那就跳转到登录页面,也不放行

如果包含login那肯定要放行

spring mvc注解开发

上面介绍了

requesMapping 用于映射url链接

还可以在需要映射的url写上写表达式,达到随意请求链接的要求

指定接收的方式

RequestMethod.post,那么就不支持get方法,不推荐设置,如果非要设置,就把get和post一起包含进来

在类的上面注解上前缀

可以在类的上面写上前缀,用于分类,比如这是用户操作,另一个类是订单操作

value是一个数组,可以写多个

requesParam

可以指定传递过来的参数是什么名字,用于页面参数名和形参不匹配的情况

pathVariable

用于获取路径上的的变量

responseBody 

把要输出的内容转换成json

requestBody 

 把接受的参数转换成json

cookievalue

获取cookie的值,传入key即可

modelAttriabute

一旦修饰在方法上,执行了请求后就会先执行这个方法

按照上面的应用场景,那就是数据在封装前,我们在这个方法里先封装好指定的数据

modelAttriabute例子

表单里并没有日期数据

当我们把user返回会就会执行我们指定的testModelAttribute方法

还可以先把数据放到map中

sessionAttributes

把一个数据存到reques域中,但是如果我们想把这个数据同时存在session中

可以在类上面加上sessionAttribute注解

取的时候用modelMap,model只能存数据

清除sessionAttributes

猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/89287308
今日推荐