zoukankan      html  css  js  c++  java
  • spring mvc 笔记

          

    springmvc

    课堂笔记

    1.Springmvc是什么

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

     

    1.1  Springmvc 架构图

     

    1、DispacherServlet前端控制器

    负责用户请求和响应,是一个中央控制器(调度),调用HandlerMapping查找Handler,调用HandlerAdapter处理器适配器执行Handler,调用ViewResolver视图解析器去解析视图,有了DispacherServlet有利于框架扩展,减少了各各组件之间耦合性。

    2、HandlerMapping处理器映射器

    不需要开发,使用框架提供的

    负责查找Handler(常用action),通过xml配置方式或注解方式将Handler类和request请求Handler链接地址进行对应配置。

    3、HandlerAdapter处理器适配器

    不需要开发,使用框架提供的

    Springmvc提供了很多种适配器,注解适配器支持注解开发、原始servlet适配器(HanderRequestAdapter)支持原始servlet的执行。

    负责执行Handler,适配器是按照一定的规则去执行Handler,调用Handler返回的结果是ModelAndView,ModelAndView将Model和view封装起来(模型数据和视图)

    4、ViewResolver视图解析器

    不需要开发,使用框架提供的

    负责进行视图解析,返回View,框架执行很多类型的View(jstlView、pdfView。。。)

    5、Handler处理器(需要开发)

    需要开发,按照适配器的规则开发,比如适配器要求Handler实现某个接口,Handler必须实现接口。

    6、View视图页面(jsp) (需要开发)

    需要开发,jsp+jstl。为了视图通用性建议使用第三方框架,jstl。

    处理器映射器、处理器适配器、视图解析器称为springmvc的三大件。

    HTTP 协议简介

    1.2  HTTP 简介/HTTP   SSL

    HTTP(Hypertext Transfer Protocol,超文本传输协议①)是在万维网上进行通信时

    所使用的协议方案。HTTP 有很多应用,但最著名的是用于Web 浏览器和Web 服

    务器之间的双工通信。

    1.3   HTTP报文

     

    报文组成

    起始行

    报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说

    明出现了什么情况。

    • 首部字段

    起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为

    了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首

    部字段和添加新行一样简单。

    • 主体

    空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括

    了要发送给Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起

    始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意

    的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含

    文本

    1.4  请求实例

     

    1.5   一些常见的HTTP方法

    GET 从服务器向客户端发送命名资源

    PUT 将来自客户端的数据存储到一个命名的服务器资源中去

    DELETE 从服务器中删除命名资源

    POST 将客户端数据发送到一个服务器网关应用程序

    HEAD 仅发送命名资源响应中的HTTP 首部

    1.6   HTTP状态码[11] 

    常见状态码

    200 OK。文档正确返回

    302 Redirect(重定向)。到其他地方去获取资源

    404 Not Found(没找到)。无法找到这个资源

    405 Method Not Allowed(不允许使用的方法)

    406 Not Acceptable(无法接受) 客户端可以指定一些参数来说明希望接受哪些类型的实体。服务器没有资源与客可接受的URL 相匹配时可使用此代码

     

    请求中有一个所请求的URI 不支持的方法。响应中

    应该包含一个Allow 首部,以告知客户端所请求的

    资源支持使用哪些方法

    状态码分类

    总体范围已定义范围类  别

    100~199 100~101 信息

    200~299 200~206 成功

    300~399 300~305 重定向

    400~499 400~415 客户端错误

    500~599 500~505 服务器错误

    1.7  与springmvc关系(struts2 请求的路径)

     

     

    处理器映射器:

    处理器适配器:使用下面的适配器

     

    通过上面代码可以看出,如果Handler实现了Controller接口,那么就可以完成执行工作。

    视图解析器

    如果在classpath下有jstl的jar包,那么就不需要配置如下内容

     

    第四步:编写Handler处理器(编写action)

    按照适配器要求的规则

    第五步:编写jsp视图页面

      注意:页面的名称要与返回的逻辑视图名一致

    第六步:启动tomcat运行工程

                        注解的方式:

    1.  Spring配置文件中的配置更改为

               

    <?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:p="http://www.springframework.org/schema/p"
         xmlns:mvc="http://www.springframework.org/schema/mvc"   
        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
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        
         
         
    <!--  这是非注解的配置 
        <context:component-scan base-package="org.springframework.samples.petclinic.web"/>
        <bean class=" org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        <bean name="/welcome.html" class="controller.WelcomeController" />
        -->
       <!-- 注解的配置-->
    <context:component-scan base-package="controller" /> <mvc:annotation-driven /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/WEB-INF/pages/" /> <property name="suffix" value=".jsp" /> </bean> </beans>

         

      :  要添加mvc配置

          1.

                xmlns:mvc=http://www.springframework.org/schema/mvc

         2.

                http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc.xsd

        3.

               <context:component-scan base-package="controller" />
                  <mvc:annotation-driven />

     2.如上配置后:

      在配置中的  Base-package 的Controller是src下的`包

        在这个包下的类,如设置了注解,就可以关联到:

         类的注解名:@Controller 

         导入

           

      方法的注解名: @RequestMapping(value=”/url”)

       url为:请求地址栏项目后边跟的地址

        导入

      

    例子们

      例:1 基本的

       

    @Controller
    public class HelloController {
      
        @RequestMapping(value="/hello")  
    public String show(){ System.out.println("hello ");   //返回的视图名 return "welcome"; }
    }

     该例中  @RequestMapping (value="/hello")的hello为请求的逻辑名

    http://localhost:8080/SpringOne/hello       //SpringOne是项目名

      return 一个视图名,一般是一个页面的名称.

         

    例子2:带参数的方法

      

        

    @Controller
    public class HelloController {
         //带参的 例子 
        @RequestMapping(value="/hello")
        public  String  show(@RequestParam(value="user") String user1){
            System.out.println("hello	"+user);
            //返回的视图名
            return "welcome";
        }
    }

     上面的例子是带参的方式:  其中的value="user" 跟请求地址栏的参数名一致   ,容器会把请求时传过来的参数赋给 user1

      // 如请求栏未传过来参数会报错   那么设置   equired=false;

        参数跟 方法的value  : /hello 一起拼成的是一个带参数的地址,换言之一个带参数的请求会被解析根据   /hello 找到方法  根据 (@RequestParam(value="user") 给参数赋值

     http://localhost:8080/SpringOne/hello?user=123      //这个是地址栏

    (@RequestParam(value="user") :可以不写

       例:

    @Controller
    public class HelloController {
      
        @RequestMapping(value="/hello")
        public  String  show(String user){
            System.out.println("hello	"+user);
            //返回的视图名
            return "welcome";
        }
    }

     // 这时要求 方法的参数的名称必须与请求栏的那个参数名一致    个人猜测:也许容器会把(@RequestParam(value="")的值默认为与public  String  show(String user)   的user
    //一致.

     例子3.  返回数据

        

    @Controller
    public class HelloController {
      
        @RequestMapping(value="/hello")
        public  String  show(String user,Model model){
            System.out.println("hello	"+user);
            //给model中添值
            model.addAttribute("user",user);
            //返回的视图名
            return "welcome";
        }
    }

     上边的例子都是返回一个视图名,并没有回传数据,但大部分时候是要传递数据的. Model是Spring默认的借口 往里添加数据,就可以在页面上得到.  //Model的类型  :Map  ;所以也可以直接用map

    视图(jsp)中:

       

        <!-- 用el表达式 -->
        <h1>welcome spring ! ${user}</h1>

    地址:

    http://localhost:8080/SpringOne/hello?user=123

    结果为:

    例4返回ModelAndView

      例:

      

    @Controller
    public class HelloController {
    
        @RequestMapping(value="/hello")
        public  ModelAndView list(){
            //存入的集合
            List<String> list =new ArrayList<String>();
            list.add("张三");
            list.add("李四");
            //创建一个ModelAndView对象
             ModelAndView mav=new ModelAndView();
             //添加视图名
             mav.setViewName("welcome");
             //添加数据
             mav.addObject("user",list);
             return mav;
        }
    }

      前边的是返回字符串,也可以返回ModelAndView

      用      mav.setViewName("welcome");   存要返回的视图(页面)名

     用       mav.addObject("user",list);  存数据

    还可以指定请求的方法类型  

    如:

      

    @RequestMapping(value="/hello",method=RequestMethod.POST)
        public  ModelAndView list(){
  • 相关阅读:
    Gin 使用 websocket
    7天用Go从零实现Web框架Gee教程
    docker-compose 搭建 Redis Sentinel 测试环境
    关闭禁用 Redis 危险命令
    Redis Cluster 设置密码
    使用 twine 上传自己的 python 包到 pypi
    Redis 5.0.7 讲解,单机、集群模式搭建
    Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析
    django 重写 mysql 连接库实现连接池
    编译安装httpd-2.4
  • 原文地址:https://www.cnblogs.com/xiangtianxiayu/p/5333246.html
Copyright © 2011-2022 走看看