zoukankan      html  css  js  c++  java
  • Java客户端通过HttpURLConnection连接Web服务器的Session保存问题

    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

  • 相关阅读:
    Debug相关的一些小技巧
    <Information Storage and Management> 读书笔记 之二
    <<Information Storage and Management>>读书笔记 之三
    LINQ to SQL语句(2)之Select/Distinct【转】
    Asp.Net MVC实践 探索UrlRouting并分析UrlHelper (基于ASP.NET MVC Preview 3) 【转】
    MVC学习之分页 【转】
    在 ASP.NET MVC 项目中使用 WebForm 【转】
    Asp.net Mvc Codeplex Preview 5 第三篇 实现Action参数传递繁杂类型 【转】
    jQuery入门[1]-构造函数 【转】
    LINQ to SQL语句(1)之Where【转】
  • 原文地址:https://www.cnblogs.com/daocaowu/p/3027655.html
Copyright © 2011-2022 走看看