Spring MVC入门

来源:互联网 发布:linux 系统启动脚本 编辑:程序博客网 时间:2024/05/29 02:47

一阶段

1、Springmvc介绍

2、入门程序

3、Springmvc架构讲解

a)        框架结构

b)       组件说明

4、Springmvc整合mybatis

5、参数绑定

a)        Springmvc默认支持的类型

b)       简单数据类型

c)        Pojo类型

d)       Pojo包装类型

e)        自定义参数绑定

6、Springmvc和struts2的区别

二阶段

1、高级参数绑定

a)        数组类型的参数绑定

b)       List类型的绑定

2、@RequestMapping注解的使用

3、Controller方法返回值

4、Springmvc中异常处理

5、图片上传处理

6、Json数据交互

7、Springmvc实现Restful

8、拦截器

1.1  Springmvc是什么?

Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

入门程序

1.1  架构流程

1、  用户发送请求至前端控制器DispatcherServlet

2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、  处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、  DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、  执行处理器(Controller,也叫后端控制器)。

6、  Controller执行完成返回ModelAndView

7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、  ViewReslover解析后返回具体View

10、  DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、  DispatcherServlet响应用户

三、入门程序
    1、框架配置
        1)创建一个web工程
        2)配置前端控制器DispatcherServlet
        3)创建一个Springmvc的配置文件。
    2、查询商品列表,使用静态数据模拟。
        请求的url:list.action
        创建一个Controller相当于struts2的action类。
        方法一:
            Controller类需要实现Controller接口
        方法二:
            使用注解开发Controller
四、三大组件
    处理器映射器
        使用bean的name属性做url映射:
            org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
        使用注解形式的处理器映射器:
            org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping    已过期
            org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 推荐使用新版。
            可以在springmvc的配置文件中配置新版的处理器映射器。

    处理器适配器
        支持实现Controller接口的处理器适配器
            org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
        注解形式的处理器适配器
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter    已过期
            org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 推荐使用新版

        可以使用<mvc:annotation-driven/>(推荐)
    视图解析器
        支持jsp的视图解析器
        org.springframework.web.servlet.view.InternalResourceViewResolver
        在springmvc的配置文件中配置视图解析器
        ---------------------------------
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/WEB-INF/jsp/"/>
              <property name="suffix" value=".jsp"/>
          </bean>
          ---------------------------------
五、ssm框架整合
1、整合的思路
    dao层:
        mybatis:SqlMapConfig.xml,文件中可以不做任何配置。
        spring:applicationContext-dao.xml
            配置数据库连接池
            SqlSessionFactory
            Mapper文件扫描器
    Service层:
        配置事务
        扫描@Service注解的类
    表现层:
        springmvc的配置文件:
            配置包扫描器:扫描@Controller注解的类
            注解驱动
            视图解析器
    web.xml
        前端控制器
        配置初始化spring容器的listener
2、修改商品信息
    1)在商品列表页面点击“修改”链接跳转到商品信息页面
        a.需要商品id作为参数
        b.接收参数,根据商品id查询数据库
        c.把结果传递给jsp
    2)在商品信息页面把商品信息展示出来
    3)在商品页面点击修改把修改后的结果提交到后台

    (1)展示商品信息
    请求的url:/itemEdit
    参数:id
    返回值:ModelAndView

    ============================================
    直接在方法的形参中添加即可!
    1、springmvc默认支持的参数类型:
        HttpServletRequest
        HttpServletResponse
        HttpSession
        Model:相当于ModelAndView对象中的Model部分。view部分可以使用方法的返回值替代
    2、简单参数类型绑定
        int
        string
        Boolean
        float
        double
        如果是简单数据类型,只需要在方法的形参上添加一个参数即可。类型最好使用包装数据类型例如Integer、Float
        包装数据类型可以为null
        要求:方法形参的名称必须和请求参数的名称一致。

        如果参数名称不一致,应该改一致。
        或者使用@RequestParam注解解决
            name、value属性是等价的表示把那个参数映射到当前形参上。
            required属性:代表此参数是必须参数。如果没有此参数会报错。
            defaultValue:默认值
    ============================================
    (2)修改商品数据
    请求的url:/updateitem.action
    请求的方法:post
    参数:表单中的数据
        key就是input控件的name属性,value:就是input控件的值
        id=1&name=zhangsan&age=13

    Controller中可以使用方法的形参接收。
    在springmvc中可以使用pojo接收参数,要求pojo的属性和input控件的name属性一致。一般接收表单的数据推荐使用pojo接收

    post请求乱码怎么办?
    可以配置一个post乱码过滤器

    (3)包装pojo的绑定
    要求input的控件的name属性是“属性.属性”
    (4)自定义类型参数绑定
    如果日期类型做参数绑定时会出现“400”错误。因为日期类型绑定失败的原因。
    页面提交的数据全部都是字符串。框架不知道如何转换日期类型。日期格式不固定。
    需要解决日期类型的参数绑定:
        方案一:后台使用String接收日期,手动将字符串转换成日期类型。
        方案二:可以使用Springmvc提供的Converter实现类型转换

        使用方法:
        1、实现Converter接口。
        2、在实现类中实现字符串到日期类型的转换。
        3、在springmvc的配置文件中配置Converter。


第二阶段


三、高级参数绑定
1、需求:批量删除商品数据
思路:
方案一:在提交之前,使用js遍历表单中的checkbox,判断是否为选中状态,取选中的商品id,把id拼接成一个字符串,使用“,”分隔。把字符串放到一个hidden域中,随着表单的提交提交到服务端。
方案二:使用springmvc,默认支持数组的绑定。
    第一步:方法的形参中需要有一个数组类型的参数。或者pojo的属性有数组类型的属性
    第二步:jsp的checkbox的name属性和参数名称一致

2、需求:批量修改商品数据
    第一步:需要的参数是一个pojo类型的参数,pojo中需要有一个list类型的属性。
    第二步:input控件的name属性必须是itemList[0].id形式
    注意:绑定list参数必须是pojo的属性,方法的形参是不能成功绑定的。
四、@RequestMapping
作用:配置url映射关系
    value:默认就是value属性。属性是一个数组类型,可以配置多个url映射到一个方法上。
    method:支持的http方法。post、get、put、delete。。。如果不配置此属性,支持各种方法
    @RequestMapping:注解不仅可以加在方法上还可以加在Controller类上。可以出现多级目录。
                    窄化请求映射。
五、方法的返回值


 1)ModelAndView
    modelAndView.addObject("itemList",list);指定返回的页面的数据
    modelAndView.setViewName("itemList"); 指定放回的页面
 2)String (推荐使用)
    返回普通字符串,就是页面去掉扩展名称,返回给页面数据通过Model来完成

 3)返回void (使用它破会了SpringMVC的结构,不推荐使用) (不走SpringMvc 组件,所以要写 全路径)
    可以使用request,setAttribut 给页面返回数据
    可以使用request.getRquestDispatcher("页面名称  完整的页面路径名称").forward        (request,response).返回指定的页面.

    1、ModelAndView:包含模型数据和逻辑视图两部分。
    2、返回String:代表逻辑视图
        页面跳转:
            redirect:二次请求,url地址发生变化
            forward:一次请求,url地址不变。
    需求:更新成功后跳转到百度首页
        做redirect跳转
        return "redirect:http://www.baidu.com";
        // “/”是从工程名后开始的
        return "redirect:/items/list.action";

        forward必须是工程内部的url:
        不加“/”说明是相对路径是相对于当前url来说。如果加上“/”从不包含工程名的根目录找。
    3、void
        需要Request和Response对象
六、图片上传
    1、图片保存的位置:
        1)保存到磁盘的任意目录,可以保存到工程内部的一个文件夹。然后直接通过tomcat访问图片。
        2)放到工程外部。需要通过tomcat访问到目录。取目录下的文件。
    2、springmvc上传文件
        1)把commons-fileupload.jar、common-io.jar加到工程中
        2)在springmvc的配置文件中配置多部件解析器。
        3)需要在方法的形参中添加一个参数接收上传的文件。参数类型MultiPartFile,要求参数的名称和input控件的name属性一致。
        4)jsp的表单中需要加一个encType属性。
    3、接收到图片后的业务逻辑
        1)使用方法的形参接收图片
        2)生成新文件名可以使用uuid生成,取扩展名
        3)把图片保存到磁盘。
        4)把新文件名保存到数据库
七、发布服务
    restfu形式的服务。只是一个风格,不是标准也不是协议。本质上就是http。
    请求服务的url响应数据:数据格式可以是xml,json数据。传递数据都是使用json。

    1、json数据交互
        响应json数据。
        1)需要在方法上使用@ResponseBody注解。
        2)方法的返回值需要是一个pojo,就会自动转换成json数据。
        3)需要把Jackson的jar包添加到工程中。作用就是实现pojo到json的转换的。springmvc默认支持。

        案例:根据id查询商品数据,返回json数据格式。

        接收json数据:很少使用。
        一般服务端接收的数据格式:
            id=1&name=zhang&age=18&address=beijing
        一般ajax请求可以:需要在请求时设置Content-type
        {"id":"1","name":"zhang"}
        服务端接收到json转换成java对象。在参数前添加@RequestBody

    2、resuful,对http的诠释。
        1)资源定位
            通过url定位到资源。不需要参数。
            http://blog.csdn.net/beat_the_world/article/details/45621673
            url中没有后缀,没有参数。
            springmvc:@PathVariable注解可以从url取参数。
        2)资源操作
            使用http的方法实现资源的增删改查。put、delete、post、get(get:查询,post:增删改)
八、全局异常处理器
    1、实现HandlerExceptionResolver接口
    2、在接口的实现类中处理异常。
        写日志
        发邮件
        发短信
        展示错误页面
    3、配置全局异常处理器。
    系统中全局异常处理器只有一个。

    Controller:是一个类
    handler:handler就是Controller类中的方法
九、如果配置url拦截形式为“/”会拦截所有请求jsp除外。
    可以做资源映射
十、拦截器
    拦截请求,在执行handler之前先执行拦截器。一般做权限认证时使用。
    1、需要实现HandlerInterceptor接口。
    2、在springmvc中配置拦截器

     拦截器的执行顺序是按照配置顺序执行

     案例:用户登录处理
         1、登录页面
             展示登录页面
             登录处理
                 1)判断用户名密码是否正确
                 2)如果不正确,返回登录页面
                 3)如果正确把用户信息保存到Session
                 4)展示商品列表
         2、拦截器
             1)判断登录状态,判断Session中是否有用户信息
             2)如果有放行
             3)如果没有拦截,跳转到登录页面。
             4)如果判断是展示登录页面或者登录处理url直接放行。










原创粉丝点击