回顾springmvc
一、中央调度器(dispatcherServlet)
是springmvc最重要的对象,他的父类继承自HttpServlet。在dispatcherServlet的创建过程中,会同时创建Springmvc容器对象,读取Springmvc的配置文件,吧这个配置文件中的对象都创建好。
注册方式

1、 创建处理器:
@Controller:表示当前类为处理器()
@RequestMapping:表示当前方法为处理器方法。该方法要对value属性所指定的URI进行处理与响应
加在类上方时表示所有该类方法的根路径
2、声明组件扫描器
在springmvc配置文件中声明组件扫描器
3、视图解析器的注册
在mvc配置文件中配置bean对象InternalResourceViewResolver中引入了请求的前缀与后缀。二ModelAndView中只需给出跳转页面的文件名即可,视图解析器会自动拼接。
4、配置<url-pattern/>
(1)*.do
一般DispatcherServlet的url配置使用这种后缀匹配方式。
(2)/
静态资源的访问默认是由tomcat默认的servlet来做的,但当使用/时所有的资源都会被DispatcherServlet支配,会自动忽视静态资源的访问,此时需要额外配置来访问静态资源
方法一:<mvc:default-servlet-handler/>(有四种,后缀别忘了是mvc的)

方法二:<mvc:resources/>
<mvc:resources mapping="/images/**" location="/images/" />
mapping 表示对该资源的请求。注意后面是两个**
location:表示静态资源所在目录,当然目录不要使用/WEB-INF/及其子目录。
还要声明注解驱动
<mvc:annotation-driven/>
二、中央调度器执行流程

三、注解式开发
1、@RequestMapping定义请求规则
可以注解在类上也可以注解在方法上,其value值一般以“/”开始,加在方法上时表示该方法的uri,
加在类上方时表示所有该类方法的根路径。@RequestMapping还有一个属性知识method,如果不写则默认两种请求方式都可以。其枚举值常用的为RequestMethod.GET和RequestMethod.POST。
2、处理器方法的参数
可以包含以下四类参数,这些参数会在系统调用时由系统自动复制,即程序员可在方法内直接使用。
HttpServletRequest
HttpServletResponse
HttpSession
请求中携带的请求参数
3、参数的接收
1)逐个参数的接收:只要保证请求参数名与该请求处理方法的参数名相同即可。
2)请求参数中文乱码问题:可用Spring-web依赖中的CharacterEncodingFilter类来处理

3)矫正请求参数名@RequestParam
当请求URL所携带的参数名称与处理方法中指定的参数名不相同时,则须在处理方法参数前添加一个注解@RequestParam(“请求参数名”),指定请求URL所携带参数的名称。
value属性指定请求参数的名称,required指定请求参数是否可以为空

4)对象参数接收
将处理器方法的参数定义为一个对象,只要保证请求参数名与这个对象的属性同名即可
4、处理器方法的返回值
返回值有四种类型:
第一种:ModelAndView
第二种:String
第三种:void
第四种:返回自定义类型对象
1)返回ModelAndView
适合当处理器处理完后需要跳转到其他资源,又需要在资源见传递数据,此时返回该值。
2)返回String
处理器方法返回的字符串可以指定逻辑视图名,通过逻辑视图解析器可以将其转换为物理视图地址
3)返回void
当使用AjAX响应时并且无需跳转到其他资源时,可以用返回值void。(当传值是json格式时需要在pom.xml中加入jackson依赖)
4)返回对象Object
可以是任意自定义类型数据,需要使用@ResponseBody注解,将转换后的JSON数据放入到响应体中。
该转换需要由HttpMessageConverter完成。而转换器的开启,需要有<mvc:annotation-driven/>
5)返回字符串对象(非json)
返回值String加上上方的@ResponseBody注解是的String不再是返回视图,而是字符串对象。但当返回的字符串为中文时会变成乱吧,此时需要@RequestMapping的produces属性指定字符集

四、SSM整合开发
1、SSM所需依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- jsp依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</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-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2、配置web.xml
(1)注册ContextLoaderListener监听器

(2)注册字符集过滤器

(3)配置中央调度器

(4)jdbc配置文件

(5)spring配置文件applicationContext.xml

(6)springmvc配置文件:springmvc.xml

(7)mybatis.xml

五、请求重定向和转发
当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向。
而根据索要跳转的资源类型,又可分为跳转到页面与跳转到其他处理器。
注:请求转发可以访问WEB-INF中的页面,而重定向不能直接访问。
(1)请求转发
独立于视图解析器,需要在setViewName()指定的视图前添加forward,并写出视图的完整路径。
当处理器方法返回 String时,在视图路径前面加入 forward: 视图完整路径。
(2)请求转发
独立于视图解析器,在处理器方法返回的视图字符串的前面添加redirect,则可实现重定向跳转。
六、异常处理
使用方式:将一个包专门用来自定义异常,将处理异常的方法专门定义在一个类中,作为全局的异常处理类。需要使用注解@ControllerAdvice,字面理解就是控制器增强。使用@ControllerAdvice修饰的类中可以使用ExceptionHandler。当使用@RequestMapping注解修饰的方法抛出异常时,会执行@ControllerAdvice修饰的类中的异常处理方法。
注:需要使用<context:component-scan>来扫描@ControllerAdvice所在的类路径来创建对象,以及注册注解驱动<mvc:annotation-driven/>
七、拦截器

1、注册拦截器(语法与切入点execution类似)

2、需要创建一个类实现HandlerInterceptor接口,然后实现任意三个方法preHandle、postHandle、afterCompletion

浙公网安备 33010602011771号