Spring MVC简介
Spring MVC是Spring体系中的轻量级Web MVC (表示层)框架
Spring MVC核心是Controller控制器,用于处理响应和请求
Spring MVC基于Spring IoC容器运行,所有对象被IoC容器管理
体系架构
- 请求首先道道前端控制器,委托给具体的控制器处理请求
- 前端控制器通过查询处理器映射,找到URL对应的控制器
- 控制器处理请求,包括数据处理,调用业务逻辑等
- 控制器将模型数据(打包)和(逻辑)视图名返回给前端控制器
- 视图解析器讲逻辑视图名匹配成具体的视图实现
- 视图进行模型数据和视图实现的渲染
- 交付模型数据,给出Web响应
Spring MVC基本使用
配置Maven
在pom.xml配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.1.4</version>
</dependency>
配置web.xml
打注解@Servlet或配置DispatcherServlet
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置applicationContext.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!--自动创建springIoc容器-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</version> <!--根目录下所有请求都会被转发处理-->
</servlet-mapping>
配置applicationContext.xml
以下为配置web.xml后的配置
<beans xmlns="http://www.springframework.org/schemas//beans">
...
</beans>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e8cB9AJ8-1651079485702)(C:\Users\西铭\AppData\Roaming\Typora\typora-user-images\image-20220427235727515.png)]
编写Controller
- @Controller 注解该类为一个Servlet控制器
- @GetMapping 注解URL映射
- @ResponseBody 注解直接以字符串内容进行响应
URL映射
- Spring MVC通过URL映射将Web请求的URL和控制器中的方法进行映射
- URL映射基于方法,比传统的web.xml中Serve论坛映粒度更小,使用更灵活
- 常用注解
-
- @RequestMapping:通用映射,不区分请求,常用于Controller类,进行全局设置
- @GetMapping:Get请求映射,作用于具体方法
- @PostMapping:Post请求映射,作用于具体方法
Spring MVC提供多种方式接收请求参数,包括:
(1) 使用属性在方法参数直接接收参数
- 基于规则,所以要确保前后端属性名称一致,如果属性名称不一致,使用@RequestParam注解进行映射
(2) 使用JavaBean接收封装后的大量数据——更为常用
Spring MVC响应处理
Spring MVC对传统Servlet的相应处理进行了大量的简化,同时提供ModelAndView对象将响应的内容(Model)和视图进行了解耦合
常用于响应处理的方式有:
- @ResponseBody:不进行页面跳转和视图渲染,直接输出响应文本,包括标准JSON格式等
- ModelAndView:通过JSP、Themeleaf等模板继续宁视图渲染
-
- 产生页面跳转的方法返回ModelAndView类型
- ModelAndView中的对象作用域默认为request
- ModelAndView的页面跳转方式默认为forward
@Controller
@RequestMapping("/hello")//配置URL映射
public class DemoCnotroller{
@Autowired
private AccountService accountService;
@SessionAttributes(value = "account",types = {Account.class})//获取account
@GetMapping("/loginForm")//配置URL映射
public String Hello(@SessionAttribute("account") Account account,
@RequestParam(value = "firstName",required = false) String firstName,)
{
//@RequestParam为从页面上提交的值,如果前后端属性名要一致,则不用打@RequestParam
Account account1=new Account();
account1.setUsername(account.username);
return "Hello,"+account.username+",your firstname is:"+firstName;
}
}