springMVC是spring提供的一个子框架,是为web层提供的一个框架,实现了mvc思想所以又被称为MVC框架,可以和spring无缝连接到一起。我们将3大框架整合完成业务开发(SSM框架)
SpirngMVC的执行流程:
tomcat启动->加载web.xml->配置前端控制器dispaterServlet(拦截所有的访问服务请求)->加载springmvc的核心文件(加载resource/springmvc文件)->包扫描(类放入IOC容器中)->映射器配置(浏览器地址与类中方法做映射绑定)->加载适配器(N个处理器)->加载视图解析器
访问->前端控制器拦截(主要作用处理Controller类)->找springmvc,通过加载的适配器处理器找到映射关系->从容器中找到对象方法,前端控制器对目标方法调用->结果返回给前端控制器->将结果加载到视图解析器->拼接处页面地址给前端控制器->前端控制器最终请求转发访问该页面地址
SpirngMVC的组件
1.DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性
2.< mvc:annotation-driven >
自动加载映射器和适配器 简化开发
3.视图解析器
springxml中配置
<!--视图解析器
页面地址的拼接:
prefix + 方法返回值 + suffix
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置页面地址的前缀-->
<property name="prefix" value="/jsp/"></property>
<!--配置页面地址的后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
常用注解
@Controller
//供spring容器扫描识别
@RequestMapping(value = "/user")
//映射浏览器地址路径的
/*
1 可以配置在类上,也可以配置在方法上,为了区分模块方法
2 属性可以使用value也可以使用path
3 默认接受所有访问的提交方式(post,get,delete,put..)但是也可以指定请求方式
//method = RequestMethod.POST method = RequestMethod.GET
4 默认请求参数可有可无 但是也可以指定页面必须传递某些参数
//params={"参数1","参数2"}
*/
@RequestParam(defaultValue = "1")
//给参数一个默认值
@RequestBody //将前端返回的json自动封装转化为java对象
@ResponseBody //封装为json
//响应必须为json数据加@ResponseBody
//接受如果不为json不用加@RequestBody转化
#### 范例
webxml中配置前端控制器
```xml
<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:springmvc.xml</param-value>
<!--classpath为springmvc。xml的地址-->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
<!--/为对所有文件进行拦截,但不拦截jsp文件-->
</servlet-mapping>
pom中引入依赖
<dependencies>
<!--spring的ioc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
springmvc.xml中配置
<!--放行静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--包扫描-->
<context:component-scan base-package="com.itxxxx.web"></context:component-scan>
<!--映射器和适配器-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--视图解析器,仅后端不需要配置,只返回数据,前端自行判断进行跳转-->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".html"></property>
</bean>-->
java类中执行
@Controller
@RequestMapping(value = "/user")
public class UserController {
@RequestMapping(value = "/hello") //json数据--@requestBody--java对象
public @ResponseBody List<String> hello3(@RequestBody User user){
System.out.println(user);
List<String> list=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
return list; //返回ajax //java对象--@ResponseBody---json数据
}
}