SpringMvc-初次搭建、介绍和基础案例

一,mvc做的事情,什么是MVC模式?

  1. 将url映射到java类或者java的方法。
  2. 封装用户提交的数据
  3. 处理请求--调用相关的业务处理--封装想相应的数据
  4. 将相应数据进行渲染,jsp或者html
  5. MVC模式指的是:Model(模型数据) + View(视图) + Controller(控制层)的缩写。

二,Spring mvc是一个轻量级的,基于请求响应的mvc框架。

三,为什么要学mvc

  1. 性能比struts2好,开发效率高,性能不高
  2. 简单,便捷,开发简单
  3. 天生和spring无缝集成,核心功能(ioc和aop)
  4. 使用约定优于配置
  5. 能够进行简单的junit测试
  6. 支持restful风格
  7. 异常处理
  8. 本地化
  9. 数据验证,类型转换等
  10. 有拦截器

SpringMVC 工作流程

  1. 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
  2. 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
  3. HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
  4. DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
  5. 执行处理器
  6. 处理器会返回一个ModelAndView对象给HandlerAdapter
  7. 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
  8. 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
  9. 返回视图对象到前端控制器。
  10. 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
  11. 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。

核心组件说明

1、DispatcherServlet:核心前端控制器

2、HandlerMapping:Controller映射器

3、HandlerAdapter:Controller适配器

4、ViewResolver:视图解析器

  • DispatcherServlet:前端控制器

    • 接收用户请求,响应结果,相当于中央处理器,DispatcherServlet是整个流程控制的中心。

  • HandlerMapping:处理器映射器

    • 理解为一个Map<url,Handler>,HandlerMapping负责根据用户请求的Url找到Handler即处理器。

  • HandlerAdapter:处理器适配器

    • 适配handler

  • ViewResolver:视图解析器

    • ViewResolver进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址生成View视图对象。

  • Handler:处理器

    • 在SpringMVC当中有两层意思:Controller或者Controller当中的方法,处理具体业务请求。

  • View:视图

    • SpringMVC框架提供了很多的View视图类型的支持,包括:jsp、freemarker、Thymeleaf..等。我们最常用的视图就是jsp

需要我们开发的只有controller(handler)和view

初级配置

springmvc.xml

<?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: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
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启注解扫描-->
    <context:component-scan base-package="com.spring"/>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--注意:当前web.xml配置文件的头部约束必须写!!!-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

controller

@Controller
@RequestMapping("app1")
public class HelloController {

    @RequestMapping("hello")
    public ModelAndView getHello(ModelAndView modelAndView) {msg。
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(new Date());
        modelAndView.setViewName("/msg.jsp");
        modelAndView.addObject("time", format);
        modelAndView.addObject("msg", "这里是app1/hello.do");
        return modelAndView;
    }
}

msg.jsp

<html>
<head>
    <title>入门案例</title>
</head>
<body>
<%--取出ModelAndView中的当前系统时间--%>
<p>当前系统时间:  ${time}</p>
<p>消息:  ${msg}</p>
</body>
</html>

视图解析器配置

概念:

  • 物理视图名称:真实存在的路径地址

  • 逻辑视图名称:不存在的路径地址,由视图解析器拼接完成

作用:

  • 渲染jsp页面中的内容,渲染结果是HTML

  • 提供内部资源(jsp页面)路径名称的拼接,提高代码的可维护性!

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置逻辑视图名称的前缀-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <!--配置逻辑视图名称的后缀-->
    <property name="suffix" value=".jsp"/>
</bean>

 

posted @ 2019-10-08 20:41  一半人生  阅读(170)  评论(0编辑  收藏  举报