Java-SpringMVC
Spring-MVC
1.SpringMVC快速入门
采用MVC三层架构创建spring,因为web包下的servlet大都具有共有行为,即:接收数据,调用service对象,因此可以将共有行为提取出来,交由spring组件帮忙创建(前端控制器),而开发者只需要编写相关controller来实现一些特有行为。
执行流程:
需求:客户端发起请求,服务器接收请求,执行逻辑并进行视图跳转。
开发步骤:
导入SpringMVC相关坐标
配置SpringMVC核心控制器DispatherServlet
创建Controller类和视图页面
创建注解配置Controller类中业务方法的映射地址
配置SpringMVC核心文件spirng-mvc.xml
客户端发起请求测试
导入坐标:
1 | 首先,导入SpringMVC坐标: |
配置SpringMVC的前端控制器:
1 | <servlet> |
在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置
因此,我们使用注解@RequestMapping来映射,
注意:
@RequestMapping可放在方法上,也可放在类上方,如果同时存在,表示拼接的路径,即:上方路径/下方路径。
2.Spring组件解析:
在此过程中,其实是有多个spring容器内部的组件分工完成的。
如下:
过程描述:
1.DispatcherServlet为前端控制器,接收客户端的请求后调用处理器映射器HandlerMapping来获取访问页面的地址(为一个路径链,可能包含过滤器到servlet的一连串路径)。
2.前端控制器接收执行链后,调用处理器适配器HandlerAdaptor去调用资源,执行该路径对应的处理器(Controller),然后返回一个视图对象。
3.前端接收器接视图对象后调用视图解析器ViewResolver,去解析view对象,返回视图页面。
在这其中,spring已经实现了各组件的方法,我们接下来对ViewResolver进行增强。
首先回到上文,我们在controller中使用
1 | return"success.jsp" |
直接返回了一个视图对象,但其实他的默认值为
1 | return"forword:success.jsp" |
也就是转发,这种情况下访问路径是不变的,如果更改为
1 | return"redirect:success.jsp" |
表示重定向,会改变访问路径。
其次,我们也可以更改路径名称,可以更改默认的前缀和后缀,如下:
小结:
4.SpringMVC的请求
1.接收请求数据:
- 基本类型参数
- POJO类型参数
- 数组类型参数
- 集合类型参数
1.基本数据类型:Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配
2.POJO类型参数:Controller中的业务方法的POJO参数的属性名(成员变量)与请求参数的name一致,业务方法参数是POJO类型,参数会自动映射匹配
3.数组类型参数:业务方法是数组,数组名与请求参数一致,可以结合ajax实现
4.集合类型参数:当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据。
1 | //增加驱动,表示spring找不到servlet的时候交由tomcat完成。 |
请求乱码问题:
当post请求时,数据会出现乱码,可以设置一个过滤器来解决乱码。
参数绑定注解@Request:
获得Restful风格的参数:
2.获得请求头:
1.@RequestHeader
使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)
属性:
- value:请求头名称:与浏览器的请求头名称一致
- required:是否必须携带请求头,若设为true,则不带请求头时会报错
1 | 用法: |
2.CookieValue
同上,用来专门获取cookie的请求值。
3.文件上传
1.文件上传三要素
- 表单项type = “file”
- 表单的提交方式为post
- 表单的enctype属性时多部份表单形式,即enctyoe = “multipart/form-data”
配置xml:
1 | commons-io 和commons-fileupload |
2.文件上传原理
3、单文件上传实现:
使用uploadFile.transferTo将文件转移到服务器某处,或磁盘上。