Spring MVC框架自我理解

SpringMVC框架概述

1、简单易用,以提高开发效率。使大部分的精力放在业务逻辑上。
2、性能优秀,隶属于spring框架
3、mvc的控制器主要事情:
a.获取数据,使用springMVC实现
b.基于获取的数据调用业务,由成寻缘自己来编写相关逻辑代码
c.把业务的结果返回给跳转页面

SpringMVC详解

springMVC组件

  1. 前端控制器(DispatcherServlet)
    实际上就是一个servlet,相当于一个中转站,所有的访问都会走到这个Servlet,根据配置进行中转到相对应的Handler处理器中进行处理,获取到数据和视图后,响应相对应视图。
  2. 处理器映射器(HandlerMapping)
    本质上是一段映射关系,将访问路径和对象的Handler存储为映射关系。
  3. 处理器适配器(HandlerAdapter)
    根据要求找到对应的Handler来运行。前端控制器通过处理器映射器找到对应的Handler信息之后,将请求响应和对应的Handler信息交由适配器处理,处理器适配器找到确定Handler执行后,将结果即model和view返回给前端控制器。
  4. 视图解析器(ViewResolver)
    也是一种映射关系,将视图名称映射到真正视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。
  5. 视图(View)
    本质就是将handler处理器中返回的model数据嵌入到视图解析器解析后得到的jsp(servlet)页面中,向客户端做出相应。
  6. 具体流程图
    a. 用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获;
    b. DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain;
    c. DispatchServlet根据获得Handler选择一个合适的HandlerAdapter适配器处理;
    d. Handler对数据处理完成以后将返回一个ModelAndView()对象给DisPatchServlet;
    e. Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet 通过ViewResolver试图解析器将逻辑视图转化为真正的视图View;
    h. DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;
    在这里插入图片描述

SpringMVC案例

这里我使用idea开发工具演示

  1. 为了快速搭建项目这里使用idea创建web项目
    在这里插入图片描述
  2. web包中web.xml配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 根据web.xml文件中编写
    根据生成的SpringMVC核心配置文件,导入spring相关的约束信息,包括beans、context、mvc
<?xml version="1.0" encoding="UTF-8"?>

<!-- 扫描spring的组件 @Controller-->
<context:component-scan base-package="com.test.controller"></context:component-scan>


<!-- 扫描 spring mvc的注解 @RequestMapping @ResponseBody -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 非注解 处理器映射器 http://localhost:8080/helloWorld.form-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
<!-- 一个可以被url 映射的 Handler 的 bean, 供处理器映射器查找-->
<bean name="/helloWorld.form" class="com.test.controller.HelloController" />

<!-- 
prefix:前缀         /WEB-INF/jsp/
suffix:后缀         .jsp
拼装的原则:
     前缀+名称+后缀
假设名称为success
  拼装的结果:   /WEB-INF/pages/success.jsp
  page文件夹需要自行创建
-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>
创建处理器,编写代码: 需要实现Controller接口,在其中的handlerRequest中编写代码处理请求,并将处理好的数据和目标视图封装到ModelAndView中返回

public class HelloWorldController implements Controller {

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    // 创建ModelAndView模型
    ModelAndView modelAndView = new ModelAndView();

    // 向模型中封装数据
    modelAndView.addObject("message", "Hello World");

    // 封装返回视图
    modelAndView.setViewName("/WEB-INF/page/helloWorld.jsp");
    return modelAndView;
}

}

开发视图:
在这里插入图片描述

SpringMVC注解

  1. @RequestMapping
    a.使用:
    在web.xml文件中科一编写所有处理器的路径的父路径
    可以应用在类和方法上,在方法上表示将该方法变为一个处理器,且和指定路径做映射。
    通过注解方式实现请求响应的路径到处理器方法的映射
    在这里插入图片描述
    b.注解属性
    value属性指定当前处理器绑定到哪个访问路径上,method属性指定当前处理器处理哪种提交方式提交的请求 @RequestMapping(value="/test.action",method={RequestMethod.GET})
    public void test(){
    System.out.println(“test”);
    }

    params属性用来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理
    @RequestMapping(value="/test.action",params={“username”,“password”})
    public void test(){
    System.out.println(“test”);
    }

    headers属性用来限定当前请求中必须包含指定名称的请求才会被当前处理器处理
    @RequestMapping(value="/test.action",headers={“Host=localhost”,“User-Agent”})
    public void test(){
    System.out.println(“test”);
    }

  2. 处理器常用参数
    a.指定HttpServletRequest和HttpServletResponse接收和响应对象
    b.直接接收请求参数
    在这里插入图片描述在这里插入图片描述
    c.请求参数中文乱码问题,使用springMVC提供的过滤器解决全站乱码
    在这里插入图片描述
    最直接解决乱码问题:在tomcat中连接器配置来时tomcat默认采用指定编码处理请求参数
    在这里插入图片描述
    d.SpringMVC对RESTFul风格的请求的处理:
    普通get请求:
    Url:localhost:xx/hello.action/name=xm&age=18
    RESTFul请求:Url:localhost:xx/hello/xm/18.action
    在这里插入图片描述

  3. SpringMVC中的重定向和转发
    a.请求转发和重定向区别

转发重定向
请求转发是服务器内部的跳转请求重定向是浏览器自动发起对跳转目标
地址栏不发生变化地址栏发生变化
只有一个请求响应两次请求响应
可以通过request传递数据无法通过request传递对象

springMVC中实现转发和重定向:
在这里插入图片描述
4. @RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值