个人博客网:https://wushaopei.github.io/ (你想要这里多有)
一、SpringMVC的概述
1、概述
Spring MVC框架是一个开源的Java平台,为开发强大的基于JavaWeb应用程序提供全面的基础架构支持,并且使用起来非常简单容易。
Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构,用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式使应用程序的不同组件(输入逻辑,业务逻辑和UI逻辑)合理有效的分离,同时又有效的将各组件组合一起完成功能。
- 模型(Model)封装了应用程序数据,通常它们将由POJO类组成。
- 视图(View)负责渲染模型数据,一般来说它负责生成客户端浏览器可以解释HTML输出。
- 控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。
2、SpringMVC的核心DispatcherServlet程序
二、SpringMVC 示例及配置
1、SpringMVC——Hello world示例的步骤
【1】创建一个动态web工程
【2】导入需要的jar包
【3】SpringMVC的 Hello 程序目录结构:
【4】web.xml中的配置:
【5】HelloController代码:
【6】页面 jsp 内容:
index.jsp 内容:
target.jsp 内容:
【7】applicationContext.xml配置文件内容:
【8】业务逻辑流程分析:
2、SpringMVC的配置文件的另一种存放方式
三、视图解析器
视图解析器配置:
四、@RequestMapping注解详解
1、value属性
value属性是给方法配置一个请求地址
2、params属性
params是要求此请求的参数匹配
- params="username" 表示 请求地址必须带有username参数
- params="username=abc" 表示 请求参数中必须要有username,而且值还必须是abc
- params="username!=abc" 表示 1、请求参数中不能有username参数。2、有username参数,但值不能等于abc
- params="!username" 表示 请求地址不能带有username参数
- params= {"username!=abc","!password"} params可以有多个值,每个值之间是&&关系
以上条件表示要求:
( 请求地址中不能有username参数 || username参数值不能等于 abc && 不能有password参数 )
3、headers属性
是匹配请求头规则
4、method属性
GET:表示GET请求
POST:表示POST请求
PUT:表示PUT请求
DELETE:表示DELETE请求
- method 规定当前请求必须是什么请求才能访问此方法
- method=RequestMethod.GET 表示必须是GET请求
- method=RequestMethod.POST表示必须是POST请求
GET请求演示:
POST请求演示:
GET 请求和 POST 请求 的区别与调用方式
5、@RequestMapping标注在Controller类上
6、通配符在@RequestMapping中的使用
【绝对匹配】
创建path.jsp文件
由地址栏输入连接方法的地址,然后进入方法,直接进行执行跳转到 path 路径下!
该 path 路径 声明精确!
跳转到 path页面
【2】 ?问号 匹配资源路径
? 问号表示一个任意字符
【3】 * 星号 匹配资源路径
* 星号 可以匹配任意个字符
注:当一个路径同时匹配多个规则的时候,调用方法的优先顺序是:
绝对匹配--->>>>?问号匹配---->>>>*星号匹配
【4】 ? 匹配一个字符目录
【5】* 星号 匹配一层目录(多个字符)
【6】* * 星星号 匹配多层目录
五、Controller中如何接收请求参数
1、原生API参数类型
【1】HttpServletRequest类
从请求头获取请求参数:
打印结果:
【2】HttpSession类
获取当前请求会话
打印结果:
【3】HttpServletResponse类
2、普通类型入参
在请求的方法上,写上类型和参数名,那么 SpringMVC模型就会自动的将参数值注入到方法的参数中。
测试的地址是:
http://localhost:8080/springmvc_hello/param5?username=wzg186&password=123456
3、普通类型数组的参数
把请求的参数名做为方法的参数名用来接收请求参数值即可。数组也一样。
测试地址:
http://localhost:8080/springmvc_hello/param6?hobby=cpp&hobby=java&hobby=javaScript
4、普通类型使用@RequestParam入参
如果这个时候,我希望客户端哪怕没有传递user的参数的时候。也可以调用方法怎么办?
解决一:
修改@RequestParam注解的required=false的属性。表示这个参数不是必须传递。
设置 defaultValue属性是默认值。也就是如果客户端没有传递user参数,则使用defaultValue来设置username的值<br/>
5、@RequestHeader获取请求头入参
@RequestHeader 可以把请求头的值注入到,方法参数中。
6、@CookieValue获取Cookie值入参
@CookieValue是可以取得客户端发送过来的某个指定了名称的Cookie的值,注入到方法参数。
7、一个Pojo对象类型的参数
JavaBean对象
有一个表单(表单项的name的属性值一定要跟javaBean的属性名一致):
Controller中的代码:
8、对象中套对象(级联属性)
GET请求中文乱码,找到Servers工程下Tomcat的配置文件server.xml配置文件,找到Connector标签,添加属性URIEncoding
javaBean对象
表单设置: