Struts2 结合HttpClient 实现远程服务器文件下载
Struts2 结合HttpClient 实现远程服务器文件下载
1、只实现远程文件下载未处理远程服务器连接失败的状态
1.1、页面配置部分
1.2、Struts2配置文件部分
application/vnd.ms-excel
name="contentDisposition">attachment;filename="${downloadName}"
downloadFile
4096
1.3、Action层中获取远程服务器文件流程序部分
public class ImportAction{
private String downFileName;
private String downloadName;
IFileService fileService;
/**
* @param fileService the fileService to set
*/
public void setEztFileService(IFileService fileService) {
this.fileService = fileService;
}
/**
* @return the downFileName
*/
public String getDownFileName() {
return downFileName;
}
/**
* @param downFileName the downFileName to set
*/
public void setDownFileName(String downFileName) {
this.downFileName = downFileName;
}
/**
* @return the downloadName
*/
public String getDownloadName() {
return downloadName;
}
/**
* @param downloadName the downloadName to set
*/
public void setDownloadName(String downloadName) {
this.downloadName = downloadName;
}
public InputStream getDownloadFile(){
downloadName = fileService.getDownloadFileName(downFileName); //下载文件显示名称转编码Properties properties = ResourceUtil.getProperties("file.properties");
//取得远程服务器信息配置属性文件file.properties文件为自定义文件放置在web项目src/conf文件夹下String strRemoteFileUrl = properties.getProperty("serverPath")+
properties.getProperty("templateName"); //取得远程文件路径
InputStream in = fileService.getDownloadFile(strRemoteFileUrl); //调用Service层方法取得远程服务器文件流
return in;
}
}
1.4、Service层接口实现
public class FileService implements IFileService {
public String getDownloadFileName(String downFileName) { //解决下载文件名称中文乱码问题try {
downFileName = new String(downFileName.getBytes(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
public InputStream getDownloadFile(String strRemoteFileUrl) {
// TODO Auto-generated method stub
HttpClient client = new HttpClient();
GetMethod httpGet = new GetMethod(strRemoteFileUrl);
InputStream in = null;
try {
int intResponseCode = client.executeMethod(httpGet);
in = httpGet.getResponseBodyAsStream();
} catch (HttpException e) {
// TODO Auto-generated catch block
//记录日志
} catch (IOException e) {
// TODO Auto-generated catch block
//记录日志
}
return in;
}
}
1.5、读取properties文件工具类部分
public class ResourceUtil {
public static Properties getProperties(String fileName) {
try {
Properties properties = new Properties();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
properties.load(cl.getResourceAsStream(fileName));
return properties;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
1.6、总结:此项实现,在文件服务器运行正常的情况下文件下载正常,如果文件服务器运行异常或已停止运行则在jsp 页面部分将会抛出异常。
2、实现远程服务器文件下载并处理文件服务器连接异常,返回提示信息
2.1、页面配置部分
2.2、Struts2配置文件部分
文件下载.xls
application/vnd.ms-excel
name="contentDisposition">attachment;filename="${downloadName}" downloadFile
4096
2.3、Action层中获取远程服务器文件流程序部分
public class ImportAction{
private String downFileName;
private String downloadName;
private InputStream downloadFile;
IFileService fileService;
/**
* @param fileService the fileService to set
*/
public void setEztFileService(IFileService fileService) {
this.fileService = fileService;
}
/**
* @return the downFileName
*/
public String getDownFileName() {
return downFileName;
}
/**
* @param downFileName the downFileName to set
*/
public void setDownFileName(String downFileName) {
this.downFileName = downFileName;
}
/**
* @return the downloadName
*/
public String getDownloadName() {
return downloadName;
}
/**
* @param downloadName the downloadName to set
*/
public void setDownloadName(String downloadName) {
this.downloadName = downloadName;
}
/**
* @return the downloadFile
*/
public InputStream getDownloadFile() {
return downloadFile;
}
/**
* @param downloadFile the downloadFile to set
*/
public void setDownloadFile(InputStream downloadFile) {
this.downloadFile = downloadFile;
}
public InputStream getDownloadFile(){
downloadName = fileService.getDownloadFileName(downFileName); //下载文件显示名称转编码Properties properties = ResourceUtil.getProperties("file.properties");
//取得远程服务器信息配置属性文件file.properties文件为自定义文件放置在web项目src/conf文件夹下String strRemoteFileUrl = properties.getProperty("serverPath")+
properties.getProperty("templateName"); //取得远程文件路径
downloadFile = fileService.getDownloadFile(strRemoteFileUrl); //调用Service层方法取得远程服务器文件流变量名称与配置文件相符
if (null==downloadFile) {
request.setAttribute("meg", "模板下载异常!");
return ERROR;
} else {
return SUCCESS;
}
}
}
2.4、Service层接口实现
public class FileService implements IFileService {
public String getDownloadFileName(String downFileName) { //解决下载文件名称中文乱码问题try {
downFileName = new String(downFileName.getBytes(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
public InputStream getDownloadFile(String strRemoteFileUrl) {
// TODO Auto-generated method stub
HttpClient client = new HttpClient();
GetMethod httpGet = new GetMethod(strRemoteFileUrl);
InputStream in = null;
try {
int intResponseCode = client.executeMethod(httpGet);
in = httpGet.getResponseBodyAsStream();
} catch (HttpException e) {
// TODO Auto-generated catch block
//记录日志
} catch (IOException e) {
// TODO Auto-generated catch block
//记录日志
}
return in;
}
}
2.5、读取properties文件工具类部分
public class ResourceUtil {
public static Properties getProperties(String fileName) {
try {
Properties properties = new Properties();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
properties.load(cl.getResourceAsStream(fileName));
return properties;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
2.6、总结:此项实现,在文件服务器运行正常的情况下文件下载正常,如果文件服务器运行异常则将返回下载页面并提示异常信息。
Java多方式实现文件上传
在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %>
struts2 strus.xml中result类型及含义
struts2strus.xml中result类型及含义 一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容)。 Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。 Struts2支持的不同类型的返回结果为: 名字说明 Chain Result用来处理Action链 Dispatcher Result用来转向页面,通常处理JSP FreeMarker Result处理FreeMarker模板 HttpHeader Result用来控制特殊的Http行为 Redirect Result重定向到一个URL Redirect Action Result重定向到一个Action Stream Result向浏览器发送InputSream对象,通常用来处 理文件下载 Velocity Result处理Velocity模板 XLS Result处理XML/XLST模板 PlainText Result显示原始文件内容,例如文件源代码 结合Tile使用 S2PLUGINS:Tiles Result 另外第三方的Result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。 在struts-default.xml文件中已经有了对于所有类型Result的定义: 回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。一Api接口参数的标准性 Get方式,可以有多个重载,有多个参数 POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递 Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象 标准接口如图 二调用方,参数的标准性 在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码 Get方式 $.ajax({ url: "http://localhost:52824/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); Post方式 $.ajax({ url: "http://localhost:52824/api/register", type: "POST", data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value success: function (data) { console.log("post:" + data); } }); 三在控制台中实现Get方式获取接口数据(只有异步实现) /// Struts2配置文件中使用通配符收藏 形式一:调用相同Action中的不同方法 一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面,这过程就需要自行处理cookie,想想当你用https://www.360docs.net/doc/7b14710672.html,.HttpURLConnection来完成这些功能时是多么恐怖的事情啊!况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的“顽固”!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了! 我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用https://www.360docs.net/doc/7b14710672.html,.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakarta的commons项目,目前的版本是2.0RC2。commons下本来已经有一个net的子项目,但是又把httpclient单独提出来,可见http 服务器的访问绝非易事。 Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS 的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所有问题。 1.读取网页(HTTP/HTTPS)内容 下面是我们给出的一个简单的例子用来访问某个页面 /* * Created on 2003-12-14 by Liudong */ package http.demo; import java.io.IOException; import https://www.360docs.net/doc/7b14710672.html,mons.httpclient.*; import https://www.360docs.net/doc/7b14710672.html,mons.httpclient.methods.*; /** * 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面 * @author Liudong 目录 HttpClient简介 (4) 1)百科名片: (4) 2)HttpClient 的范围 (4) 3)httpClient 特性 (4) HttpClient基本功能的使用 (6) a)环境准备 (6) b)几个主要类解释 (6) c)第一个程序 (6) d)如何传递参数 (8) e)模拟表单登录 (10) f)HttpClient连接SSL (12) 1)生成KeyStore (12) 2)配置tomcat服务器支持SSL (13) 3)用浏览器访问你的应用 (15) 4)用httpClient访问https (15) HttpClient简介 1)百科名片: HTTP 协议可能是现在Internet 上使用得最多、最重要的协议了,越来越多的Java 应用程序需要直接通过HTTP 协议来访问网络资源。虽然在JDK 的java net包中已经提供了访问HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如Apache Jakarta 上很著名的另外两个开源项目Cactus 和HTMLUnit 都使用了HttpClient。现在HttpClient最新版本为HttpClient 4.1. 2)HttpClient 的范围 ?基于HttpCore的客户端HTTP运输实现库 ?基于经典(阻塞)I/O ?内容无关 3)httpClient 特性 ?基于标准,纯净的java语言.实现了Http1.0和Http1.1 ?以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE). ?支持HTTPS协议. ?通过Http代理建立透明的连接. ?利用CONNECT 方法通过Http代理建立隧道的https连接. ?Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案. ?插件式的自定义认证方案. ?便携可靠的套接字工厂使它更容易的使用第三方解决方案. ?连接管理器支持多线程应用.支持设置最大连接数,同时支持设置每个主机的最大连接数.发现并关闭过期的连接. ?Automatic Cookie handling for reading Set-Cookie: headers from the server and sending them back out in a Cookie: header when appropriate. ?插件式的自定义Cookie策略. ?Request output streams to avoid buffering any content body by streaming directly to the socket to the server. Struts2复习题 1.以下属于struts2的控制器组件是: 2.以下属于struts2的体系结构的是:(多选) 控制器组件配置文件 3.以下属于struts2配置文件中的配置元素是:(多选) A. HttpClient的用法 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过HTTP 协议来访问网络资源。 Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给 httpclient替你完成。 首先,我们必须安装好 HttpClient。 HttpClient 可以在https://www.360docs.net/doc/7b14710672.html,/commons/httpclient/downloads.html下载. HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址 https://www.360docs.net/doc/7b14710672.html,/site/downloads /downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中. HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址 https://www.360docs.net/doc/7b14710672.html,/site/downloads /downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中 1.读取网页(HTTP/HTTPS)内容 下面是我们给出的一个简单的例子用来访问某个页面 package http.demo; import java.io.IOException; import https://www.360docs.net/doc/7b14710672.html,mons.httpclient.*; import https://www.360docs.net/doc/7b14710672.html,mons.httpclient.methods.*; /** * 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面 Struts2的工作流程及配置文件--- https://www.360docs.net/doc/7b14710672.html, --- Struts2.0的流程图 从图中看到Struts2的工作流程如下: 1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下: HttpClient 学习笔记 笔记一: 1、HttpClient的功能 1.基于标准,纯正java,实现了http1.0和1.1。 2.在一个可扩展的OO框架内,实现了HTTP的全部方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE) 3.支持HTTPS(ssl上的HTTP)的加密操作 4.透明地穿过HTTP代理建立连接 5.通过CONNECT方法,利用通过建立穿过HTTP代理的HTTPS连接 6.利用本地Java socket,透明地穿过SOCKS(版本5和4)代理建立连接 7.支持利用Basic、Digest和NTLM加密的认证 8.支持用于上传大文件的Multi-Part表单POST方法 9.插件式安全socket实现,易于使用第三方的解决方案 10.连接管理,支持多线程应用,支持设定单个主机总连接和最高连接数量,自动检测和 关闭失效连接 11.直接将请求信息流送到服务器的端口 12.直接读取从服务器的端口送出的应答信息 13.支持HTTP/1.0中用KeepAlive和HTTP/1.1中用persistance设置的持久连接 14.直接访问由服务器送出的应答代码和头部信息 15.可设置连接超时时间 16. 17.HttpMethods 实现Command Pattern,以允许并行请求或高效连接复用 18.遵循the Apache Software License协议,源码免费可得 2、预备工作 对jre1.3.*,如果要HttpClient支持https,则需要下载并安装jsse和jce.安装的步骤如下: 1)下载jsse和jce. 2)检查CLASSPA TH中没有与jsse和jce相关的jar包 3)将US_export_policy.jar、local_policy.jar、jsse.jar、jnet.jar、jce1_2_x.jar、sunjce_provider.jar、jcert.jar复制到目录: UNIX:$JDK_HOME/jre/lib/ext Windows:%JDK_HOME%\jre\lib\ext 4)修改下述目录下的java.security文件。 UNIX:$JDK_HOME/jre/lib/security/ Windows:%JDK_HOME%\jre\lib\security\ 5) 将 # # List of providers and their preference orders: # security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.rsajca.Provider 改为: # # List of providers and their preference orders: # security.provider.1=com.sun.crypto.provider.SunJCE security.provider.2=sun.security.provider.Sun security.provider.3=com.sun.rsajca.Provider security.provider.4=https://www.360docs.net/doc/7b14710672.html,.ssl.internal.ssl.Provider HttpClient还要求安装commons-logging,下面跟httpclient一块安装。 3、取得源码 cvs -d :pserver:anoncvs@https://www.360docs.net/doc/7b14710672.html,:/home/cvspublic login password: anoncvs cvs -d :pserver:anoncvs@https://www.360docs.net/doc/7b14710672.html,:/home/cvspublic checkout jakarta-commons/logging cvs -d :pserver:anoncvs@https://www.360docs.net/doc/7b14710672.html,:/home/cvspublic checkout jakarta-commons/httpclient 编译: cd jakarta-commons/logging ant dist cp dis/*.jar ../httpclient/lib/ cd ../httpclient Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.360docs.net/doc/7b14710672.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。 HttpUrlConnection与HttpClient详解 一.概念。 在Android开发中,AndroidSDK中对HTTP提供了很好的支持,主要包括两种接口。 1.一个是Sun公司提供的库,基于标准Java接口的 HttpURLConnection,这个类封装的很少,如果使用高级功 能,如重访问/Cookie/Session等就相当不方便。它可以实现 简单的基于URL的请求与相应功能。Google在Android Api23及以后的版本中推荐使用HttpURLConnention,在后 续版本中逐渐对其进行优化完善。在2.2版本以前,一直存 在着一些bug。比如对一个可读的InputStream调用close 方法时,可能会导致连接池失效。通常我们会禁用连接池功 能。 2.另一个是Apache公司提供的的HttpClient,它提供了高效的, 最新的功能丰富的api,支持Http协议工具包,支持HTTP 最新版本和建议,是个很好的开源框架,封装了http的请求, 参数,内容体,响应等,拥有众多API,但同时HttpClient 的API数量太多,如果不破坏兼容性的情况下想对他进行扩 展很麻烦。在API 23 SDK将其去掉了。建议使用 HttpURLConnection。 以上两种联网方式都支持HTTPS协议、以流的形式进行传输、 IPv6、配置超时时间、以及连接池等功能。 二.区别。 1.功能上,HttpClient库要丰富很多,提供了很多工具,封装了http 的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。 2.H ttpClient高级功能代码写起来比较复杂,对开发人员的要求会高 一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。 3.HttpURLConnection在2.3版本增加了一些HTTPS方面的改进, 4.0版本增加一些响应的缓存。 4.HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但 要自己写代码处理。 5.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直 接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。 6.HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本 以上),加快了重复请求的速度。 7.HttpClient 适用于web browsers, 他们是可扩展的,并且拥有大 量的稳定APIs。但是,在不破坏其兼容性的前提下很难对如此多的APIs做修改。因此,Android 团队对修改优化Apache HTTP Client表现的并不积极。 Struts+Spring+Hibernate真正入门级实例 网上有很多关于SSH架构的实例文章,但都显得复杂,我想,入门的朋友,还是希望从最简单的CRUD操作开始,一些复杂的数据库关系,逻辑关系,以后在项目中就能碰到,所以,本文定位于从零开始的一个SSH架构的例子,功能很简单,就是完成一个人员的CRUD操作,麻雀虽小,五脏俱全,希望能对从来没有接触过三者结合开发的朋友带来一点点帮助,这个例子,也算是我的入门实例,从此,开始Struts+Spring+Hibernate之旅 开发工具:MyEclipse5.1+Tomcat+Mysql 开发前准备:数据库安装,tomcat安装,下载jar包这些就不费口水了,直接切入正题吧 CREATE TABLE `people` ( `id` int(11) NOT NULL auto_increment, `name` varchar(100) default NULL, `location` varchar(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 ROW_FORMAT=COMPRESSED; 首先,建立工程和package,以下是我的工程目录 action DeletePeopleAction.java //删除人员action EditPeopleAction.java //编辑人员action第一步,读取需要修改的人员资料 EditPeopleActionDo.java //修改人员action ListPeopleAction.javaSave //显示人员列表action SavePeopleAction.java //新增人员action SearchPeopleAction.java //查找人员action dao IDAO.java //数据库操作接口 StudentDAOImpl.java //数据库操作实现 domain AbstractPeople.java //实体抽象类 People.hbm.xml //数据库映射 People.java //实体类 service IService.java //服务层接口 StudentManagerImpl.java //服务层实现 util Character.java //字符编码过滤器 PageSupport.java //分页 applicationContext_hibernate.xml //Spring配置文件(hibernate部分)applicationContext_service.xml //Spring配置文件(Service部分) Struts2标签使用 (1): <2>:第二中方式:list = “#request/session.list”。 ---- 与action 结合起来了。 如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。 (5): HttpClient简介 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。本文首先介绍HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。HTTP 协议可能是现在Internet 上使用得最多、最重要的协议了,越来越多的Java 应用程序需要直接通过HTTP 协议来访问网络资源。虽然在JDK 的https://www.360docs.net/doc/7b14710672.html, 包中已经提供了访问HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包,并且它支持HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如Apache Jakarta 上很著名的另外两个开源项目Cactus 和HTMLUnit 都使用了HttpClient。现在HttpClient最新版本为HttpClient 4.0-beta2 2.HttpClient 功能介绍 以下列出的是HttpClient 提供的主要的功能,要知道更多详细的功能可以参见HttpClient 的主页。 (1)实现了所有HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自动转向 (3)支持HTTPS 协议 (4)支持代理服务器等 3.HttpClient 基本功能的使用 (1) GET方法 使用HttpClient 需要以下6 个步骤: 2016年最新版JavaEE学科课程大纲黑马程序员官网 2016年最新版JavaEE学科课程大纲 一、JavaWeb部分 第一阶段:JavaWEB 部分一之WEB前端技术 1、Html了解HTML语言,HTML语言背景知识,掌握HTML 的整体结构、文件标签、排版标签、块标签、字体标签、列表标签、图形标签、超链接标签、表格标签、表单标签(form 标签、input标签、select标签等)、分区标签、头标签。(1)CSSCSS介绍、CSS导入方式(内部样式表、内联样式表、外部样式表)、五大CSS选择器(ID选择器、类选择器、元素选择器、属性选择器、伪类等)、样式属性介绍。(2)JavaScript基础JavaScript编程,JavaScript语法、数据类型、运算符、表达式、流程控制,JavaScript内部对象、数组、字符串、日期时间、数学函数、正则表达式,JavaScript函数、自定义函数、全局函数,BOM介绍、window 对象、location对象、history对象使用。 DHTML编程,理解DOM树,DOM对象,常用DOM对象的属性、方法和事件,编写事件处理程序、使用DOM操作HTML文档、遍历文档树上的节点、搜索文档中特定的元素、修改文档内容、往文档添加新内容、使用DOM操作 XML文档。 (3)JQuery基础认识JQuery、选择器介绍、css选择器、jQuery选择器及其优势势、基本选择器、层次选择器、过滤选择器、表单选择器、选择器练习小案例等;JQuery操作DOM:DOM分类、查找元素/属性节点、创造元素/属性/文本节点、插入节点、删除节点、复制节点、替换节点、包裹节点、属性操作、样式操作、遍历节点、CSS-DOM操作; 动画和事件:jQuery中的事件、加载DOM、事件绑定、合成事件、事件冒泡、事件对象的属性、移除按钮上注册的事件、模拟操作、JQuery中的动画。 (4)BootStrap响应式页面的的开发与设计,强大的栅格布局,内置的CSS类库,JS插件,快速布局商城页面。第二阶段:JavaWEB部分二之服务器端技术 (1)Mysql及JDBC数据库使用,SQL语句介绍、数据库增删改操作DDL语句使用、表增删改操作DML语句使用、表查询操作DQL语句使用、以及查询语句条件、排序、聚合、分组操作。JDBC介绍、驱动的原理及使用、JDBC核心使用、DriverManager、Connection、Statement、ResultSet 详细使用,JDBC的CURD操作、防止SQL注入及PrepareStatement使用。连接池的介绍,自定义连接池。常用的开源连接池的DBCP 和C3P0的介绍和使用,JDBC 的工具类DBUtils的使用。 (2)JavaWEB 核心技术课程WebApi系列~通过HttpClient来调用WebApi接口
Struts2配置文件通配符的使用说明
JAVA-用HttpClient来模拟浏览器GET,POST
经典教程httpClient4
struts2复习题(含答案)
HTTPClient用法
02-Struts2的工作流程及配置文件
HttpClient学习
Struts2的工作机制原理分析及实例
Java网络编程(三)HttpUrlConnection与HttpClient详解(雷惊风)
Struts+Spring+Hibernate真正入门级实例
Struts2标签使用
HttpClient 简介
2016年最新版JavaEE学科课程大纲 黑马程序员官网