Springmvc关于图片上传,json数据,拦截器案例的详解

图片上传

  1. 第一步上传图片的表单表达是如下,注意一下几点 enctype=”mulitipart/form-data” 提交方式为post
<form id="itemForm"
        action="${pageContext.request.contextPath }/updateitem.action"
        method="post" enctype="multipart/form-data">
            <input type="file"  name="pictureFile"/> 

2.在cotroller中建立一个方法用于图片上传:注意:一定要有MultipartFile类型的参数 pictureFile 而且一定要注意参数值一定要保证是pictureFile.同时在springmvc.xml文件中建立一个对MultipartFile的实例化bean对象。

@RequestMapping(value = "/updateitem.action")
    public String updateitem(QueryVo vo, MultipartFile pictureFile) throws IllegalStateException, IOException {
        // 保存图片d:upload
        String name = UUID.randomUUID().toString().replace("-", "");
        // 获取 后缀名
        String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
        //保存文件至指定的目录。
        pictureFile.transferTo(new File("D:\\pic\\" + name + "." + ext));
        //将文件名称保存进数据库
        vo.getItems().setPic(name + "." + ext);
        itemservice.updateItem(vo.getItems());
        //重定向到该页面
        return "redirect:/item/toEdit.action?id=" + vo.getItems().getId();
    }

配置上传图片的实例对象

<!-- 配置上传文件实现类 name属性的值一定要是这个值负责,在容器中找不到这个对象 -->
    <bean name="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 最大上传大小 -->
        <property name="maxUploadSize" value="5000000"></property>
    </bean>

Json数据

json数据通过Ajax请求到服务器然后回调到页面
**1.首先要引入jQuery
2.通过书写ajax代码来发送json字符串,这里有一个标准而且严格的数字方式。**

    $(function() {
                    //alert("a");
                    //声明一个json字符串。
                    var param = '{"id":1,"name":"测试商品信息","price":660,"detail":"测试商品描述","pic":"123456.jpg"}';
                        $.ajax({
                            url : "${pageContext.request.contextPath }/json.action",
                            data : param,
                            contentType : "application/json",
                            type : "post",
                            dataType : "json",//回调
                            success : function(data) {
                            //下边这是回调内容代码
                                alert(data.name);
                            }
                        });
                    });

3.通过在控制器中接受所发送的数据。
//其中有方法返回至而且加上了@ResponseBody 这时对json字符串的回调。通过return返回对象,通过该注解可以将对象转换成json格式字符串,我们可以在前台页面重新获得json字符串数组。
@RequestBody这是接收的请求对象将json数组转换为Items对象。
//json字符串的形参

    @RequestMapping(value = "/json.action")
                public @ResponseBody Items json(@RequestBody Items items) {
                    System.out.println(items.getName());
                    return items;
                }

使用Springmvc拦截器

  1. 首先建立一个类实现HandlerInterceptor接口。
package com.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Intrceptor1 implements HandlerInterceptor {
    // 拦截之前
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("拦截器一前");
        //返回true即可放行,否则不能通过
        return true;
    }

    // 页面渲染
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("拦截器后一");
    }

    // 拦截之后
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("页面渲染一后");

    }

}   
  1. 这里的拦截器需要在springmvc中进行配置
<mvc:interceptors>
        <!-- 配置多个拦截器 -->
        <mvc:interceptor>
        <!--配置映射路径,这里两个*指的是在根目录下还有文件需要拦截-->
            <mvc:mapping path="/**" />
            <!-- 自定义拦截器类 -->
            <bean class="com.springmvc.interceptor.Intrceptor1" />
        </mvc:interceptor>
        <mvc:interceptor>
        <!--拦截项目下的所有,两个*表示如果有多个文件路径也可以进行拦截如:abd/def/efg.action-->
            <mvc:mapping path="/**" />
            <!-- 自定义拦截器类 -->
            <bean class="com.springmvc.interceptor.Intrceptor2" />
        </mvc:interceptor>
    </mvc:interceptors>
  1. 一个项目中可以配置多个拦截器进行对项目进行拦截,我们在多个拦截器发挥的作用总结如下
  2. 总结:
    preHandle按拦截器定义顺序调用
    postHandler按拦截器定义逆序调用
    afterCompletion按拦截器定义逆序调用

        postHandler在拦截器链内所有拦截器饭或成功调用
        afterCompletion只有preHandler返回true才调用    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值