zoukankan      html  css  js  c++  java
  • SpringMVC与请求控制器

    MVC设计模式

      视图(View)      -对应组件:JSP或者HTML文件

      控制器(controller) -对应组件:Servlet

      模型(Model)   -对应组件:JavaBean

      

     

    MVC优点 

      多视图共享一个模型,大大提高代码的可重用性

      MVC三个模块相互独立,松耦合架构

      控制器提高了应用程序的灵活性和可配置性

      有利于软件工程化管理

    MVC缺点 

      原理复杂

      增加了系统结构和实现的复杂性

      视图对模型数据的低效访问

    Spring MVC框架实现原理

    1. 发起请求到前端控制器(DispatcherServlet)
    2. 前端控制器请求HanderrMapping查找Handler(可根据xml配置,注解查找)
    3. 处理器映射器HandlerMapping向前端控制器返回Handler
    4. 前端控制器调用处理器适配器执行Handler
    5. 处理器适配器执行Handler
    6. Handler执行完成后给适配器返回ModelAndView
    7. 处理器适配器向前端控制器返回ModelAndView(SpringMVC底层对象,包含model和view)
    8. 前端控制器请求视图解析器进行解析(根据逻辑视图名解析真正的视图名(.jsp))
    9. 视图解析器向前端控制器返回View
    10. 前端控制器实行视图渲染(视图渲染将模型数据填充到request域中)
    11. 响应给客户端

    Spring MVC框架搭建步骤

      下载jar文件并导入工程

        

      配置文件->修改web.xml配置文件

    <!-- 配置核心控制器 DispatcherServlet -->

      <servlet>

            <servlet-name>springmvc</servlet-name>

            <servlet-class>

            org.springframework.web.servlet.DispatcherServlet

            </servlet-class>

    <!-- Springmvc默认加载Springmvc的配置文件,但是需要满足一下规则

    命名规则:servlet-name-servlet.xml==> springmvc-servlet.xml

    路径规则:springmvc-servlet.xml必须放在WEB-INFO下面-->

    <!-- 定义读取的applicationContext-mvc.xml文件 -->

             <init-param>

                <param-name>contextConfigLocation</param-name>  <param-value>classpath:applicationContext-mvc.xml

    </param-value>

           </init-param>

           <!-- 启动服务器即读取 -->

     <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

            <servlet-name>springmvc</servlet-name>

             <url-pattern>/</url-pattern>

    </servlet-mapping>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    创建Spring MVC的配置文件(注:跟配置读取mvc.xml必须一致)

      

    配置注解处理器映射器(mvc.xml文件配置)

    <!-- 配置注解的处理器映射器  寻找执行类 Controller -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

    配置注解处理器适配器(mvc.xml文件配置)

    <!-- 配置注解的处理器适配器 执行Controller -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

    开启指定目录注解扫描(mvc.xml文件配置)

       <!-- 开启注解扫描  cn.smbms替换controller所在包路径-->

    <context:component-scan base-package="cn.smbms"/>

    配置视图解析器(mvc.xml文件配置)

     <!-- 配置视图解析器  /WEB-INF/jsp/index.jsp-->

     <bean id="viewResolver"

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

            <!-- 配置前缀-->

            <property name="prefix" value="/WEB-INF/jsp/" />

            <!-- 配置后缀  -->

            <property name="suffix" value=".jsp" />

    </bean>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    控制层方法上添加@Controller注解,也可以@Controller("xxx/xxx/")添加路径前缀

    方法上添加@RequestMapping注解 

      RequestMapping(定义访问名)

        功能:请求映射

        写法:

          RequestMapping(“index”)  可以匹配任何的扩展名

          RequestMapping(“/index.do”)

          RequestMapping(value=“/index.do”)

          RequestMapping(value=“/index.do” method=RequestMethod.GET)

          RequestMapping(value=“/index.do” method=RequestMethod.POST)

        浏览器直接写url或者a标签都是GET请求

        一般情况下,如果使用from表单提交都是post请求,还有ajax请求指定post请求

    SpringMVC基于注解封装参数   

      根路径注解RequestMapper(“”) 是为了隔离不同的Controller里面相同的方法

      SpringMVC没有成员变量,把需要的参数对象放入方法中,当你请求这个方法时候,这个方法里面对象会自动被创建,需要封装的参数自动被封装方法的对象.

      提交表单:

        例:<form action="${pageContext.request.contextPath}/login" > 前面的参数是取得当前的绝对路径. 需要导入jsp-api包

        基本数据类型

       

        实体类

         

         包装类

          

        数组

          

        接收集合类型参数

          方法里面不能直接传递list集合和map集合类型参数,把list集合定义在包装类里面.

        List传递

          

         

        接收Map类型参数

        

    页面参数的回显

      Springmvc使用model对象,Model对象相当于application

      application对象中数据可以是el表达式进行获取

      

    URL模板映射

      主要是为请求restfull设计模式

      restfull软件架构设计模式:请求更简洁,更方便,更安全搜索引擎收录.

      普通修改数据

        <a ref="${pageContext.request.contextPath}/index/update.do?id=${user.id}">编辑</a>

        初识Restfull

        <a href="${pageContext.request.contextPath}/index/update/${user.id }.do">编辑</a>

        

        绝对实现Restfull风格

            

        如果在上面DispatcherServlet设置拦截权限为全局,则可绝对实现Restfull风格.

         例:设置全局拦截

          

          则请求默认实现Restfull风格

          

    RequestParam

      该注解可以给参数设置别名,设置默认值.

      内置属性:

        value=”属性别名”  设置参数属性别名,在页面使用别名进行传参.

         defaultValue=”默认值”,设置默认属性值,当无值传入时,传入默认值.

        required=”true(默认)” 请求中一定要有相应的参数,否则报400错误.

      

    转发和重定向

      forward:转发,不改变地址情况下的页面跳转

        return “forward: getList”;//相对路径

        

        return “forward:/index/ getList”;//根路径可随便指定已有的路径

        

      redirect:页面跳转,地址同步改变

        return "redirect:getList";//相对路径跳转

          

        return "redirect:/index/getList";//绝对路径重定向

           

    <mvc:annotation-driven />   spring3.0.x后默认使用了

    <mvc:annotation-driven />默认创建了处理器映射器和处理器适配器,还提供了json数据格式的支持

        

       

  • 相关阅读:
    js对象数组 根据某个共同字段 分组
    JS将数字转换成三位逗号分隔的样式
    js动态拼接参数到请求的url上
    在vue项目中 如何定义全局变量 全局函数
    vue-devtools的安装与使用
    原生js颗粒页换图效果
    css3爆炸效果更换图片轮播图
    css3高级运动keyframes
    grunt的使用方法,环境配置和插件安装
    js原生捕鱼达人(三)--完结
  • 原文地址:https://www.cnblogs.com/it-xiaoBai/p/10815476.html
Copyright © 2011-2022 走看看