Java客户端通过HttpURLConnection连接Web服务器的Session保存问题
2013-04-18 01:33
711 查看
http://blog.csdn.net/lixinso/article/details/6642703
通过Java客户端访问Web时,session信息的保存问题。
通过浏览器访问Web,浏览器自动管理Http连接的的session信息,如果通过Java连接,比如HttpURLConnection,就需要程序自己管理session。
我们希望java客户端能像浏览器一样,每次请求都维持一个session。
具体做法时这样:
客户端代码:
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class Client {
public static void main(String[] args) throws IOException {
URL url = new URL("http://localhost:8080/lbs_server/print_session.jsp");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setDoOutput(true);
//第二次运行的时候,把上次读取的session的值设置上
conn.setRequestProperty("Cookie", "JSESSIONID=320C57C083E7F678ED14B8974732225E");
PrintWriter out = new PrintWriter(conn.getOutputStream());
String str = "url = " + url;
System.out.println("");
out.println(str);
out.flush();
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String destStr = "";
String inputLin = "";
while((inputLin = in.readLine()) != null ){
destStr += inputLin;
}
System.out.println(destStr);
//第一次运行的时候,记录下来session的值
String session_value = conn.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
System.out.println(sessionId[0]);
System.out.println("Session Value = " + session_value);
}
}
由于只是测试代码,只是示例一下。
第一次连接的时候获取session信息,取出sessionId[0]。再次连接的时候,将session信息设置为sessionId[0],就可以了。
再服务器端的代码时这样:
print_session.jsp
<body>
<% System.out.println(session.getId());
if(session.getAttribute("first_time") == null )
session.setAttribute("first_time",System.currentTimeMillis());
System.out.println("first_time:" + (Long)(session.getAttribute("first_time")) );
%>
</body>
这样再服务器端看到的session信息和session数据都在。
比如两次连接服务器端得到的结果都是:
320C57C083E7F678ED14B8974732225E
first_time:1311899387880
320C57C083E7F678ED14B8974732225E
first_time:1311899387880
通过Java客户端访问Web时,session信息的保存问题。
通过浏览器访问Web,浏览器自动管理Http连接的的session信息,如果通过Java连接,比如HttpURLConnection,就需要程序自己管理session。
我们希望java客户端能像浏览器一样,每次请求都维持一个session。
具体做法时这样:
客户端代码:
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class Client {
public static void main(String[] args) throws IOException {
URL url = new URL("http://localhost:8080/lbs_server/print_session.jsp");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setDoOutput(true);
//第二次运行的时候,把上次读取的session的值设置上
conn.setRequestProperty("Cookie", "JSESSIONID=320C57C083E7F678ED14B8974732225E");
PrintWriter out = new PrintWriter(conn.getOutputStream());
String str = "url = " + url;
System.out.println("");
out.println(str);
out.flush();
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String destStr = "";
String inputLin = "";
while((inputLin = in.readLine()) != null ){
destStr += inputLin;
}
System.out.println(destStr);
//第一次运行的时候,记录下来session的值
String session_value = conn.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
System.out.println(sessionId[0]);
System.out.println("Session Value = " + session_value);
}
}
由于只是测试代码,只是示例一下。
第一次连接的时候获取session信息,取出sessionId[0]。再次连接的时候,将session信息设置为sessionId[0],就可以了。
再服务器端的代码时这样:
print_session.jsp
<body>
<% System.out.println(session.getId());
if(session.getAttribute("first_time") == null )
session.setAttribute("first_time",System.currentTimeMillis());
System.out.println("first_time:" + (Long)(session.getAttribute("first_time")) );
%>
</body>
这样再服务器端看到的session信息和session数据都在。
比如两次连接服务器端得到的结果都是:
320C57C083E7F678ED14B8974732225E
first_time:1311899387880
320C57C083E7F678ED14B8974732225E
first_time:1311899387880
相关文章推荐
- Java客户端通过HttpURLConnection连接Web服务器的Session保存问题
- Java客户端通过HttpURLConnection连接Web服务器的Session保存问题
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决
- Java客户端通过Http发送POST请求上传文件到web服务器
- Java客户端通过Http发送POST请求上传文件到web服务器
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- 百度地图API 云存储·LBS.云 跨域问题解决方法——通过java.net.URLConnection发送HTTP请求
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
- Java客户端HttpClient和HttpURLConnection修改请求头Host问题
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)
- java httpURL连接远程服务器并返回数据(httpurlconnection)(转)