第三十九天学习java

总结

json

  • json是一种基于JavaScript 语法开放的轻量级数据交换格式

  • 导包

    • jackson-annotations-2.5.0.jar
    • jackson-core-2.5.0.jar
    • jackson-databind-2.5.0.jar
  • 后台使用

    @RequestMapping("/add")
    	@ResponseBody
    	public Emp add(Emp emp){
    		return emp;
    	}
    
  • 对日期格式的处理

    • 后台向前台传输格式时

      • 在日期的get属性上添加

        @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
        
    • 前台向后台传输格式时

      • 在日期的set属性上添加

        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
        
  • 避免IE返回json时下载文件的情况

    <!-- 开启spring对MVC的支持 -->
    <mvc:annotation-driven>
    	<!-- 避免在IE浏览器中返回JSON时出现下载文件的情况 -->
    	<mvc:message-converters>
    		<bean id="mappingJackson2HttpMessageConverter"
    		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    			<property name="supportedMediaTypes">
    				<list>
    					<value>text/html;charset=UTF-8</value>
    				</list>
    			</property>
    		</bean>
    	</mvc:message-converters>
    </mvc:annotation-driven>
    

文件的上传(重点)

  • 在上传的时候在form表单的属性中配置

    <form action="/loadon" method="post" enctype="multipart/form-data">
    
  • 在spring-mvc.xml中配置文件的最大尺寸

    <!-- 设置文件最大的尺寸 -->
    	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    	<!-- 设置上传文件的最大尺寸为10MB -->
    		<property name="maxUploadSize">
    			<!-- spring el写法:10MB -->
    			<value>#{1024*1024*10}</value>
    		</property>
    	     <!-- 效果同上 
    			<property name="maxUploadSize" value="1048576" />
    		-->
    	</bean>
    
  • 将上传的文件拷贝下来

    @Controller
    public class LoadOnController {
    	
    	@RequestMapping("/loadon")
    	@ResponseBody
    	public void loadon(HttpServletRequest req,String username,MultipartFile photo) throws Exception{
    		if(!photo.isEmpty()){
    			//获取输入流
    			InputStream in = photo.getInputStream();
    			//通过UUID获取新的名字
    			String namePath = UUID.randomUUID().toString().replace("-", "")+photo.getOriginalFilename();
    			//得到前面的路径
    			String realPath = req.getServletContext().getRealPath("/myFile");
    			File dir = new File(realPath);
    			//判断是否有改路径
    			if(!dir.exists()){
    				dir.mkdirs();
    			}
    			//拼接路径
    			File file = new File(dir,namePath);
    			//获取输入流
    			OutputStream out = new FileOutputStream(file);
    			//通过工具拷贝数据
    			IOUtils.copy(in, out);
    			//释放资源
    			out.close();
    			in.close();
    		}
    	}
    }
    

文件的下载(有时还是会用)

@Controller
public class LoadDownController {

	@RequestMapping("/loaddown")
	public void loadDown(HttpServletRequest req,HttpServletResponse resp,String name) throws Exception{
		//获取前面的路径
		String realPath = req.getServletContext().getRealPath("/download");
		File file = new File(realPath,name);
		//获取输入流
		InputStream in = new FileInputStream(file);
		
		//设置编码
		//ie浏览器
		if(req.getHeader("User-Agent").toUpperCase().indexOf("TRIDENT")!=-1){
			name = URLEncoder.encode(name, "utf-8");
			//电脑自带edge【edʒ】浏览器	
		}else if(req.getHeader("User-Agent").toUpperCase().indexOf("EDGE")!=-1){		
			name = URLEncoder.encode(name, "utf-8");
		}else{//其他浏览器
			name = new String(name.getBytes("UTF-8"),"ISO-8859-1");//转码的方式
		};

		//设置弹窗
		//设置相应头为 文件下载
		resp.setContentType("multipart/form-data");
		resp.setHeader("Content-Disposition", "attachment;fileName="+name);
		
		//获取输出流
		ServletOutputStream out = resp.getOutputStream();
		//拷贝
		IOUtils.copy(in, out);
		//释放资源
		out.close();
		in.close();
	}
}

过滤器

  • 写一个类实现HandlerInterceptor,其中preHandle方法用于请求之前拦截,返回值boolean决定是否拦截

  • spring-mvc.xml配置

    	<mvc:interceptors>
    		<mvc:interceptor>
    			<!-- 拦截的路径   /*只能拦截一层  /a  /b    -->
    			<mvc:mapping path="/**"/>
    			<!-- 不拦截的路径 -->		
    			<mvc:exclude-mapping path="/fileloadup.jsp"/>
    			<!-- 自己定义的拦截器位置   -->
    			<bean class="cn.itsource.hello.MyInterceptor"></bean>
    		</mvc:interceptor>
    	</mvc:interceptors>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值