SpringMVC介绍

SpringMVC

1、什么是SpringMVC
Spring mvc 是spring框架的一个模块
Spring mvc 是一个基于mvc的web框架
MVC是一个设计模式

2、MVC模式
SpringMVC是基于MVC的一个web框架,是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合。
(1) 视图(View)代表用户交互界面,对于Web应用来说,可以是HTML,也可能是jsp、XML和Applet等。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理

(2) 模型(Model):是业务的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性。业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

(3) 控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。
例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。

3、SpringMVC的工作流程
这里写图片描述

五大组件:前端控制器,处理器映射器,处理器适配器,Handler(Controller),视图解析器

dispatcherServlet :前端控制器,主要作用就是转发
请求发过来,前端控制器收到(捕获),但处理不了。需要调用handler处理请求,但前端控制器不知道该调用哪个方法,所以调用HandlerMapping查询该调用哪个handler

HandlerMapping:处理器映射器
告诉前端控制器 该去找谁,前端控制器没法直接调用方法。

HandlerAdapter:处理器适配器
负责调用哪个方法,专门执行Handler

Handler返回一个ModelAndView对象给HandlerAdapter ,ModelAndView对象的作用就是存放一些信息,这些信息可在前端页面提取出来并显示。

HandlerAdapter 再返回给前端控制器

视图解析器(渲染视图),前端控制器再把ModelAndView给视图解析器,解析出来之后再返回给前端控制器,前端控制器再返回给用户

流程
(1) 发起请求到前端控制器
(2) 前端控制器请求处理器映射器(HandlerMapping)查找handler
(3) 处理器映射器向前端控制器返回handler
(4) 前端控制器调用处理器适配器执行handler
(5) 处理器适配器执行handler
(6) Handler执行完毕给处理器适配器返回modelAndView
(7) 处理器适配器向前段控制器返回modelAndView
(8) 前端控制器请求试图解析器进行试图解析
(9) 试图解析器给前端控制器返回view
(10) 前端控制器进行试图渲染
(11) 前端控制向用户响应结果

4、入门程序(java)

(1) 导入jar
这里写图片描述
(2) 配置前端控制器(在web.xml中)
这里写图片描述
(3) 配置处理器映射器(在springmvc.xml)
这里写图片描述
(4) 配置处理器适配器(在springmvc.xml)
这里写图片描述
(5) 配置试图解析器(在springmvc.xml)
这里写图片描述
(6) 编写handler(这里继承了Controller)
这里写图片描述
(7) 配置handler(在springmvc.xml中配置自己编写的handler)

<bean name="/findStudent.do" class="com.zb.controller.StudentController"/>

(8)代码特点:

Handler(controller)中普遍会写:

ModelAndView mv = new ModelAndView();
mv.addObject(“slist”,list);//类似于request.setAttribute()
mv.setViewName(“jsp的相对路径”);//显示到jsp页面上

jsp页面可提取其中的数据:
例如:

<c:forEach items="${slist }" var="student">

5、注解编程
非注解方式存在的问题:
非注解方式的Handler要实现了一个controller接口,这样的话,它里面只能有一个方法)
使用注解方式就可以避免这个问题
定义一个类,在类名上写@Controller 。表明这是一个controller
定义方法 返回类型为ModerAndView 在这个方法上 标注 RequestMapping(“/findStudent.do”)
举例:

@Controller    //使用@Controller注解   表示这个类是一个controller类
public class StudentController2 {

    //查询学生信息
    @RequestMapping("/findStudent.do") //uri//方法名与uri名字一样,好维护
    public ModelAndView findStudent() {
List<Student> list = new ArrayList<>();

        //查询学生信息
        Student s1 = new Student();
        s1.setId(1);
        s1.setName("张三");
        s1.setAge(18);
        s1.setClass_id(10);

        Student s2 = new Student();
        s2.setId(2);
        s2.setName("张四");
        s2.setAge(19);
        s2.setClass_id(11);

        Student s3 = new Student();
        s3.setId(3);
        s3.setName("张五");
        s3.setAge(20);
        s3.setClass_id(12);


        list.add(s1);
        list.add(s2);
        list.add(s3);

        ModelAndView mv = new ModelAndView();
        mv.addObject("slist",list);//类似于request.setAttribute()
        mv.setViewName("/WEB-INF/jsp/student.jsp");//显示到jsp页面上
        return mv;
    }
}

有了注解之后,springmvc.xml中也需要改
(1) 不需要配置Handler
(2) 不需要配置处理器适配器
(3) 不需要配置处理器映射器
保留视图解析器
额外要添加:mvc注解驱动和注解扫描

    <!-- mvc注解驱动 -->
    <!-- mvc注解驱动可以代替上面注解映射器和注解适配器,他默认加载很多参数绑定方法,实际开发就使用这种方式 -->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!-- 批量扫描 -->
    <context:component-scan base-package="com.zb.controller"></context:component-scan>

6、视图解析器前后缀配置
在Handler中,如果返回类型为ModelAndView,则需要写下面这句话:

mv.setViewName("/WEB-INF/jsp/student.jsp");//显示到jsp页面上

问题:可不可以直接写student.jsp或者student?
答案是可以的。只需要在视图解析器配置改为下面代码即可。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
</bean>

注意事项:(提醒自己)
(1) db.properties 内容不能有空格
(2)SSM整合时,所需要建的包:entity、Handler、Service(利用dao层,来实现一定功能的服务层)、Mapper(dao层)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值