A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-8-30 21:17 编辑

石家庄校区】就业班_JavaEE_SpringMVC

一 概述
        springmvc是spring的一个模块,spring和springmvc 都会初始化上下文,相当于初始化二个容器。spring初始化的是父容器,springmvc初始化的是子容器 。
        父容器不能访问子容器中的bean ,子容器可以访问父容器中的bean,一般通过spring容器来初始化service和dao   通过springmvc来初始化controller 。 事务则在spring容器中来实现。
        
二 mvc
        mvc是一种设计模式,既可以用在c/s模式中,也可以用在b/s模式中。mvc模式在web项目中的应用:
        c:控制器  struts2中的strutsprepareandexecutionfilter  , springmvc中的dispatcheservlet
        v:view    jsp freemarker excle pdf 等
        m:模型    service dao

三 springmvc原理
        dispatherservlet 前端控制器   处理请求和响应
        handlermapper   处理器映射器  接收请求uri  查找controller
        handleradpater  处理器适配器  定位controller中的方法 执行handler 并返回modelandview
        viewresolver    视图解析器    将modle中的数据封装到jsp中 ,并返回view

四 spring注解开发
        @controller
        @requestmapping
        该注解可以用在方法上 也可以用在类上  该注解的二个属性  value 表示请求路径  method  表示请求方式的限定 如果不指定则get和post都可以。
        注解开发会去扫描@controller下的@requestMapping中的value来匹配url
        mapper包扫描

五 springmvc参数绑定
        1 属性封装  在handler方法中 通过形参来接收  形参的名称要与页面中的name属性名称相同  
                当前台页面和handler方法中形参名称 不一致时,可以通过@RequestParam 来显示指定绑定
                @RequestParam 中 value属性表示【指定请求参数中的名称】   required属性表示【是否必须】  defaultvalue属性表示【默认值】
        2 模型封装  在handler方法中 通过pojo对象来封装,该方法适用于参数比较多时。 页面中的name属性名称要与pojo中的属性名称一致
        3 表达式封装   在handler方法中 , 通过pojo对象来封装, 对于pojo中包含的pojo对象,在页面中通过user.name 这样的形式来传参
        4 传递数组
                a 在handler方法的形参上直接用String[]  ids 进行接收。
                b 用pojo类包装String[] ids 进行接收。
        5 传递list
                a 只能用pojo类包装List<Item> list 进行接收。步骤如下
                        1. 在后台定义一个pojo类包装list , 在handler方法中用包装的pojo进行接收参数
                        2. 前台表单中name的定义  user.contactList[x].telephone 七 全局异常处理
        1 自定义全局异常处理器 实现handlerexceptionresolver接口
        2 在springmvc配置文件中 配置该异常bean
        异常处理思路,业务层的异常由业务层抛出,其它都有web层抛出,最终抛给distpatcherserlvet,调用我们自定义的全局异常处理类做统一处理。


六 handler方法返回值
  1 modelandview
  2 void 通过response进行响应
  3 字符串

七 全局异常处理       
       1 自定义全局异常处理器 实现handlerexceptionresolver接口
        2 在springmvc配置文件中 配置该异常bean
       异常处理思路,业务层的异常由业务层抛出,其它都有web层抛出,最终抛给distpatcherserlvet,调用我们自定义的全局异常处理类做统一处理。     

八 springmvc文件上传
   1 导包 fileupload    io
   2  springmvc配置文件解析器类
   <!-- 文件上传 -->
        
[Java] 纯文本查看 复制代码
<bean id="multipartResolver"
                class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <!-- 设置上传文件的最大尺寸为5MB -->
                <property name="maxUploadSize">
                        <value>5242880</value>
                </property>
        </bean>

   3 后台handler中通过MultipartFile 来接收上传的文件
      该类提供二个方法:
          getOriginalFilename() 得到上传文件的名称
          transferTo(File 上传文件在服务器端存放的文件名) 相当于将上传的临时文件进行拷贝
        4 可以通过配置tomcat的虚拟路径来模拟图片服务器


九 springmvc对json的支持
   1 spring支持json需要导入jackson的jar包支持。
   2 使用<mvc:annotation-driven /> 方法 不用配置json的适配器

        请求参数  @requestbody  只能用在方法参数上
    响应结果  @responsebody  可以用在方法上也可以用在类上。 用来类上相当于所有方法上都进行了配置
        // 商品修改提交json信息,响应json信息
      
[Java] 纯文本查看 复制代码
 @RequestMapping("/editItemSubmit_RequestJson")
        public @ResponseBody Items editItemSubmit_RequestJson(@RequestBody Items items) throws Exception {
                System.out.println(items);
                //itemService.saveItem(items);
                return items;
        }


十 restful支持
        1 restful是一种编程风格,主要体现在二个方面:
                a 资源定位【uri表示网络上的一种资源,没有参数,用名词表示】
                b 资源操作【get post delete put】get 表示查询  put表示修改  post 表示添加  delete表示删除
         
        2 如果springmvc要支持restful风格,需要修改webxml中的 *.action 为 /
                 <servlet-mapping>
                        <servlet-name>springmvc-servlet-rest</servlet-name>
                        <url-pattern>/</url-pattern>
                </servlet-mapping>
        需要注意:/* 表示拦截jsp  / 不拦截jsp   如果配置为/*拦截jsp,则会找不到对应的handler,会报404错误。
        
        3 请求单一参数
                前台请求:
               
[Java] 纯文本查看 复制代码
 /item/viewItems/1
                后台处理:
                @RequestMapping("/viewItems/{id}") 
                public @ResponseBody viewItems(@PathVariable("id") String id,Model model) throws Exception{
                        //方法中使用@PathVariable获取useried的值,使用model传回页面
                        //调用 service查询商品信息
                        ItemsCustom itemsCustom = itemsService.findItemsById(id);
                        return itemsCustom;
                }

        4 请求多个参数
          前台请求url:'${pageContext.request.contextPath }/testjson/1/zhangshan'
          后台处理:
          @RequestMapping(value="testjson/{id}/{name}")
          @PathVariable("id") Integer id,@PathVariable("name") String name

        5 当使用/配置时,将对静态资源也进行拦截,需要配置放行。
          <mvc:resources location="/js/" mapping="/js/**"/>
          location表示静态资源在服务器端真实路径     mapping表示静态资源在页面中的引用地址。/** 二个* 表示包含js下的子文件夹。


十一 拦截器
        Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对handler进行预处理和后处理。
        拦截器都实现HandlerInterceptor接口。
        preHandle                   方法执行时机:handler执行前,
        postHandle                  方法执行时机:handler执行中,handler执行但未返回视图前
        afterCompletion          方法执行时机:handler执行后,handler执行后且视图返回
        拦截器执行顺序总结:
                preHandle按拦截器定义顺序调用
                postHandler按拦截器定义逆序调用
                afterCompletion按拦截器定义逆序调用
                postHandler在拦截器链内所有拦截器返成功调用
                afterCompletion只有preHandle返回true才调用


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马