认识SpringMVC

目录

1. 什么是SpringMVC

2. SpringMVC运行流程

3. SpringMVC的搭建

4. 控制层注解

5. Ajax 转 Json


1. 什么是SpringMVC

SpringMVC是 Spring中的一个模块 , 是对 Servlet 进行了封装

springmvc 是一个基于 mvc 的 web 框架,方便前后端数据的传输.
Spring MVC 拥有控制器,接收外部请求,解析参数传给服务层

     那这样就明白了, SpringMVC 原来是web框架啊 , 就跟 servlet 那些一样, 只不过更为简洁了, 下面就来介绍SpringMVC到底是怎样去做的

2. SpringMVC运行流程

先来看一幅图

 这就是 SpringMVC的运行流程, 刚看可能有些疑惑, 接着来一一解释
首先我们可以注意到, 上图中的DispatcherServlet , 几乎所有流程都和它紧密相连
我们的所有请求都会先到达DispatcherServlet , 最终也由它来把数据响应回去

      Spring 中提供了org.springframework.web.servlet.DispatcherServlet 类,它从HttpServlet 继承而来,它就是 Spring MVC 中的前端控制器(Frontcontroller)

接着我们来模拟上面的流程
1. 用户发送请求, 请求先到达DispatcherServlet
2. 请求从DispatcherServlet 出来后进入映射处理器

      HandlerMapping: DispatcherServlet 自己并不处理请求,而是将请求交给 页面控制器。那么在 DispatcherServlet 中如何选择正确的页面控制器呢? 这件事情就交给HandlerMapping 来做了,经过了 HandlerMapping 处理 之后,DispatcherServlet 就知道要将请求交给哪个页面控制器来处理了。

        此步骤主要检查请求有没有配置拦截器, 如果有拦截器就执行拦截器(拦截器后面会说到)
3 ,4. 请求这时会到达处理适配器(负责数据类型转换等),然后到达我们的控制层

     HandlerAdapter:经过了 HandlerMapping 处理之后,DispatcherServlet 就获取到了处理器,但是处理器有多种,为了方便调用,DispatcherServlet将这些处理器包装成处理器适配器 HandlerAdapter,HandlerAdapter 调用真正的处理器的功能处理方法,完成功能处理;并返回一个 ModelAndView 对象(包含模型数据、逻辑视图名)

       此步骤会根据我们 java 中的类或者其他类型来自动把数据给我们组装好

5. 控制层将处理后的数据返回
       现阶段我们可以直接通过控制层将数据返回 , 就不需要图中的5 ,6 步骤了
 

3. SpringMVC的搭建

  maven 先导入SpringMVC的核心依赖

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>5.2.2.RELEASE</version> 
</dependency>

在 web.xml 配置 DispatcherServlet 

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!--启动时读取spring.xml配置文件-->
        <param-value>classpath:spring.xml</param-value>
    </init-param>
    <!--在服务器启动时创建Servlet-->
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <!--/表示所有请求都进入dispatcherServlet-->
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

创建SpringMVC 开启 SpringMVC注解

<mvc:annotation-driven></mvc:annotation-driven>

       这里我们需要设置不能让静态资源进入DispatcherServlet , 例如 . html , . css等文件 , 因为如果让这些文件进入DispatcherServlet的话 , 它们在DispatcherServlet并没有相应的执行流程 , 所以这些资源文件会被直接过滤掉 , 导致我们访问不到 , 所以这里我们需要设置

<mvc:default-servlet-handler/>

设置之后 , 静态资源文件就不会进入DispatcherServlet

         在 springMVC-servlet.xml 中配置<mvc:default-servlet-handler />后,会在 Spring MVC 上下文中定义一个 org.springframework.web.servlet.resource.DefaultServletHttpRequest Handler,它会像一个检查员,对进入 DispatcherServlet 的 URL 进行筛查, 如果发现是静态资源的请求,就将该请求转由 Web 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。

       另外, 如果我们提交的数据里出现中文 , 那么也会出现乱码,所以这里需要在web.xml设置中文乱码处理

<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>

4. 控制层注解

      以下是一个 控制层 的代码示例

@RestController
@RequestMapping(value = "/login")
public class LoginController {

    @Autowired
    LoginService loginService;

    @PostMapping(value = "/login")
    public CommonResult adminLogin(Admin admin, HttpSession session){
        CommonResult commonResult;
        try {
            Admin admin1 = loginService.login(admin);
            if(admin1==null){
                commonResult=new CommonResult(201,"账号或密码错误",admin1);
            }else  {
                session.setAttribute("admin",admin1);
                commonResult=new CommonResult(200,"登录成功",admin1);
            }
        }catch (Exception e){
            commonResult=new CommonResult(500,"登录失败","");
        }
        return commonResult;
    }
}
@Controller 用于标记在一个类上,使用它标记的类就是一个 SpringMVC Controller 对象
 
这里使用的是 @RestController , 它是一个组合注解,包括以下注解
 

 

 @RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上
也可以根据Get方式或者Post方式选择 @GetMapping 或者 @PostMapping

5. Ajax 转 Json

       首先需要在 maven 导入 转json需要的 jar

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency>

这里我们需要这样一个注解标签 , @responseBody

@responseBody 注解的作用是将 controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区,通常用来向异步请求返回 JSON 数据。

 使用此注解标签 , 我们不用再手动转 json ,直接 return 我们要返回的数据即可, 如上述控制层例子
      因为我们之前使用的是@RestController , 它里面就包含了@responseBody, 所以这里也可以省略, 只需要一个@RestController 即可完成所有功能
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值