zoukankan      html  css  js  c++  java
  • 【SpringMVC】SpringMVC简单应用例子:文件的上传下载、拦截器

    5).SpringMVC应用:验证码、文件上传(音频等)/下载

    (1)验证码
    1) 作用:	防止机器人程序访问服务器(数据库大量连接消耗,导致数据库中大量无效数据),尽可能确保,访问数据的请求,是人为通过客户端发起
    2) 生成验证码图片
       	① 利用hutool.jar:获得验证码对象[验证码图片,验证码码值]
       		LineCaptcha cap = CaptchaUtil.createLineCaptcha(长, 宽, 字符数, 干扰线个数);
    ① 将验证码图片写出到响应流流,响应到页面的img标签的src上
      		cap.write(OutputStream 指向输出位置);
      	② 获得验证码的值
         		String code = cap.getCode();
    3) 展示一个验证码
    	<img src=”controller的路径.方法.do”/>
    	java代码:
    @Controller
    public class CaptchaController {
        @RequestMapping("/captcha")
        public void myCaptcha(HttpServletRequest request, HttpServletResponse response){
            LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100, 1, 10);
            try {
                captcha.write(response.getOutputStream());//将图片文件写到响应流上
            } catch (IOException e) { e.printStackTrace();}
            request.getSession().setAttribute("verificationCode",captcha.getCode());
        }
    }   
    (2)文件上传
    1) 核心思路:
    ① SpringMVC提供了MultipartFile对象接收文件
    ② SpringMVC使用CommonsMultipartResolver文件解析器,完成文件解析,转化MultipartFile对象
     
    2) 准备工作(搭建环境)
    ① 导入文件上传相关的jar
    		commons-fileupload-1.3.jar
    		commons-io-2.2.jar
    ② 注册管理文件解析器对象 (mvc.xml)
    		<bean id="multipartResolver" class="xx.xx.xx.CommonsMultipartResolver">
    			<property name="maxUploadSize" value="100000000"></property> ---文件上传的大小
    		</bean>
    	 注意: 文件上传解析器在springmvc工厂内部的ID必须叫"multipartResolver"
    ③ SpringMVC内部使用文件解析器对象时,通过id获得对象
    		id="multipartResolver"(固定的id)
        	CommonsMultipartResolver resolver = ctx.getBean("multipartResolver");
    3) SpringMVC的文件对象的方法	
    multipartFile.getOrignalFilename();	//获得文件名
    multipartFile.transferTo(输出流);		//将文件输出到流对应的位置
    4) 接收上传的文件:实例代码
     
    控制器层需要判断接受:用MultpartFile 接收(切记表单的name不能是对象的属性名)
    	    try {
    			String realPath = session.getServletContext().getRealPath("/upload/img");
    			File file = new File(realPath);
    			if(!file.exists()){   //判断上传的文件夹是否存在
    				file.mkdirs();  //自动补全路径
    			}
    			String originalFilename = fileName.getOriginalFilename();
    			String name = new Date().getTime()+"_"+originalFilename;
    			fileName.transferTo(new File(realPath,name));
    			map.put("mess", "上传成功");
    		} catch (Exception e) {
    			e.printStackTrace();
    			map.put("mess", "上传失败");
    }
    	音频上传:
    (1)导入jar:jaudiotagger-2.0.3.jar
    (2)代码处理:
    File audioFile = new File(filePath); 		//通过音频路径读取
    audioFile.getSize();//获取大小,单位字节(B),除以1024为KB
    AudioFile read = AudioFileIO.read(audioFile);  	
    AudioHeader audioHeader = read.getAudioHeader();
    audioHeader.getTrackLength();  			//获取时长,单位为秒(s)
    
    (3)文件下载
    	页面:页面请求下载时可用window.location
    java后台代码:文件拷贝的工具类:
    Commons-IO包
    FileUtils.copyFile(源文件File对象, 拷贝后的文件所对应的输出流);
    编码:
    

    6).SpringMVC应用:拦截器、全局异常

    (1)拦截器
    1)作用: 将控制器中存在重复代码,抽取拦截器去完成
    权利:
    ① 在控制器访问之前执行一段代码
    ② 有权中断或者放行,请求到达Controller
    ③ 在控制器执行完毕之后,执行一段代码
    2)SpringMVC拦截器的工作机制
     
    3)开发步骤:
    ① 自定义拦截器:
       public class Lanjieqi implements HandlerInterceptor{
           方法1: 控制器之前执行
           方法2: 控制器之后,跳转前
           方法3:  跳转之后执行
       }
    ② 将控制器管理拦截器 <bean>
    ③ 映射要拦截的路径 (mvc.cml)
       <mapping path="被拦截的控制器的namespace/方法上RequestMapping"></mapping>
     
    配置标签书写书序解读:
     
    4)细节补充:
    ① postHandle方法中ModelAndView参数
       作用:	操作作用域中的值:mav.addObejct();
       		设置修改跳转路径:mav.setViewName("xxx");
    ② 一次性拦截多个路径 (mvc.xml)
       方式1:在一个拦截器标签内些多个mapping标签
       	<mvc:interceptors>								<!-- 配置拦截器 -->
       		<mvc:interceptor>							<!-- 配置多个拦截器 -->
       			<mvc:mapping path="/inter/test1.do"/>	<!-- 拦截路径,放在该配置标签前面 -->
       			<mvc:mapping path="/inter/test2.do"/>
       			<bean class="com.baizhi.demo4.MyInterceptor1"></bean>	   <!-- 拦截器对象,放在最后面 -->
       		</mvc:interceptor>
       	</mvc:interceptors>
       方式2:配置拦截路径的通配符
      		<mvc:mapping path="/inter/*"/>
    ③ 排除拦截路
      	 <mvc:exclude-mapping path="不拦截的控制访问路径url-pattern">
    (2)全局异常
    概念:一个异常处理工具,对项目所有控制器发生异常,做统一处理
    开发步骤:
    ① 书写一个异常处理的类:HandlerExceptionResolver
     
    ② 将全局异常处理类,交给springmvc工厂管理 (mvc.xml)
    <bean class="全局异常处理全类名"> </bean>
    
  • 相关阅读:
    python实现模拟登录
    python进阶八_警告和异常
    我的软考之路(六)——数据结构与算法(4)之八大排序
    Modern source-to-source transformation with Clang and libTooling
    heibernate增删改查总结一下自己的不足
    hibernate之增删改查demo
    前台之boostrap
    <input value="hidden">的作用
    Active Desktop--桌面字体背景被修改
    中文乱码问题解决方法总结
  • 原文地址:https://www.cnblogs.com/jwnming/p/13635281.html
Copyright © 2011-2022 走看看