目录
一、MVC:
1.经典MVC模式:
M是指模型,V是视图,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
2.SpringMVC:
SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架。它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。
3.执行流程:
(1)用户发送请求至**前端控制器**DispatcherServlet
(2)DispatcherServlet收到请求调用HandlerMapping**处理器映射器**。
(3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)DispatcherServlet调用HandlerAdapter**处理器适配器**。
(5)HandlerAdapter经过适配调用具体的Handler**处理器**(Controller,也叫后端控制器)。Controller执行完成返回ModelAndView。
(6)HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
(7)DispatcherServlet将ModelAndView传给ViewReslover**视图解析器**。
(8)ViewReslover解析后返回具体View**视图**。
(9)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
(10)DispatcherServlet响应用户。
二、使用maven搭建web项目
1.创建普通maven项目
2.在项目的main文件夹下新建文件夹webapps
3. 选择File--->Project Structure
4.选择Facets--->+--->web
5.选择项目中的对应模块
6.修改Deployment Descriptors下web.xml路径
7.修改Web Resource Directory路径
xml方式:
(1)导入SpringMVC相关坐标
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
(2)在webapps下创建hello.jsp视图页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你好,SpringMVC!
</body>
</html>
(3)在com.cqgcxy.controller包下创建HelloController控制器
package com.cqgcxy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("hello···");
return "hello.jsp";
}
}
(4)在resources文件夹下创建SpringMVC核心文件spring-mvc.xml,并添加注解扫描
(5)web.xml中配置SpringMVC核心控制器DispathcerServlet
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(6)配置Tomcat并启动
选择Run--->Edit Configurations
选择+--->Tomcat Server--->Local
选择Artifacts--->Web Application:Exploded--->From Modules
选择项目中的对应模块,选择OK--->继续选择OK
(7)客户端向路径 http://localhost:8080/mvc_demo_war_exploded/hello发起请求测试
注解方式:
(1)添加servlet依赖,并新建com.cqgcxy.config包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
(2)在config包下创建配置类SpringMvcConfig替换spring-mvc.xml
package com.cqgcxy.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.cqgcxy.controller")
public class SpringMvcConfig {
}
(3)在config包下创建配置类ServletContainersInitConfig替换web.xml
package com.cqgcxy.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
三、学习心得:
-
控制器的设计:合理的控制器设计是非常重要的,要遵循单一职责原则,将请求处理逻辑封装到不同的控制器中,以便于维护和扩展。
-
请求参数处理:Spring MVC提供了多种方式来处理请求参数,包括通过URL路径、查询参数、表单提交等方式,需要根据实际情况选择合适的方式,并且注意参数的校验和转换。例如:
@RequestMapping("/addPurchase") public String addPurchase() { return "Index/AddPurchase"; } @RequestMapping(value = "/addPurchase", method = RequestMethod.GET) public ModelAndView SelectAllProviderAndProduct(ModelMap modelMap) { List<Provider> providerList = indexService.selectAllProvider(); List<Product> productList = indexService.SelectAllProduct(); modelMap.addAttribute("providerList", providerList); modelMap.addAttribute("productList", productList); return new ModelAndView("Index/AddPurchase", modelMap); }
-
数据绑定和格式化:Spring MVC支持自动将请求参数绑定到方法的参数上,同时也支持数据格式化,需要注意数据格式的统一性和正确性。 当参数名不匹配时应用@RequestParam注解标识 如:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/getUser") public String getUser(@RequestParam("id") Long userId, Model model) { User user = userService.getUserById(userId); model.addAttribute("user", user); return "userDetail"; } }