教授通过代码示例学习Commons HTTPClient4组件的编程技术——访问受保护的Web服务器端资源

httpclient4  时间:2021-01-29  阅读:()

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

目录

1.1 访问受保护的Web服务器端资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.1 处理Cookie和Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.2 HttpClient的连接超时设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

杨教授工作室版权所有盗版必究 1/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1 访问受保护的Web服务器端资源

1. 1. 1处理Cookie和Session

1、HttpC lient实例自己会处理Cookie和Session

因此一定要通过同一个HttpC lient实例发出不同的请求这些请求也就在同一个会话中。

2、AccessP rotec tedURL类

 1在客户端项目中添加一个AccessProtectedURL类包名称为com.px1987.http client

2编程该AccessProtectedURL类的代码package com.px1987.httpclient;import java. io. IOException;import java. io. InputStream;

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import java. io.ObjectInputStream;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http. impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import com.px1987.httpclient.vobject.UserInfoVO;public class AccessProtectedURL {public AccessProtectedURL() throws ClientProtocolException, IOException,ClassNotFoundException {

HttpClient httpClient = new DefaultHttpClient() ;loginWebSystem(httpClient) ;accessProtectedTargetURL(httpClient) ;httpClient.getConnectionManager() . shutdown() ; ;//释放连接

}public void loginWebSystem(HttpClient httpClient) throwsClientProtocolException, IOException, ClassNotFoundException {

StringuserLoginTargetURL="http://127.0.0. 1:8080/webbank/userinfoservlet";

HttpPost onePostMethod = new HttpPost(userLoginTargetURL) ;

杨教授工作室版权所有盗版必究 3/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

List<NameValuePair> allRequestParameterList = newArrayList<NameValuePair>() ;

NameValuePair actionType = newBasicNameValuePair("actionType", "loginMethodTwo") ;

NameValuePair verifyCodeDigit =new BasicNameValuePair("verifyCodeDigit", "1234abcd") ;

NameValuePair type_User_Admin = newBasicNameValuePair("type_User_Admin", "1") ;

NameValuePair userName = new BasicNameValuePair("userName", "杨少波") ;

NameValuePair userPassWord = newBasicNameValuePair("userPassWord", "1234") ;allRequestParameterList.add(actionType) ;allRequestParameterList.add(verifyCodeDigit) ;allRequestParameterList.add(type_User_Admin) ;allRequestParameterList.add(userName) ;allRequestParameterList.add(userPassWord) ;onePostMethod. setEntity(new

UrlEncodedFormEntity(allRequestParameterList,

HTTP.UTF_8) ) ;

HttpResponse httpResponse =httpClient. execute(onePostMethod) ;int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的状态

HttpEntity entity = httpResponse.getEntity() ;if (entity == null) {

System.out.println("服务器没有返回任何的信息") ;return;

}

InputStream oneInputStream = entity.getContent() ;

杨教授工作室版权所有盗版必究 4/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料ObjectInputStream oneObjectInputStream=new ObjectInputStream(oneInputStream) ;

UserInfoVOoneUserInfoVO=(UserInfoVO)oneObjectInputStream.readObject() ;if(oneUserInfoVO==null) {

System.out.println("服务器没有返回任何的信息") ;return;

}int type_User_AdminDigit=oneUserInfoVO.getType_User_Admin() ;String returnUserName=oneUserInfoVO.getUserName() ;

String returnUserPassWord=oneUserInfoVO.getUserPassWord() ;

System.out.println("获得的用户角色类型为 "+type_User_AdminDigit) ;System.out.println("获得的用户名称为 "+returnUserName) ;

System.out.println("获得的用户密码为 "+returnUserPassWord) ;entity.consumeContent() ;

}else{

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

}onePostMethod.abort() ; //结束本次请求

}public void accessProtectedTargetURL(HttpClient httpClient )throws ClientProtocolException, IOException,ClassNotFoundException {

StringprotectedTargetURL="http://127.0.0. 1:8080/webbank/updateUserInfo. jsp";HttpGet oneGetMethod = new HttpGet(protectedTargetURL) ;

HttpResponse httpResponse =httpClient. execute(oneGetMethod) ;int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;

杨教授工作室版权所有盗版必究 5/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的状态

HttpEntity entity = httpResponse.getEntity() ;if (entity != null) {

System.out.println(EntityUtils. toString(entity) ) ; //打印返回的信息

}

}else{

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

}oneGetMethod.abort() ; //结束本次请求

}public static void main(String[] args) throws ClientProtocolException,IOException, ClassNotFoundException {

AccessProtectedURL oneWebBankAppclient=new AccessProtectedURL() ;

}

}

3、在登录功能的目标Servlet程序中进行会话跟踪

4、在服务器端项目中添加一个受保护的页面文件updateUserInfo.j sp

1在服务器端项目中添加一个受保护的页面文件updateUserInfo.j sp

杨教授工作室版权所有盗版必究 6/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

2受保护的页面文件的内容

该页面文件模拟Web服务器端受保护的资源只有客户端的访问者身份验证成功后才可以访问它否则将拒绝访问。

<% //下面的代码为保护头com.px1987.httpclient.vobject.UserInfoVO oneUserInfoVO =

(com.px1987.httpclient.vobject.UserInfoVO)session.getAttribute("oneUserInfoVO") ;

RequestDispatcher oneRequestDispatcher=null;if(oneUserInfoVO==null) {request. setAttribute("errorText", "你没有进行系统登陆不能访问本功能页面请登陆系统 ") ;

String targetPage="/errorDeal/showWebAppError. jsp";oneRequestDispatcher=request.getRequestDispatcher(targetPage) ;oneRequestDispatcher.forward(request,response) ;

}

%>

<%@ page contentType="text/html; charset=gb2312" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

杨教授工作室版权所有盗版必究 7/10页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料<head>

<title>蓝梦银行系统信息修改页</title>

</head>

<body >

下面的内容只有登陆成功的用户才能访问

</body>

</html>

5、本示例执行后的结果

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

6、关于session问题的应用要点

把一个HttpClent对象当作是一个浏览器那么在浏览器中是如何维持Session的是在同一个浏览器中。所以在HttpClient对象也要是同一个对象。 HttpClient实例自己会处理Cookie。

每一次新建一个HttpClient对象时相当于新生成一个session id,但如果每次都用同一个HttpClient相当于共同一个session id。

1. 1.2 HttpClient的连接超时设置

1、连接超时超时单位是毫秒设置的代码示例

HttpParams httpParams = httpClient.getParams() ;httpParams. setParameter(ClientPNames.COOKIE_POLICY,

CookiePolicy.BROWSER_COMPATIBILITY) ;

HttpConnectionParams. setConnectionTimeout(httpParams, 5000) ; //设置连接的超时

HttpConnectionParams. setSoTimeout(httpParams, 10000) ;

或者采用下面的形式httpClient.getParams() . setIntParameter("http. socket. timeout",3000) ;

或者采用下面的形式httpClient.getParams() . setIntParameter(HttpConnectionParams.SO_TIMEOUT,

3000) ; //超时设置httpClient.getParams() . setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 3000) ;//连接超时

2、其他方面的连接参数Connection parameters

1 http.socke t.timeo ut

以毫秒为单位定义套接字超时S O_TIM EO U T。当值为0被解释成一个无限的暂停此参数要求是java.lang. Integer类型的值如果此参数不设置读操作不会超时无限暂停。

2 http.tcp.nod e lay

确定是否使用Nagle算法。Nagle算法尝试通过将被发送的段数量减到最少节省带宽。当应用程序希望降低网络延迟提高性能他们可以禁用Nagle算法启用TCP_NODELAY以增加消耗带宽为代价发送数据此参数要求是java.lang. Boolean类型的值如果此参数

杨教授工作室版权所有盗版必究 9/10页

ucloud国内云服务器2元/月起;香港云服务器4元/首月;台湾云服务器3元/首月

ucloud云服务器怎么样?ucloud为了扩大云服务器市场份额,给出了超低价云服务器的促销活动,活动仍然是此前的Ucloud全球大促活动页面。目前,ucloud国内云服务器2元/月起;香港云服务器4元/首月;台湾云服务器3元/首月。相当于2-4元就可以试用国内、中国香港、中国台湾这三个地域的云服务器1个月了。ucloud全球大促仅限新用户,国内云服务器个人用户低至56元/年起,香港云服务器也仅8...

香港 1核 1G 5M 22元/月 美国 1核 512M 15M 19.36元/月 轻云互联

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:用户购买任...

AlphaVPS(€3.99/月)VPS年付15欧,AMD EYPC+NVMe系列起

AlphaVPS是一家保加利亚本土主机商(DA International Group Ltd),提供VPS主机及独立服务器租用等,数据中心包括美国(洛杉矶/纽约)、德国、英国和保加利亚等,公司办公地点跟他们提供的保加利亚数据中心在一栋楼内,自有硬件,提供IPv4+IPv6,支持PayPal或者信用卡等方式付款。商家提供的大硬盘VPS主机,提供128GB-2TB磁盘,最低年付15欧元起,也可以选择...

httpclient4为你推荐
免费卡巴斯基杀毒软件怎么安装免费的卡巴斯基杀毒软件美国10次啦导航gps卫星导航用的卫星应该是美国的吧?那有限几十颗卫星怎么能同时给地面上如此多的终端提供导航呢?p图软件哪个好用手机p图软件那个好视频制作软件哪个好手机短视频制作哪个软件好轿车和suv哪个好SUV和轿车哪个好无纺布和熔喷布口罩哪个好表层水刺布,中间层pp无纺布+熔喷布,里层pp无纺布口罩好吗?手机炒股软件哪个好手机炒股软件手机炒股软件哪个好手机炒股哪个软件好 要免费的播放器哪个好哪个播放器最好美国国际东西方大学你知道美国哪些大学有预科课程吗
sockscap 建站代码 vip域名 华为云服务登录 彩虹云 云营销系统 国外代理服务器 tracker服务器 htaccess reboot studentmain 遨游论坛 万网空间价格 好看的空间留言 电脑主机报警 杭州汽车摇号申请网站 免费ftp资源 最好的免费网络电话 热门免费网络游戏 带宽测试软件 更多