杨教授工作室精心创作的优秀程序员职业提升必读系列资料
目录
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页
昨天晚上有收到VULTR服务商的邮件,如果我们有清楚的朋友应该知道VULTR对于新注册用户已经这两年的促销活动是有赠送100美元最高余额,不过这个余额有效期是30天,如果我们到期未使用完的话也会失效的。但是对于我们一般用户来说,这个活动还是不错的,只需要注册新账户充值10美金激活账户就可以。而且我们自己充值的余额还是可以继续使用且无有效期的。如果我们有需要申请的话可以参考"2021年最新可用Vul...
官方网站:点击访问青果云官方网站活动方案:—————————–活动规则—————————1、选购活动产品并下单(先不要支付)2、联系我司在线客服修改价格或领取赠送时间3、确认价格已按活动政策修改正确后,支付订单,到此产品开设成功4、本活动产品可以升级,升级所需费用按产品原价计算若发生退款,按资源实际使用情况折算为产品原价再退还剩余余额! 美国洛杉矶CN2_GIACPU内存系统盘流量宽带i...
CloudCone 商家在以前的篇幅中也有多次介绍到,这个商家也蛮有意思的。以前一直只有洛杉矶MC机房,而且在功能上和Linode、DO、Vultr一样可以随时删除采用按时计费模式。但是,他们没有学到人家的精华部分,要这样的小时计费,一定要机房多才有优势,否则压根没有多大用途。这不最近CloudCone商家有点小变化,有新人洛杉矶优化线路,具体是什么优化的等会我测试看看线路。内存CPU硬盘流量价格...