全局异常处理、使用JMail来发送邮件、Httpclient

全局异常处理

我们知道项目运行过程中肯定会出现一些问题,当出现异常的时候,我们往往在Controller层捕获并处理了,但这样做不利于我们统一管理。

我们这节课便来学习下全局异常处理器,让它来管理项目所有的异常。当请求过来时先经过前端控制器,前端控制器将请求交给Controller,Controller将请求交给Service,Service将请求交给Dao,当Dao处理完请求之后,将处理结果返回给Service,Service再将返回结果返回给Controller,Controller再将返回结果返回给前端控制器。同理,如果出现异常,最终都会传到前端控制器。我们便在前端控制器对异常进行统一处理。
在这里插入图片描述
我们需要在前端工程来添加全局异常处理器,在taotao-search-web工程新建一个包com.taotao.search.exception并在该包下新建全局异常处理器类GlobalExceptionResolver,如下图所示。我们还需要在src/main/resources目录下放置log4j.properties文件。

上面的代码中用到了Logger,这个Logger我们使用的是slf4j包下的Logger,因为slf4j是一个平台,它可以处理各种日志处理文件,比如log4j。我们在src/main/resources目录下放置log4j.properties文件(最好名字就叫log4j.properties,这样lo4j会自动加载,不用配置,如果叫别的名字还需要配置)。log4j.properties文件的内容如下,可以看到我们把日志的级别调整为INFO级别,这样可以少很多输出信息。A3对日志输出做了配置,指定将日志信息写入到logs目录下的server.log文件当中,当文件大小达到1M的时候会重新生成一个文件接着写日志。STDOUT是指将日志输出到控制台

下面需要在springmvc.xml文件中加载全局异常处理器

下面我们人为抛一个异常,我们把SearchController的search方法的try catch去掉,直接往外抛异常,然后人为设置一个异常(1/0肯定会报异常)。

下面我们重启taotao-search-web工程,然后访问淘淘商城首页,在搜索框中输入搜索条件并进行搜索,便会看到如下图所示的异常页面,可以看到该页面的异常提示信息就是我们刚才定义的信息。
在这里插入图片描述
我们找到logs目录,在它下面有server.log文件,打开它,可以看到我们刚才人为设置的异常信息。
在这里插入图片描述

使用JMail来发送邮件

当我们在开发中使用全局异常处理器处理异常时,针对异常模块找到对应的责任人,然后要将错误通过邮箱或者手机短信的方式发给相关责任人,这节我们一起学习下如何用JMail发送邮件。

要发送邮件,我们要有一个邮箱作为发送的载体,这里我用的是163邮箱。要使用JMail发送邮件,我们需要对163邮箱做一些配置。

第一步:开启SMTP
登录163邮箱,点击"设置",在下拉菜单中点击"POP3/SMTP/IMAP",如下图所示。

我们勾选上两个关于SMTP的复选框,然后点击"保存"按钮。163邮箱会发短信验证码,输入验证码即可完成该操作。

第二步:配置客户端授权密码
点击左侧的"客户端授权密码",如果以前没有开启过,点击开启,163邮箱会向你的手机发送验证码,输入验证码,然后会让输入授权密码(注意:不要与登录密码一样)。然后就配置好了。

经过上面两步,163邮箱的配置便配置好了,下面要进入编程阶段,发送邮件需要用到mail.jar包,我们的taotao-parent工程是统一管理jar包的,因此我们还是在taotao-parent工程统一定义下mail.jar包的版本号,如下图所示。

<jmail.version>1.5.6</jmail.version>

<!-- JMail组件 -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>${jmail.version}</version>
</dependency>

在taotao-parent工程统一定义好javax.mail和activation两个jar包的版本号之后,我们在taotao-search-web工程添加对这两个jar包的依赖,如下图所示。这里之所以不写版本号是因为在taotao-parent工程我们已经统一定义好版本了,所以这里就不用写版本号了。

 <!-- JMail组件 -->
	<dependency>
	    <groupId>com.sun.mail</groupId>
	    <artifactId>javax.mail</artifactId>
	</dependency>

由于发送键功能是一个独立的功能,我们最好把它弄成一个工具类,因此我在taotao-search-web工程添加了一个com.taotao.search.utils包,并在该包下新建了一个工具类"SendMail",如下图所示。

写完了一个工具类,我们还需要一个工具类,就是将抛出的异常堆栈信息转换为字符串,因为邮箱发送的是字符串,而我们无法直接将堆栈信息当成字符串来传,所以就需要转一下,如下图所示。在工具包下新建了一个工具类StackTrace。
下面我们在全局异常处理器中使用邮箱发送工具类发送邮件,如下图所示。由于发送邮件时间较长,为不影响主流程的运行,所以使用线程来专门处理发送邮件。

我们在上节课的Controller类中人为设置了一个异常
好了,代码写完了,我们现在要测试一下。先启动要启动的四个服务(图片服务、zookeeper、redis、solr)启动完四个服务之后,我们需要重新打包taotao-parent工程到本地Maven仓库(这是由于我刚才在taotao-parent工程添加东西了,所以需要重新打包)。打包好之后,依次启动taotao-manager、taotao-content、taotao-search三个服务以及taotao-manager-web、taotao-portal-web、taotao-search-web三个系统。

下面我们访问淘淘商城首页,在搜索框中随便输入一个关键词进行搜索都会引发我们人为设置的异常,看能不能发送到邮箱当中。搜索手机会进入到统一异常页面。

稍等一会儿,qq邮箱便会收到一封邮件。

我们点击进去查看异常详细信息,发现确实是我们在Controller层人为设置的异常。这说明我们的邮箱发送功能正常!

上面我们成功完成了单邮件发送给单个人的功能,下面我们再实现一封邮件群发给多个人。在邮件发送工具类中添加一个方法。

新添加的代码及main函数代码如下,为了简单,就在main方法中测试下这个群发功能就可以了。经过实际测试,没问题。

在这里插入图片描述
控制台打印:

[INFO] [com.taotao.search.exception.GlobalExceptioResolver.resolveException(GlobalExceptioResolver.java:41)] ioResolver - 进入全局异常处理器。。。
java.lang.ArithmeticException: / by zero
	at com.taotao.search.controller.SearchController.search(SearchController.java:61)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] [com.taotao.search.exception.GlobalExceptioResolver.resolveException(GlobalExceptioResolver.java:46)] ioResolver - 系统发生异常
java.lang.ArithmeticException: / by zero
	at com.taotao.search.controller.SearchController.search(SearchController.java:61)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
DEBUG: setDebug: JavaMail version 1.5.6
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 25, isSSL false
九月 02, 2019 11:13:50 上午 org.apache.jasper.compiler.TldLocationsCache tldScanJar
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
220 smtp.qq.com Esmtp QQ Mail Server
DEBUG SMTP: connected to host "smtp.qq.com", port: 25

EHLO 192.168.173.1
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "73400320"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "MAILCOMPRESS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.qq.com, user=864620611@qq.com, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<864620611@qq.com>
250 Ok
RCPT TO:<864620611@qq.com>
250 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   864620611@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: 864620611@qq.com
Message-ID: <2100021061.0.1567394033199@[192.168.173.1]>
Subject: =?UTF-8?B?5pCc57Si57O757uf5Ye6546w5byC5bi4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

java.lang.ArithmeticException: / by zero
	at com.taotao.search.controller.SearchController.search(SearchController.java:61)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
.
250 Ok: queued as 
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 Bye

然后邮箱里也收到了短信
在这里插入图片描述
在这里插入图片描述

HttpClient

简介

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

HttpClient 提供的主要的功能
(1)实现了所有 HTTP 的方法(GET,POST,PUT,DELETE等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等

我们所用的solrj其实就封装了HttpClient

学习

http状态码:
常用的:
200 201 202
400 404 405 406 415
500 501 502 503
在这里插入图片描述
在这里插入图片描述

无参数的GET请求
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

带参数的GET请求
在这里插入图片描述
在这里插入图片描述

无参数的POST请求
在这里插入图片描述
在这里插入图片描述

带参数的POST请求
在这里插入图片描述

封装起来!

1.支持发送邮件和远端文件下载两个功能Demo,环境MyEclipse 6.0.1+jdk1.6 2.import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class SearchDomain { public static void main(String[] args) throws ClientProtocolException, IOException { //实例化一个HttpClient HttpClient httpClient = new DefaultHttpClient(); //设定目标站点 web的默认端口80可以不写的 当然如果是其它端口就要标明 HttpHost httpHost = new HttpHost("127.0.0.1",80); //设置需要下载的文件 HttpGet httpGet = new HttpGet("/fax/temp/284/201205171022522920.doc"); //这里也可以直接使用httpGet的绝对地址,当然如果不是具体地址不要忘记/结尾 //HttpGet httpGet = new HttpGet("http://www.0431.la/"); //HttpResponse response = httpClient.execute(httpGet); HttpResponse response = httpClient.execute(httpHost, httpGet); if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ //请求成功 //取得请求内容 HttpEntity entity = response.getEntity(); //显示内容 if (entity != null) { //这里可以得到文件的类型 如image/jpg /zip /tiff 等等 但是发现并不是十分有效,有时明明后缀是.rar但是取到的是null,这点特别说明 System.out.println(entity.getContentType()); //可以判断是否是文件数据流 System.out.println(entity.isStreaming()); //设置本地保存的文件 File storeFile = new File("e:/111.doc"); FileOutputStream output = new FileOutputStream(storeFile); //得到网络资源并写入文件 InputStream input = entity.getContent(); byte b[] = new byte[1024]; int j = 0; while( (j = input.read(b))!=-1){ output.write(b,0,j); } output.flush(); output.close(); } if (entity != null) { entity.consumeContent(); } } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值