微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

14.SpringMVC概述

0.1概述

        Spring MVC 是spring的一个模块,专门做web开发的。

        好处:

                1.基于MVC架构,功能明确,解耦合

                2.容易理解,上手快,使用简单

                3.作为spring框架的一部分,能够使用spring的ioc和aop,方便整合其他框架

        官网:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web

0.2web开发步骤

        1.加入spring-webmvc依赖,间接把spring的依赖都加入到项目中

<!--springwebmvc依赖,间接包含spring的依赖-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>

        2.加入jsp、servlet依赖

<!--jsp依赖-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

<!--servlet依赖-->
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2.1-b03</version>
  <scope>provided</scope>
</dependency>

        3.在web.xml中注册dispatcherServlet(前端控制器)和字符集过滤器

                前端控制器:负责接收用户请求,调用控制器对象,并把请求的处理结果显示用户

<!--注册前端调度器-->
<servlet>
    <servlet-name>myweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!--自定义springmvc.xml文件路径-->
        <param-value>classpath:springmvc.xml文件路径</param-value>
    </init-param>
    <!--tomcat启动后创建对象的顺序,值为整数,越小越早-->
    <load-on-startup>1</load-on-startup>
</servlet>
<!--拦截请求路径-->
<servlet-mapping>
    <servlet-name>myweb</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

                字符集过滤器:处理中文乱码

<!--注册字符集过滤器处理中文乱码-->
<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>
    <init-param>
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

                注意:<url-pattern>标签:表示要拦截的请求

                        1.使用扩展名方式:*.do,*.action,*.mvc等

                        2.使用斜杠"/*",表示拦截所有请求。但是访问静态资源会出现404

                                解决

                                        方法1.在springmvc配置文件中加入<mvc:default-servlet-handler>

                                        方法2.在springmvc配置文件添加<mvc:resources/>标签

//mapping:访问静态资源的uri地址;location:静态资源在你的项目中的目录位置
<mvc:resources mapping="/images/**" location="/images/" />  //找图片

                                 注意:这两种方式会和RequestMapping注解有冲突,需要加上mvc:annotation-driven注解驱动。

        4.创建控制器类

        5.创建springmvc配置文件

                (1)声明组件扫描器,指定@Controller注解所在的包名

<!--扫描controller层,加入到容器中-->
<context:component-scan base-package="com.bjpowernode.controller"/>

                (2)声明视图解析器,处理视图

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

 0.3常用注解

        @RequestMapping:映射请求,可以在类和方法上定义

                method=RequestMethod.请求方式

        @RequestParam:绑定请求参数,参数前定义

                value="属性名"

                required=true|false,true(认)没有携带该参数会报400错误

                defaultValue="认值"

        @RequestBody:接收一个json对象的字符串,而不是一个json对象,所以使用ajax时指定contentType:"application/json",且为post请求

        @ResponseBody:将处理器方法返回的对象,通过适当的转换器 转换为指定的格式之后,写入到响应体中,通常返回json或者xml

        @RequestHeader:绑定请求头的属性值到处理方法的入参中,参数前定义

@RequestMapping("/handle")
public String handle(@RequestHeader("Accept-Encoding") String encoding)

        @CookieValue:让处理器方法绑定某个Cookie值,参数前定义

@RequestMapping("/handle")
public String handle(@CookieValue(value="sessionid",required=false) String encoding)

 0.4路径

        后台:@requestMapping推荐路径都以"/"开头

        前台

                方式1:开头不加斜杠

                方式2:开头加"/"斜杠,在最前面加上${packContext.request.contextpath}

0.5请求流程

        1.用户发送请求至前端控制器(dispatcherServlet)

        2.前端控制器收到请求后,调用处理器映射器(HandlerMapping)

        3.处理器映射器根据请求url找到具体的处理器(Handler),生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器

        4.前端控制器调用处理器适配器(HandlerAdapter)

        5.处理器适配器调用具体处理器

        6.处理器执行完成返回ModelAndView

        7.处理器适配器将ModelAndView返回给前端控制器

        8.前端控制器将ModelAndView传给视图解析器(ViewResolver)进行解析

        9.视图解析器解析后返回具体视图(View)给前端控制器

        10.前端控制器给视图进行渲染

        11.视图渲染完成后返回给前端控制器

        12.前端控制器响应给用户

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐