目录
1、什么是SpringMVC
Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet
来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了@Controller
和@RequestMapping
的类和方法,Spring为处理器方法提供了极其多样灵活的配置。
在Spring Web MVC中,你可以使用任何对象来作为命令对象或表单返回对象,而无须实现一个框架相关的接口或基类。Spring的数据绑定非常灵活:比如,它会把数据类型不匹配当成可由应用自行处理的运行时验证错误,而非系统错误。你可能会为了避免非法的类型转换在表单对象中使用字符串来存储数据,但无类型的字符串无法描述业务数据的真正含义,并且你还需要把它们转换成对应的业务对象类型。有了Spring的验证机制,意味着你再也不需这么做了,并且直接将业务对象绑定到表单对象上通常是更好的选择。
Spring的视图解析也是设计得异常灵活。控制器一般负责准备一个Map
模型、填充数据、返回一个合适的视图名等,同时它也可以直接将数据写到响应流中。视图名的解析高度灵活,支持多种配置,包括通过文件扩展名、Accept
内容头、bean、配置文件等的配置,甚至你还可以自己实现一个视图解析器ViewResolver
。模型(MVC中的M,model)其实是一个Map
类型的接口,彻底地把数据从视图技术中抽象分离了出来。你可以与基于模板的渲染技术直接整合,如JSP、Velocity和Freemarker等,或者你还可以直接生成XML、JSON、Atom以及其他多种类型的内容。Map
模型会简单地被转换成合适的格式,比如JSP的请求属性(attribute),一个Velocity模板的模型等。
2、 什么是DispatcherServlet
Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet
,能做的比这更多。它与Spring IoC容器做到了无缝集成,这意味着,Spring提供的任何特性,在Spring MVC中你都可以使用。
下图是Spring Web MVC处理请求的(高层抽象)工作流:
DispatcherServlet
其实就是个Servlet
(它继承自HttpServlet
基类),同样也需要在你web应用的web.xml
配置文件下声明。你需要在web.xml
文件中把你希望DispatcherServlet
处理的请求映射到对应的URL上去。下面的代码就展示了对DispatcherServlet
和路径映射的声明:
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3、使用idea创建并运行一个SpringMVC的项目
3.1、pom.xml中导入依赖
目录结构:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
3.2、配置web.xml
<!--注册servlet-->
<servlet>
<servlet-name>test01</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatch-servlet.xml</param-value>
</init-param>
</servlet>
<!--servlet映射路径
/: 表示所有的控制层路径 以及静态资源
/*: 表示全部 包含jsp网页
servlet-name:访问路径
url-pattern:经过servlet的请求路径
-->
<servlet-mapping>
<servlet-name>test01</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.3、配置dispatch-servlet.xml
<?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"
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">
<!-- 配置自定义扫描包,将base-package修改为你的包名-->
<context:component-scan base-package="com.gzh.controller"/>
<!--配置springmvc视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3.4、在controller包下创建控制器
@Controller
public class HelloController {
@RequestMapping("/hello01")
public String hello01(){
System.out.println("1111111111111111111111");
return "hello01";
}
}
3.5、配置Tomcat
在WEB-INF下创建views并创建一个hello01.jsp
最后运行tomcat就可以访问了。