SpringMVC复习
其实SpringMVC就是采用model2的设计模式,但是mvc不是一种设计模式,是一种架构模式。
MVC简单分为模型Model,View视图,Controller控制器
Model又可以分为业务层和服务层。
View 视图,负责展示模型,常用于jsp, 现在的话比较少用。
Controller 控制器,接收用户请求并适配给对应的方法来处理数据,最后返回给视图。
DispatcherServlet 前端控制器,负责请求的分发,它本质也是个Servlet
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
SpringMVC执行过程
DispatcherServlet调用HandlerMapping(处理器映射器),然后HandlerMapping根据请求url去查找Handler。
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,然后将解析后的信息返回给DispatcherServlet。
DispatcherServlet再通过调用HandlerAdapter处理器适配器,通过DispatcherServlet传过来的信息去调用具体的Controller去执行,然后将执行的结果,如ModelAndView等返回给HandlerAdapter,HandlerAdapter再将返回的视图逻辑名或者模型返回给DispatcherServlet。
DispatcherServlet再去调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名,最后返回视图。
DispatcherServlet再往视图内放入model(数据),再返回,最后展示给用户。
最开始的时候确实看得云里雾里,但现在回头去看,海阔天空。
这是web.xml的配置文件
<?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">
<servlet>
<servlet-name>springmvc</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>springmvc</servlet-name>
<!-- /表示只匹配请求,不匹配jsp界面
/*表示匹配请求,还包括匹配jsp界面-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置了DispatcherServlet
spring-mvc.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!-- 前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<bean id="/hello" class="com.skity666.HelloController"/>
</beans>
maven项目的pom依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
最后贴上视频教程链接
https://www.bilibili.com/video/BV1aE41167Tu?p=1
当然不是我讲的 ^ - ^
9-23
今天学会了@Controller注解以及配置IOC自动注入
省略了装配处理器映射器和处理器适配器,
只添加了三行代码
具体作用
当然我们使用了注解以及IOC自动注入,那上面的配置也得改
<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
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
简简单单的小demo,你学会了吗 ^ - ^
2020-09-24
今天学习了一下restful风格思想
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束
条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,
更有层次,更易于实现缓存等机制。
REST,即Representational State Transfer的缩写。直接翻译的意思是"表现层状态转化"。
它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
简单来说,就是每一个url都代表着一种资源,
restful是客户端和服务器中的中间层,
像百度百科
这代表着查询
https://baike.baidu.com/item/果子
这代表着添加
https://baike.baidu.com/item
这代表着更新
https://baike.baidu.com/item/果子
这代表着删除
https://baike.baidu.com/item/果子
这就是restful风格的魅力
是不是很cool
2020-09-27
当我们在springmvc的框架下
遇到了中文乱码
Content-Type:text/html; charset=ISO8859-1
其实它只要在ReRequestMapping方法加个produces = “application/json;charset=utf-8”,就能满足,但我不拘于此,我就是想要全局的。还有就是过滤器配置了,但是对@RequestBody注解是没有用的。
试了很多办法,最后成功了
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=utf-8"></property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
添加mvc:annotation-driven,记得register-defaults要写为false,即启动时注册以supportedMediaTypes支持的编码规则添加到HttpMessageConverter组件内,而默认true,即springMVC启动时自动注册HttpMessageConverter,编码规则是ISO-8859-1。
如果没有加那个属性,他还是默认编码是ISO-8859-1;
你学会了吗?