zoukankan      html  css  js  c++  java
  • SpringMVC(一) —— 入门

    SpringMVC原理图

        

    步骤:

    1. 首先用户发送请求。——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制。
    2. DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,使用了策略模式。
    3. 前端控制器调用适配器去执行Handler。DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用。
    4. 处理器适配器去执行handler。HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名)。
    5.  前端控制器请求视图解析器去进行视图的解析。ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,再次使用策略模式。

    6. 前端控制器对视图进行渲染。 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,所以其很容易支持其他视图技术。

    7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。(图中的连线有错,偷懒没有改过来)。

    组件介绍:

    • 前端控制器(DispatcherServlet):接收请求,响应结果。
    • 处理器映射器(HandlerMapping):根据url去查找handler。

    • 处理器(Handler):(这个是我们自己写的)。
    • 处理器适配器(HandlerAdapter):要求我们按照这个规则去写。

    • 视图解析器(ViewResolver):把逻辑视图解析成真正的视图。真正的视图=前缀+逻辑视图名+后缀

    • 视图(View):需要用户自己开发。

    一.基于注解的HelloWorld

      1.导入jar包

        

      2.在web.xml文件中配置一个前端控制器(DispatcherServlet)

    web.xml

     1 <servlet>
     2     <servlet-name>dispatcher</servlet-name>
     3         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     4         <!-- 
     5             默认的配置文件的地址:/WEB-INF/servlet的名字-servlet.xml,如需另外指定
     6             <init-param>
     7             <param-name>contextConfigLocation</param-name>
     8             <param-value>classpath:文件名</param-value>
     9             </init-param>
    10         -->
    11 </servlet>
    12 <servlet-mapping>
    13 <servlet-name>dispatcher</servlet-name>
    14     <!-- 
    15         第一种:*.html,*.action 就是过滤以.xxx结尾的
    16         第二种:/  所有的地址都会进入这个进行解析,静态的资源,需要添加配置
    17         第三种:/* 他就是变态,连jsp页面都进来,结果就是报错XXXXX别用
    18     -->
    19     <url-pattern>/</url-pattern>
    20 </servlet-mapping>

      3.配置处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter),视图解析器(ViewResolver)

    dispatcher-servlet.xml

    1 <!-- 处理器映射器 -->
    2 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    3 <!-- 处理器适配器 -->
    4 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
    5 <!-- 配置ViewResolver -->
    6 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    7     <property name="prefix" value="/WEB-INF/jsp/"></property>
    8     <property name="suffix" value=".jsp"></property>
    9 </bean>

    其实,上面我们说的处理器适配器(HandlerAdapter)和处理器映射器(HandlerMapping)在这里可以不用配置,因为SpringMVC会默认加载这些配置。

    采用默认的注解驱动:<mvc:annotation-driven/>, 默认的注解驱动,里面有很多参数绑定的方法 。

    用注解我们不可以一个个去扫描Handler,所以采用组件扫描的方式:

    <context:component-scan base-package="com.test"></context:component-scan>

    HelloWorld.java

     1 package com.test.controller;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.web.bind.annotation.RequestMapping;
     8 import org.springframework.web.bind.annotation.RequestMethod;
     9 import org.springframework.web.servlet.ModelAndView;
    10 
    11 @Controller
    12 @RequestMapping(value = "/hello")
    13 public class HelloWorld {
    14     @RequestMapping(value = "/hello")// 就是访问的路径
    15     public ModelAndView hello() {
    16         Map<String, String> map = new HashMap<String, String>();
    17         map.put("name", "傻逼");
    18         ModelAndView mv = new ModelAndView("hello", map);
    19         return mv;
    20     }
    21 
    22 }

     至此,基本的配置就完成了。

    下面再来介绍一下几个基本的注解:

    1. @requestMapping()——基本的url映射
    • 窄化映射请求(可以在类上面定义根路径,在方法上面定义子路径),此时你访问的路径就是:根路径+子路径。
    • 显示http请求的方法:@requestMapping(value="/user",method="{RequestMethod.POST}")。限制后的出错信息:

      2.@Controller

        方法返回值的讨论:

      • 返回ModelAndView:返回一个逻辑视图名和数据放在request中。
      • 返回String:
        • 返回一个逻辑视图名。
        • 重定向:return "redirect:路径"
          1 @RequestMapping(value = "/index")
          2 public String index() {
          3     return "redirect:hello";
          4 }
        • 请求转发:return "forward:路径"。类比Servlet中的request.getRequestDispatcher("/WEB-INF/jsp/xxx.jsp").forward(request, response);
      • 返回void:(此时用法和servlet一样)
        1 public void test_void(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        2         request.getParameter("");
        3         request.getRequestDispatcher("").forward(request, response);
        4     }
  • 相关阅读:
    gulp常用插件之gulp-plumber使用
    gulp常用插件之gulp-load-plugins使用
    gulp常用插件之yargs使用
    ql自动化测试之路-概述篇
    ql的python学习之路-day11
    ql的python学习之路-day10
    ql的python学习之路-day9
    python实现简易工资管理系统(Salary Manage)源码
    python控制台实现打印带颜色的字体
    ql的python学习之路-day8
  • 原文地址:https://www.cnblogs.com/hcdychen/p/5820117.html
Copyright © 2011-2022 走看看