MVC模式
MVC模式是指Model-View-Controller模式,是开发Web应用程序时常用的一种代码分层方式。
通过MVC设计模式可打造出一个松耦合+高重用性+高可适用性的完美架构,这也是架构设计的目标之一。
MVC优点:
1.MVC三个模块相互独立,松耦合架构。
2.多视图共享一个模型,大大提高代码的可重用性。
3.控制器提高了应用程序的灵活性和可配置性。
4.有利于软件工程化管理。
缺点:
1.增加了系统结构和实现的复杂性,不适合小规模的项目。
2.层与模型之间需要控制器做中间的连接控制,所以效率低。
搭建Spring MVC环境
1.引入jar包
2.画页面
3.编写控制器类
4.创建配置文件,定义控制器
5.Spring MVC架构底层是基于Servlet实现的,和所有Servlet一样,需要在web.xml文件中配置定义之后才会生效。
6.运行
使用注解开发SpringMVC框架
第一步,在配置文件中导入命名空间并写上注解扫描相关配置
第二步,修改控制器类,添加注解
第三步,运行查看结果
前后端数据交互
@RequestMapping注解
需要注意的是,在整个Web项目中,@RequestMapping映射的请求信息必须保证全局唯一。
入参处理:
@RequestParam注解的使用方法非常简单,只要在控制器接口方法中定义希望传入的参数,并在该参数前添加注解即可。
这边注意如果传中文的话需要在web.xml中写上相关配置
为了方便查看,我们加上超链接进行测试
这样写的话即使是地址,也不会中文乱码
但是这种注解在我们不传任何参数的时候,点击第二个超链接,会出现400:
400的情况有两种:
1.请求的参数是必须的,但是控制器未接收到。
例如刚刚并没有传参数,所以报400
2.请求的参数无法直接转换成 接受类型(在SpringMVC的项目中很多见)
我们传的年龄不是数字类型的,无法转换成我们接受的类型,也会报400
并且400在后台控制台中是不报错的
解决方案一:
添加注解的required属性,改为false,并将数字类型的默认值设为0
这样即使不传参数也可以提交
解决方案2:
不用注解,直接写参数,将int改为integer,因为文本框默认为null,无法转换为int类型,注意页面中的name属性值和参数名相同即可。
出参处理
控制器返回值若为ModelAndView,其中既可以包括视图信息,又可以包含模型数据信息。
示例:
Spring MVC框架除提供ModelAndView对象返回模型数据外,还提供了Model对象,该对象同样可以完成模型数据的传递工作。若控制器接口的入参中包含Model类型,Spring MVC会将隐含模型的引用传递给这些入参。
示例:
视图解析器
Spring MVC框架在完成请求处理工作之后,会返回一个ModelAndView对象,其中包含视图逻辑名和数据模型。对于那些返回值是String或其他类型的接口,Spring MVC框架也会在内部将他们装配成一个ModelAndView对象,这需要借助视图解析器实现。
示例:
在配置文件中配置视图解析器的相关代码:
改动控制器类的代码:
运行结果:
在web-inf目录下添加jsp目录并添加页面
如果我们运行的是web-inf下的页面,需要在配置文件中加上前缀
运行:
但这时如果我想要跳转到web目录下的ok页面则需要用指示符技术破坏视图解析跳转
示例:
注意:如果jsp页面存放在WEB-INF下,这个页面不可以通过地址栏直接访问,必须经过控制器转发跳转,才可以进入该页面,这样做出来的网站更具有安全性。
应用场景;
应用分为两种:
公开的:只要你知道地址,任意页面均可访问
不公开的:一般只会存在一个入口,登录页面,其他页面即使你知道地址,也无法访问,例如手机营业厅,一般只有营业员才知道入口。