1: SpringMVC的入门程序
-
导入jar 包 pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!-- 版本锁定 --> <spring.version>5.0.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>
-
web.xml配置核心的控制器
1. 在web.xml配置文件中核心控制器DispatcherServlet <!--配置解决中文乱码的过滤器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class> <!-- 设置过滤器中的属性值 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 过滤所有请求 --> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置前端控制器--> <!-- SpringMVC的核心控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定springmvc配置文件路径 , 默认路径WEB-INF/servlet-name+"-"+servlet.xml(dispatcherServlet-servlet.xml)--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置servlet启动时加载对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!-- /代表的是所有格式的后台请求,*.do,不可以*.* --> <url-pattern>/</url-pattern> </servlet-mapping> get 请求方式: tomacat 对 GET 和 POST 请求处理方式是不同的,GET 请求的编码问题,要改 tomcat 的 server.xml 配置文件,如下: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 改为: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/> 如果遇到 ajax 请求仍然乱码,请把: useBodyEncodingForURI="true"改为 URIEncoding="UTF-8" 即可。
-
编写 springmvc.xml的配置文件
* 在 src/main/resources 配置 springmvc.xml 在spring 5.0以上版本 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.demos"></context:component-scan> <!-- 视图解析器对象 --> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 在 springmvc.xml 的配置文件中可以配置,静态资源不过滤:--> <!-- location 表示路径,mapping 表示文件,**表示该目录下的文件以及子目录的文件 --> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/scripts/" mapping="/javascript/**"/> <!-- 开启SpringMVC框架注解的支持 --> <mvc:annotation-driven></mvc:annotation-driven> </beans> * 在 src/main/resources 配置 springmvc.xml 在spring 5.0以下版本 <!-- 实例化非默认的映射处理器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> </bean> <!-- 实例化非默认的适配器处理器--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"> </bean> <!-- 定义视图解析器中的前后缀--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 1.测试 在浏览器访问:http://localhost:8080/springmvc01/login --> <!--请求和处理器之前的对应关系 login请求由LoginController处理--> <!-- <bean id="/login" class="com.demos.controller.LoginController" ></bean>--> <!-- 在 springmvc.xml 的配置文件中可以配置,静态资源不过滤:--> <!-- location 表示路径,mapping 表示文件,**表示该目录下的文件以及子目录的文件 --> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/scripts/" mapping="/javascript/**"/> <!-- 开启注解扫描 --> <context:component-scan base-package="com.demos.controller"></context:component-scan> <!-- 使用mvc的注解驱动 --> <mvc:annotation-driven></mvc:annotation-driven>
-
编写index.jsp和HelloController控制器类
1. index.jsp <body> <h3>入门案例</h3> <a href="${ pageContext.request.contextPath }/hello">入门案例</a> </body> 2. HelloController package com.demos.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器类 @Controller public class HelloController { /** * 接受请求 * @return */ @RequestMapping(path = "/hello") public String sayHello() { System.out.println("Hello StringMVC"); return "success"; } } 5. 在WEB-INF目录下创建pages文件夹,编写success.jsp的成功页面 <body> <h3>入门成功!!</h3> </body> 6. 启动Tomcat服务器,进行测试
* 课程总结
-
SpringMVC的概述
2. 入门 1. 创建工程,导入坐标 2. 在web.xml中配置前端控制器(启动服务器,加载springmvc.xml配置文件) 3. 编写springmvc.xml配置文件 4. 编写index.jsp的页面,发送请求 5. 编写Controller类,编写方法(@RequestMapping(path="/hello")),处理请求 6. 编写配置文件(开启注解扫描),配置视图解析器 7. 执行的流程 8. @RequestMapping注解 1. path 2. value 3. method 4. .... 3. 参数绑定 1. 参数绑定必须会 2. 解决中文乱码,配置过滤器 3. 自定义数据类型转换器
2: 入门案例的执行过程分析
-
SpringMVC工作流程
1.Dispatcher Servlet(前端控制器):核心组件,协调调用其他组件。 2.handlerMapping(映射处理器):根据请求查找处理该请求的处理器(Handler) 3.Handler:处理请求的方法 4.HandlerAdapter(处理器适配器):适配参数以及调用执行处理器方法。 5.ModelAndVIew:封装跳转的页面以及向页面传递的参数 6.ViewResolver(视图解析器):查找跳转的页面并将数据解析到该页面。
-
详解工作流程
1. 用户发送请求到前端控制器(dispatcherServlet) 2. 通过dispatcherSerlet获取到映射处理器(handlerMapping) 3. 通过映射处理器(handlerMapping)得到Handler(处理请求的方法),回到前端控制器(dispatcherServlet) 4. 前端控制器(dispatcherServlet)通过处理器适配器(HandlerAdapter),处理Handler 5. 处理器适配器(HandlerAdapter),调用处理器相对应功能的处理方法,在Handler处理结果 6. Handler返回一个ModelAndView给处理器适配器(HandlerAdapter) 7. 处理器适配器(HandlerAdapter)把ModelAndView返回给前端控制器(dispatcherServlet) 8. 前端控制器(dispatcherServlet)把ModelAndView交给视图解析器(ViewResolver)进行解析 9. 视图解析器(ViewResolver)把解析过的视图(view)传回给前端控制器(dispatcherServlet) 10. 前端控制器(dispatcherServlet)把视图(view)通过视图渲染得到一个新的视图(view) 11. 新的视图(view)传回给前端控制器(dispatcherServlet) 12. 前端控制器(dispatcherServlet)把视图结果传回给用户,进行展示 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet 收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并 返回给DispatcherServlet。 4、DispatcherServlet 调用HandlerAdapter处理器适配器 5、HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)方法。 6、处理器执行完成返回ModelAndView给HandlerAdapter。 7、HandlerAdapter 将处理器执行结果ModelAndView返回给DispatcherServlet 8、DispatcherServlet 将ModelAndView传给ViewReslover 视图解析器 9、ViewReslover 解析后返回具体View给DispatcherServlet 10、DispatcherServlet 调用视图解析器根据View进行渲染视图(即将模型数据填充至视图 中)。 11、将渲染后的页面返回到前端控制器DispatcherServlet 12、DispatcherServlet 将渲染后的页面响应到客户端|
-
1.入门案例的执行流程
1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml配置文件 2. 开启了注解扫描,那么HelloController对象就会被创建 3. 从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到执行的具体方法 4. 根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件 5. Tomcat服务器渲染页面,做出响应
-
2.入门案例中的组件分析
1. 前端控制器(DispatcherServlet) 用户请求到达前端控制器,它就相当于 mvc 模式中的 c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。 2. 处理器映射器(HandlerMapping) HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。 3. 处理器(Handler) 它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。 4. 处理器适配器(HandlAdapter) 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。 5. 视图解析器(View Resolver) View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。 6. 视图(View) SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。 7 <mvc:annotation-driven>说明 在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。 使 用 <mvc:annotation-driven> 自动加载 RequestMappingHandlerMapping (处理映射器) 和RequestMappingHandlerAdapter (处理适配器),可用在 SpringMVC.xml 配 置 文 件 中 使 用<mvc:annotation-driven>替代注解处理器和适配器的配置。 注意: 一般开发中,我们都需要写上此标签(虽然从入门案例中看,我们不写也行,随着课程的深入,该标签还有具体的使用场景)。 明确: 我们只需要编写处理具体业务的控制器以及视图。