`

使用HttpURLConnection类(利用sessionId保持会话)

阅读更多

TestServlet.java

  1. package nj.servlet;
  2. import javax.servlet.http.HttpServlet;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import javax.servlet.http.HttpSession;
  6. public class TestServlet extends HttpServlet {
  7.     public void doPost(HttpServletRequest request,HttpServletResponse response){
  8.         HttpSession session=request.getSession();
  9.         String str=(String)session.getAttribute("name");
  10.         System.out.println("name:"+str);
  11.         session.setAttribute("name""nj");
  12.         /*String ss=request.getHeader("Cookie");
  13.         System.out.println("session id:"+ss);*/
  14.     }
  15.     public void doGet(HttpServletRequest request,HttpServletResponse response){
  16.         this.doPost(request, response);
  17.     }
  18. }

 

TestServlet.java

  1. package nj.ws.test;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10. public class TestConnection {
  11.     
  12.     public static void main(String[] args){
  13.         //第一次连接,返回session id
  14.         String sessionId=testUrlConnection();
  15.         //第二次使用session id连接
  16.         connectionBySession(sessionId);
  17.     }
  18.     
  19.     public static String testUrlConnection(){
  20.         String urlStr="Http://localhost:8080/WebServiceProject/testServlet";
  21.         OutputStream out=null;
  22.         InputStream in=null;
  23.         try {
  24.             URL url=new URL(urlStr);
  25.             HttpURLConnection con=(HttpURLConnection)url.openConnection();
  26.             con.setRequestMethod("POST");
  27.             
  28.             //打印请求头信息
  29.             Map hfs=con.getHeaderFields();
  30.             Set<String> keys=hfs.keySet();
  31.             for(String str:keys){
  32.                 List<String> vs=(List)hfs.get(str);
  33.                 System.out.print(str+":");
  34.                 for(String v:vs){
  35.                     System.out.print(v+"\t");
  36.                 }
  37.                 System.out.println();
  38.             }
  39.             System.out.println("-----------------------");
  40.             String cookieValue=con.getHeaderField("Set-Cookie");
  41.             System.out.println("cookie value:"+cookieValue);
  42.             String sessionId=cookieValue.substring(0, cookieValue.indexOf(";"));
  43.             return sessionId;
  44.         } catch (Exception e) {
  45.             e.printStackTrace();
  46.             return null;
  47.         }finally{
  48.             try {
  49.                 if(in!=null)
  50.                     in.close();
  51.                 if(out!=null)
  52.                     out.close();
  53.             } catch (IOException e) {
  54.                 e.printStackTrace();
  55.             }
  56.         }
  57.     }
  58.     
  59.     public static void connectionBySession(String sessionId){
  60.         InputStream in=null;
  61.         try{
  62.             String url="Http://localhost:8080/WebServiceProject/testServlet";
  63.             URL u=new URL(url);
  64.             HttpURLConnection con=(HttpURLConnection)u.openConnection();
  65.             con.setRequestMethod("POST");
  66.             con.setRequestProperty("Cookie", sessionId);
  67.             in=con.getInputStream();
  68.         }catch(Exception e){
  69.             e.printStackTrace();
  70.         }finally{
  71.             try {
  72.                 if(in!=null)
  73.                     in.close();
  74.             } catch (IOException e) {
  75.                 e.printStackTrace();
  76.             }
  77.         }
  78.     }
  79. }

运行后打印结果:

Web服务端:

name:null
name:nj

 

测试类打印:

null:HTTP/1.1 200 OK 
Content-Length:0 
Set-Cookie:JSESSIONID=7827696933343BC5005E5244369CB2A8; Path=/WebServiceProject 
Date:Mon, 01 Dec 2008 03:16:30 GMT 
Server:Apache-Coyote/1.1 
-----------------------
cookie value:JSESSIONID=7827696933343BC5005E5244369CB2A8; Path=/WebServiceProject

分享到:
评论

相关推荐

    java实现多次HttpURLConnection共享session

    使用Apache HttpClient库可以更方便地处理session共享,因为它提供了更强大的功能和更好的API,但基本原理相同:保存和发送Cookie以保持会话状态。如果你的项目已经包含了HttpClient库,可以考虑使用它来替代...

    彻底解决android用HttpUrlConnection与web服务器之间session保持问题

    在Android开发中,当使用HttpURLConnection与Web服务器进行通信时,常常遇到的一个问题是无法正确保持session,导致每次请求都被服务器视为新的独立会话。这主要由于HTTP协议本身的无状态特性,以及Android客户端与...

    Android用HttpConnection访问网络时实现类似浏览器自动保持上一次会话的功能

    需要注意的是,这种方式适用于简单的Cookie管理,如果服务器使用了更复杂的会话管理机制(如Session ID),可能需要额外的处理。同时,随着HTTPS的普及,考虑使用OkHttp这样的第三方库,它们提供了更好的Cookie管理...

    AndroidHttpSession

    使用HttpURLConnection,我们需要设置请求方法(如`setRequestMethod("POST")`)、添加请求头(如`addRequestProperty("Cookie", "sessionID=...")`),以及写入请求体(POST数据)。在接收响应时,可以通过`...

    【Java】java.net.HttpURLConnection的使用.doc

    - **直接方式**:可以通过`getHeaderField("Set-Cookie")`获取服务器返回的Cookie,然后在下一次请求时,使用`setRequestProperty("Cookie", sessionid)`设置Cookie。如下所示: ```java HttpURLConnection huc ...

    php设置session值和cookies的学习示例_.docx

    其中,`request`方法用于发送网络请求,并在请求头中添加了`sessionId`作为Cookie的一部分。另外,`loginRequest`方法模拟了登录过程,并保存了Session ID。 #### 结论 通过以上分析,我们可以总结出以下几点: -...

    Android Volly 和PHP服务端通信(包含Cookie和Session),FinalDB数据库使用

    在Android端,需要确保每次请求都携带正确的Session ID,以保持会话的连续性。 2. **PHP服务端的实现**: - 创建Session:在PHP中,`session_start()`函数用于开启或恢复一个会话。可以使用`$_SESSION`数组存储...

    AutoUtil.rar

    当用户登录成功后,服务器会将SessionID返回给客户端,客户端在后续的请求中携带这个SessionID,服务器通过检查SessionID来识别用户身份,从而实现会话保持。 在"AutoUtil"项目中,开发者巧妙地利用了这一机制。...

    实现自动登陆(java) 实现自动登陆(java)

    服务器会将Session ID与用户的会话数据关联,并在后续请求中通过Cookie回传Session ID。客户端只需保持这个Cookie,服务器就能识别出同一用户的不同请求。 为了安全,登录信息通常需要加密传输。HTTPS是一种安全的...

    php设置session值和cookies的学习示例

    huc.addRequestProperty("Cookie", sessionId); // 设置Cookie头 huc.connect(); //... } } ``` 通过在请求中添加`Cookie`头,我们可以将浏览器保存的session ID传递给服务器,从而保持会话状态。这样,即使在...

    Android Cookie 深度理解

    除了Cookie,还有其他的会话管理方式,例如Token(如JWT)、SessionID等。它们与Cookie相比,各有优缺点,开发者需要根据应用场景选择合适的方法。 总结,理解并正确使用Cookie对于Android开发者来说至关重要,无论...

    java后台http请求.rar

    本教程将深入讲解如何在Java中实现GET和POST两种HTTP请求方法,并讨论如何处理会话(Session)以保持用户状态。 首先,让我们了解GET和POST的区别。GET请求通常用于获取资源,它将参数附加到URL上,限制了数据长度...

    cookieTest

    - 登录状态维持:登录成功后,服务器返回一个Session ID的Cookie,客户端保存并附带在后续请求中,服务器根据Session ID识别用户。 - 跨域资源共享(CORS):Cookie可以在跨域请求中发送,但需遵循特定的安全规则...

    Java模拟登录百度Demo

    在Java中,我们可以使用`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp来实现。这里我们可能主要使用`HttpURLConnection`,因为它是Java标准库的一部分,无需额外引入依赖。 1. **构建请求头**: ...

    QQ登录代码2

    如果验证成功,服务器会返回一个会话ID(session ID)给客户端,用于后续的交互,以保持用户登录状态。 在实现过程中,开发者可能面临各种挑战,例如处理网络异常、防止SQL注入攻击、优化查询性能等。对于网络异常...

    用java客户端程序模拟校园网网页认证

    在完成登录后,服务器通常会返回一个包含session ID或者cookie的响应,这些信息用于后续的无状态会话。Java客户端程序需要正确处理这些信息,将其保存并在后续的网络请求中携带,以保持会话的有效性。 3. **Cookie...

    HttpsClient.rar

    4. **会话终止**:当通信结束后,会话可能会被终止,或者通过会话重用技术(如Session ID或Session Resumption)节省资源。 在Java中,处理HTTPS请求通常涉及以下关键类和方法: 1. **`javax.net.ssl.SSLContext`*...

    运用爬虫模拟登陆

    登录成功后,服务器通常会返回一个Session ID,通常以Cookie的形式。我们需要保存这个Cookie,以便后续的请求能继续维持会话。 **6. 防反爬策略:** - 用户代理:设置合适的User-Agent,模拟浏览器行为。 - 间隔...

    利用JSON,通过Android客户端访问web服务器,实现一个登录功能.zip

    Android提供了`HttpURLConnection`类,但更推荐使用`OkHttp`这样的第三方库,因为它提供了更好的性能和易用性。使用OkHttp,我们可以创建一个`Request`对象,指定URL和HTTP方法(如POST或GET),然后通过`...

    使用Java进行邮件短信发送

    主要的接口包括`Session`(会话)、`Message`(消息)、`Store`(存储)和`Transport`(传输)。在使用JavaMail API之前,我们需要配置相关的属性,比如SMTP服务器地址、端口、用户名和密码等,这些可以通过`...

Global site tag (gtag.js) - Google Analytics