springMVC

web请求过程

在这里插入图片描述

springMVC组件介绍

  1. DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合 性,提高每个组件的扩展性。
  2. HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式
  3. HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器,调用处理器传递参数等工作! ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。

MVC执行过程

在这里插入图片描述

Dispatcher介绍

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

  1. 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

  2. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个 HandlerInterceptor拦截器);

  3. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

  4. 通过ViewResolver解析逻辑视图名到具体视图实现;

  5. 本地化解析;

  6. 渲染具体的视图等;

  7. 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

springMVC搭建

(1)添加jar包

<dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
      <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
    </dependency>
  </dependencies>

(2)修改web.xml

<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.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

/和/*的区别 *

< url-pattern > / < url-pattern > 不会匹配到.jsp,即:.jsp不会进入spring的 DispatcherServlet类 。 < url-pattern > / < url-pattern > 会匹配.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类, 导致找不到对应的controller所以报404错。 可以配置/ ,此工程 所有请求全部由springmvc解析,此种方式可以实现 RESTful方式,需要特殊处理对静态文件 的解析不能由springmvc解析 可以配置.do或.action,所有请求的url扩展名为.do或.action由springmvc解析,此种方法常用 不可以/,如果配置/,返回jsp也由springmvc解析,这是不对的。

url-pattern有5种配置模式

(1)/xxx:完全匹配/xxx的路径

(2)/xxx/:匹配以/xxx开头的路径,请求中必须包含xxx。 (3)/:匹配/下的所有路径,请求可以进入到action或controller,但是转发jsp时再次被拦截,不能访问jsp界面。 (4).xx:匹配以xx结尾的路径,所有请求必须以.xx结尾,但不会影响访问静态文件。

(5)/:默认模式,未被匹配的路径都将映射到刺servlet,对jpg,js,css等静态文件也将被拦截,不能访问。

(3)修改spring配置文件

<?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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
>
    <!-- 扫描controller-->
    <context:component-scan base-package="com.cyb.controller"/>
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- jsp所在的位置-->
        <property name="prefix" value="/" />
        <!-- jsp文件的后缀名-->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

接参

接收方式:

(1)HttpServletRequest

(2)页面传值时的key=处理请求的方法的参数名

(3)使用控件名和对象的属性名一致的方式进行接收

日期处理:

在这里插入图片描述

返参

(1)HttpServletRequest

(2)ModelMap map ,默认作用域request

(3)ModelAndView 对象需要new,同时作为返回值类型

(4)Model类保存数据 8.session存值

session存值

(1)使用HttpSession :request.getSession();

(2)使用@sessionAttributes(“key值”)//写的是ModelMap中定义的key值 注:该注解和ModelMap结合使用,当使用ModelMap存值时,会在session中同时存储一份数据 @SessionAttributes()的小括号中如果是一个值,不要加{}

示例: @SessionAttributes(“key”) @SessionAttributes({“key1”,“key2”}) 清除注解session:SessionStatus类 status.setComplete();

乱码问题

如何设置get请求乱码?tomcat8已经默认配置
在这里插入图片描述

post处理乱码

​ 注意:这里只能处理接受后数据的编码,如果是其他位置的编码问题还需要再考虑处理方案

在这里插入图片描述

转发和重定向

默认转发跳转

@RequestMapping("/forwardView")
public String forwardView(){
return "forward:/WEB_INF/pages/success.jsp";
}

重定向:

return "redirect:a.jsp" 或者:redirect:findall

注意:重定向时地址栏会发生拼接modelmap中值的问题

异常处理

//配置异常结果界面 @ExceptionHandler(NullPointerException.class) public String execeptionResult(){ return “exception”; }

全局异常:@ControllerAdvice 使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生 的异常

在这里插入图片描述

SpringMVC拦截器

(1)创建拦截器类:实现HandlerInterceptor接口

preHandle() 拦截器开始

postHandle() 拦截器结束

afterCompletion 最后执行

(2)配置拦截器

拦截所有请求(测试:拦截内容包含jsp吗?)

<mvc:interceptors>
<bean id="my" class="util.MyInterceptor"/>
</mvc:interceptors

拦截指定请求

<mvc:interceptors>
<mvc:interceptor >
<mvc:mapping path="/请求名" />
<mvc:mapping path="/请求名" />
<bean id="my" class="util.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

springMVC拦截器使用场景

1、日志记录 :记录请求信息的日志

2、权限检查,如登录检查

3、性能检测:检测方法的执行时间

SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

(1)过滤器: 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容 器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修 改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等

2、权限检查,如登录检查

3、性能检测:检测方法的执行时间

SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

(1)过滤器: 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容 器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修 改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等

(2)拦截器: 依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程 (AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操 作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦 截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值