zoukankan      html  css  js  c++  java
  • SpringMVC高级课程

    requestBodyresponseBody

      requestBody把前台页面传递JSON格式数据强制转换JavaBean

      responseBody在后台把javabean转换成JSON格式的数据返回页面

      这两个注解不能直接使用,需要导入依赖Jackson的jar

    <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-core</artifactId>

            <version>2.9.2</version>

          </dependency>

     

          <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.9.2</version>

          </dependency>

    配置JSON格式的转换

      在适配器设置对JSON数据格式的支持(注:使用<mvc:annotation-driven />则不用配置)

      

      如果在web.xml配置的DIspatcherServleturl-patten”/”,意味着所有请求(包括静态资源)都被映射到DIspatcherServlet,为了正确处理资源,需要在Spring MVC配置文件添加resources元素

        例:配置才<mvc:resources>能引入js文件

         

      请求JSON响应JSON

        Controller部分代码如下:

        

        jsp页面部分代码如下:

        

      请求POJO响应JSON

        Controller部分代码如下:

        

        jsp页面部分代码如下:

        

    使用FastJson进行JSON处理

      

    引入jar

      fastjson-x.x.xx.jar

    请求页面参考:   

      $.ajax({

        url:path+””,      //请求的url

        type:”post/get”,

        data:{xx:xx},            //请求参数

        dataType:”json”,    //请求返回的数据类型

        success:function(data){    //data:返回的json对象

        }

      })

    controller页面参考:

      @RequestMapping(“xxx”)

      @ResponseBody

      public Object userById(Integer id){

        User user = userService.getUserById(id);

        //将数据转换为JSON对象

        String myjson = JSON.toJSONString(user);

        return myjson;

      }

      解决JSON数据传递的日期格式问题

        在pojo时间属性上添加 @JSONField(format=”yyyy-MM-dd”)

        @DateTimeFormat(patterns=”yyyy-MM-dd”)

    配置全局异常处理

       <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

                  <property name="exceptionMappings"> //植入该类的内置参数

                         <props>

                         <!-- 定义自定义异常类,可以定义多个异常并设置异常逻辑视图名-->

            <prop key="java.lang.RuntimeException">error(逻辑视图名)</prop>

                         </props>

                  </property>

           </bean>

      在逻辑视图页面使用${exception.message } 获取异常信息

    SpringMVC表单标签

      Spring提供的轻量级标签库

      可以在JSP页面中渲染HTML元素的标签

      用法:

        必须在JSP页面的开头声明taglib指令

        <%@ taglib uri=”http://www.springframework.org/tags/form” prefix=”fm”%>

        引入标签声明之后使用Spring表单标签

         

          

              

        

    服务器端的数据效验

      利用Spring自带的验证框架

      利用JSR 303实现

      Java为Bean数据合法性效验所提供的标准框架

      Spring MVC支持JSR 303标准的效验框架

      JSR 303通过Bean属性上标注效验注解指定效验规则,并通过标准的验证接口对Bean进行验证:http://jcp.org/en/jsr/detail?id=303

      Spring本身没有提供JSR 303的实现

      实现者:Hibernate Validator  http://hibernate.org/validator

       

    实现步骤:

      加入jar文件

       

      修改POJO   

        给bean需要验证的属性增加相应的效验注解

        

        

           

      页面显示:

            

    SpringMVC单文件上传

      MultipartResolver接口

        用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而实现操作.

      两个实现类

        StandardServletMultipartResolver

          使用了Servlet3.0标准的上传方式

        CommonsMultipartResolver

          使用了Apache的commons-fileUpload来完成具体的上传操作

      实现步骤:

        1.导入jar文件

          

          commons-lang-x.x.jar; 获取系统随机数(可忽略)

          模拟开发跨服务器上传文件时使用的包

          

        Mavne代码:

    <dependency>

            <groupId>commons-io</groupId>

            <artifactId>commons-io</artifactId>

            <version>2.4</version>

          </dependency>

          <dependency>

            <groupId>commons-fileupload</groupId>

            <artifactId>commons-fileupload</artifactId>

            <version>1.3.1</version>

    </dependency>

    <-- 跨服务器上传maven -->

    <dependency>

        <groupId>com.sun.jersey</groupId>

        <artifactId>jersey-client</artifactId>

        <version>1.19</version>

    </dependency>

    <dependency>

        <groupId>com.sun.jersey</groupId>

        <artifactId>jersey-core</artifactId>

        <version>1.19</version>

    </dependency>

      

     

     

     

     

     

     

     

     

     

      2.配置MultipartResolver(springmvc-servlet.xml)

        使用CommonsMultipartResolver配置一个MultipartResolver解析器

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- 配置上传文件大小上限,单位为字节 -->

          <property name="maxUploadSize" value="5000000"></property>

    <!-- 配置请求编码格式,默认为ISO-8859-1 -->

    <property name="defaultEncoding" value="UTF-8"></property>

    </bean>

      3. 编辑文件上传表单页

        设置上传方式 method=”post”,enctype=”multipart/from-data”;

        编写上传文件的input type=”file” name=”设置文件传输name” 

      4. 编写控制器,处理方法

        编写接收添加方法接收文件

        参数为:xxx (@RequestParam(value=”设置文件传输name”) MultipartFile picture);

        定义文件路径

        String idPicPat = null;

        判断文件是否为空:file.isEmpty()

        设置储存路径:(地址使用自适应路径分隔符)

        String path = requrest.getSession().getServletContext.getRealPath(“statics”+  File.separator + “uploadfiles”);

        获取原文件名

        String oldFileName = picture.getOriginalFilename();

        获取文件后缀

        String prefix = FilenameUtils.getExtension(oldFileName );

        获取上传文件大小进行判断

        int fileSize =  5000000; picture.getSIze();获得文件上传大小,进行判断

        不符合则返回页面并添加提示信息

        判断文件后缀是否符合图片格式

        prefix.equalsIgnoreCade(“jpg”) || prefix.equalsIgnoreCade(“jpeg”) ||

        prefix.equalsIgnoreCade(“png”) || prefix.equalsIgnoreCade(“pneg”) ||

        不符合则返回页面并添加提示信息

        设置文件名

        StringBuffer sb = new StringBuffer();

                  //获取事件至毫秒

                  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

                  sb.append(sdf.format(new Date()));

                  Random rd = new Random();

                  for (int i = 0; i < 3; i++) {

                         sb.append(rd.nextInt(8));

                  }

        String fileName = sb.toString()+”_picture.jpg”

        创建新文件对象

        File targetFile = new File(path,fileName );

        判断文件夹是否存在

        if(!targetFile.exists()){

          //没有则自动创建

          targetFile.mkdirs();

        }

        //上传->接收用户对象上传的文件流进行保存

        picture.transferTo(targetFile);

        //传入到数据库的绝对路径

        idPicPath = path+File.separator+fileName;

        

    多文件上传采用数组接收,循环迭代即可 

    如果是跨服务器上传参考:使用jersy实现跨服务器上传

  • 相关阅读:
    idea启动tomcat服务失败
    500错误 javax.servlet.ServletException: javax.naming.NameNotFoundException: Name [happy] is not bound in this Context. Unable to find [happy].
    idea启动tomcat服务失败 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild:
    浅谈注解式开发
    PTA编程总结3
    PTA编程总结2
    PTA编程总结1
    秋季学期学习总结
    Git简明教程
    Linux常用软件安装
  • 原文地址:https://www.cnblogs.com/it-xiaoBai/p/10815572.html
Copyright © 2011-2022 走看看