初识SpringMVC以及它的开发步骤
平和地做事
本篇只是简单介绍了关于SpringMVC的开发步骤以及注解开发,有助于了解原理,加深印象。
Spring MVC framework is widely used for java web applications.
传统的模型层被拆分为了业务层(Service)和数据访问层(DAO,Data Access Object)。 在 Service 下可以通过 Spring 的声明式事务操作数据访问层
1、MVC
M 代表 模型(Model)
模型是什么呢? 模型就是数据,就是 dao,service,bean
V 代表 视图(View)
视图是什么呢? 就是网页, JSP,用来展示模型中的数据
C 代表 控制器(controller)
控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。
2、为什么要学习SpringMVC
基于MVC框架,可以与 Spring无缝结合,具备AOP和IOC;
约定大于配置;
功能强大:RESTful、数据验证、格式化等
用的人多!!!
3、SpringMVC执行流程
客户端请求提交到DispatcherServlet
由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
DispatcherServlet将请求提交到Controller
Controller调用业务逻辑处理后,返回ModelAndView
DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
视图负责将结果显示到客户端
4、开发步骤
4.1 创建web项目
<!-- 普通maven变为 web工程:修改打包方式 -->
<packaging>war</packaging>
- 只要是web工程就得有web.xml
4.2 pom.xml
添加依赖
<!-- springMVC依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
4.3 web.xml
下配置DispatcherServlet,绑定配置文件
<!-- 配置DispatchServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 绑定springMVC配置文件 app-context.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</init-param>
<!-- 启动级别:1 服务器一启动就初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 这里的 / :匹配所有请求,不会匹配jsp页面
如果 /* :匹配包括jsp的所有请求
-->
4. 4 添加SpringMVC配置文件app-context.xml
<!-- 添加处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀、后缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- BeanNameUrlHandlerMapping : bean-->
<bean id="/hello" class="com.jr.controller.HelloController"/>
我的项目结构:
4.5 编写Controller
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
// 业务代码
String res = "HelloSpringMVC!";
mv.addObject("msg",res);
// 视图跳转
mv.setViewName("test");
return mv;
}
}
4.6 启动tomcat测试
5、注解开发
同样,创建一个web项目,maven依赖都是一样的,我做步骤如下:
我是直接创建的普通maven项目,然后添加web项目,也可以用别的方式
5.1 添加web项目,准备环境
5.2 web.xml 配置
没有就自己在WEB-INF下新建web.xml
其实这个是一劳永逸的~~
- 注册DispatcherServlet
- 绑定springMVC配置文件
- 启动级别设置为1
- 注意映射路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置DispatchServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 绑定springMVC配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</init-param>
<!-- 启动级别:1 服务器一启动就初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.3 添加springMVC配置文件
在resource 下新建配置文件 app-context.xml
- 让IOC注解生效,(扫描注解)
- 静态资源过滤,HTML,JS,CSS……
- MVC 注解驱动,(开启注解)
- 配置视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 让注解生效 自动扫描包:在指定的包下注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.jr.controller"/>
<!-- 默认资源过滤 -->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀、后缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
<mvc:annotation-driven/> <!-- 使支持springMVC注解 , 在spring中一般采用 @RequestMapping 注解来完成关系映射, 想要让 @RequestMapping 注解生效,必须向上下文中注册 DefaultAnnotationHandlerMapping 和一个AnnotationMethodHandlerAdapter 实例, 这两个实例分别在类级别和方法级别处理,而 annotation-driven 可以帮我们自动完成这两个实例的注入 -->
5.4 创建Controller,添加注解
- @Controller
- @@RequestMapping("这里是映射地址"),如果类和方法上都加了,路径就会有父子关系
@Controller
public class HelloController{
@RequestMapping("/hello")// 访问地址
public String hello(Model model){
// 封装数据,可以在jsp中取出
model.addAttribute("msg","hello!我是hello.jsp");
// 会被试图解析器处理
return "hello"; // hello.jsp
}
/* 多个请求,对应多个方法即可 */
}
5.5 测试
我的项目结构
5.6 一些小点
如果加上了@RestController 那么数据就不走视图解析器啦
参考来源
搭建maven环境可以参考:https://www.cnblogs.com/fulfill/p/16611208.html
https://www.digitalocean.com/community/tutorials/spring-mvc-tutorialhttps://www.jianshu.com/p/91a2d0a1e45a
狂神说视频