zoukankan      html  css  js  c++  java
  • SpringMVC

    SpringMVC入门

    1、什么是MVC?

      MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离,也就是责任分离。

    2、SpringMVC框架,

      它解决了WEB开发中常见的问题(参数接收、页面跳转 、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 (更安全,性能更好,更简单)。 支持 RESTful风格的 URL 请求 。 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

    3、Spring的前端控制器DispatcherServlet

      所有的请求都被该控制器统一处理,处理所有请求的共同操作。

    4、使用SpringMVC的流程

      第一步:搭建web项目,导入maven依赖spring-web spring-webmvc spring-context jstl servlet-api

      第二步:配置web.xml配置前端控制器,本质上是一个servlet

      第三步:处理器映射器、处理器适配器、视图解析器等都是框架已经写好的,在使用时会自动调用,不用配置

      第四步:开发和配置控制器Controller

      第五步:前端控制器关联SpringMVC配置文件

    5、流程详解

      第二步:web.xml配置前端控制器

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
    
      <!--配置前端控制器,本质上是一个servlet-->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联mvc.xml的配置文件-->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:mvc.xml</param-value>
        </init-param>
        <!--配置启动时自动加载-->
        <load-on-startup>2</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

      注:配置前端控制器后发现无法访问静态资源,如/index.html,为什么呢?

    •  因为Tomcat处理静态资源访问的servlet(defualt)的映射路径为 / 。在启动项目的时候,在Tomcat中的web.xml是先加载的,项目的web.xml是后加载的,如果配置了相同的映射路径,后面的会覆盖前者. 也就是说,SpringMVC中的DispatcherServlet的映射路径覆盖了Tomcat默认对静态资源的处理的路径。 如果SpringMVC要配置为/,那么就得设置Dispatcherservlet对静态资源进行支持。

        解决方式:在配置文件中添加对静态资源的访问<mvc:default-servlet-handler/>

    •  添加后将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 Tomcat默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet继续处理。 

       / 和 /* 的区别:

    • / 会匹配url请求/index等 ,也会匹配静态资源*.js,*.html等, 但不会匹配*.jsp文件。
    • /* 会匹配url请求/index等 ,也会匹配静态资源*.js,*.html等, 会匹配*.jsp文件。如果使用JSP,直接响应JSP代码,没有渲染.

      第三步:配置视图解析器,用来添加前后缀,会给返回的字符串添加上前后缀(下一篇博客中会用到)

    <!--视图解析器(前后缀控制器)-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/views/"/>
            <property name="suffix" value=".jsp"/>
    </bean>

      第四步:开发和配置Controller

    public class HelloController implements Controller {
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            System.out.println("Hello springMVC");
            ModelAndView mv = new ModelAndView();
            //设置跳转视图页面
            mv.setViewName("test");
            //将数据共享到前台页面,如果没有设置key值,则默认为数据类型的首字母小写的字符串
            mv.addObject("msg","你好!");
            mv.addObject(123);//这个就为integer
            return mv;
        }
    }
     <!--配置控制器-->
        <bean name="/hello" class="com.test._01_hello.HelloController"/>

    SpringMVC工作流程

    流程图

     流程分析

    1、用户发出请求到前端控制器DispatcherServlet

    2、前端控制器调用处理器映射器HandlerMapping

    3、处理器映射器通过查找xml配置或注解配置,生成处理器对象的执行链,返回给前端控制器

    4、前端控制器调用处理器适配器HandlerAdapter

    5、处理器适配器适配调用具体的处理器Controller

    6、Controller执行完成后返回ModelAndView对象

    7、处理器适配器将Controller的执行结果返回给前端控制器

    8、前端控制器将ModelAndView对象传给视图解析器View Resolver

    9、视图解析器将解析后的视图View返回给前端控制器

    10、前端控制器根据View进行视图渲染,即将模型数据填入页面中

    11、前端控制器将渲染完成后的视图响应给用户 

    涉及到的组件分析

    1、前端控制器DispatcherServlet

      不需要程序员开发,由框架提供,只需要在web.xml中配置

      作用:接收请求,响应结果,相当于转发器,中央处理器

    2、处理器映射器HandlerMapping

      不需要程序员开发,由框架提供

      作用:根据请求的url查找Handler处理器(Controller),可以通过xml和注解的方式来映射。

    3、处理器适配器HandlerAdapter

      不需要程序员开发,由框架提供

      作用:按照特定规则(HandlerAdapter要求的规则)去执行Controller

    4、控制器Controller

      需要程序员开发,按照HandlerAdapter的要求去做

      作用:接收用户请求信息,调用业务方法处理请求,也称之为后端控制器

    5、视图解析器ViewResolver

      不需要程序员开发,由框架提供

      作用:进行视图解析,把逻辑视图解析成真正的物理视图

    6、视图View

      需要程序员开发jsp等

      作用:把数据展现给用户,View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)。

    使用注解方式开发SpringMVC

    1、第一步:在SpringMVC的配置文件中配置注解解析器

      这里需要IoC的注解解析器和MVC的注解解析器

    <!--IoC注解解析器,需要配置扫描的包的路径-->
        <context:component-scan base-package="com.xxx.xxx"/>
    <!--mvc注解解析器
     会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter、ExceptionHandlerExceptionResolver三个bean。
    除此之外,还支持使用 ConversionService实例对表单参数进行类型转换.
    支持使用 @NumberFormat、@DateTimeFormat注解完成数据格式化操作.
    支持使用 @Valid注解对JavaBean实例进行JSR303验证. 支持使用 @RequestBody和@ResponseBody注解读写JSON.
    -->
    <mvc:annotation-driven/>

    2、第二步:贴四大标签

      控制层(Web) @Controller

      业务逻辑层(Service) @Service

      数据持久层(DAO) @Repository

      其他组件使用通用注解 @Component

      注意 :四个标签的功能一模一样,仅仅只是被贴的组件的类型不同,作用都是把被贴注解的类交给spring管理,相当于

      <bean id=”类简单名字,首字母小写” class=”类的全限定名称”/>

    3、@RequestMapping注解: 设置Controller方法的访问URL,不能重名。

     作用:

      一:URL路径映射(用于指定对应的url请求路径,value的值表示路径,路径通常以"/"开头,"/"可以省略。)

      二:窄化请求映射(可以标注在类中,用于窄化请求映射,此时访问资源的路径为:"/类的路径/方法的路径")

      三:请求方法限定(可以添加method属性,用于限定请求请求后台资源的方法)

    代码示例:

    @Controller
    @RequestMapping("/anno")
    public class AnnoController {
        @RequestMapping("/save,method=RequestMethod.POST")
        public ModelAndView save(){
            System.out.println("这是注解的方式");
            return null;
        }
        @RequestMapping("/update")
        public ModelAndView update(){
            System.out.println("这是注解的方式");
            return null;
        }
    }
  • 相关阅读:
    Java程序设计11——异常处理
    Hive安装及配置
    zookeeper集群安装(转)
    Linux网络服务管理命令
    Linux网络配置常用命令
    IP地址及子网掩码计算
    linux ftp、sftp、telnet服务开通、更改Orale最大连接数
    SQL多表连接
    用css伪类实现提示框效果
    关于DOM操作的性能优化
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11517209.html
Copyright © 2011-2022 走看看