`
shangjava
  • 浏览: 1182063 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java客户端通过HttpURLConnection连接Web服务器的Session保存问题

 
阅读更多

通过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

0
10
分享到:
评论
1 楼 bao231 2011-07-30  
apache的http组件都做了,重复造轮子啊,呵呵,你看你写的代码漏洞百出,好好看看apache是怎么写的

相关推荐

Global site tag (gtag.js) - Google Analytics