שמירת ה- Session בין בקשות Http ב- Java - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שמירת ה- Session בין בקשות Http ב- Java


Aviv C

Recommended Posts

אני כותב תוכנית ב- Java שמטרתה לבדוק את השימוש ב- Session עם Servlets.

יש לי שני Servlets:

זה הראשון שמנותב לנתיב first/ :



public class FirstServlet extends HttpServlet {

private static final long serialVersionUID = 1L;



@Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

HttpSession session = request.getSession();

session.setAttribute("user", "aviv");

response.getWriter().println("Done");

}

}

כל מה שאני עושה פה הוא לכתוב ל- Session משתנה של String.

זה השני שמנותב לנתיב second/ :



public class SecondServlet extends HttpServlet {

private static final long serialVersionUID = 1L;



@Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

HttpSession session = request.getSession();

Object user = session.getAttribute("user");

if (user == null)

response.getWriter().println("Failed");

else

response.getWriter().println(user.toString());

}

}

כאן אני מנסה לגשת למשתנה ה- Session, ואם אני לא מצליח אני מחזיר שנכשל.

קוד הקליינט:



public class Main {

public static void main(String[] args) throws IOException {

// First Servlet

URL url = new URL("[url]http://localhost:8080/TestServlets/first"[/url]);

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

System.out.println("First Servlet:");

String line = in.readLine();

while (line != null) {

System.out.println(line);

line = in.readLine();

}

System.out.println("---------------");

// Second Servlet

url = new URL("[url]http://localhost:8080/TestServlets/second"[/url]);

in = new BufferedReader(new InputStreamReader(url.openStream()));

System.out.println("Second Servlet:");

line = in.readLine();

while (line != null) {

System.out.println(line);

line = in.readLine();

}

System.out.println("---------------");


}

}

כמו שאתם רואים, שתי בקשות GET, הראשונה ל- first/ והשנייה ל- second/.

הבעיה היא שהסרבלט השני מחזיר רק failed כשאני מפעיל את תוכנית הקליינט שרשמתי כאן.

בדפדפן, לעומת זאת, אם אני נכנס ל- first ואז ל- second זה כן עובד ומחזיר "aviv".

הבנתי שהדפדפן בעצם שולח את המידע על ה- Session בכל בקשה לדף, ואני בקוד הזה לא עושה את זה, ולכן הדף השני לא מקבל את ה- Session שנוצר קודם.

למרות שהבנתי את זה, ניסיתי לחפש באינטרנט איך להעביר את ה- Session שנוצר בדף הראשון גם אל הדף השני, ולא מצאתי.

מישהו יודע איך לעשות את זה?

הערה: אני משתמש בספריות של Apache HTTP למטרות אחרות (שליחת בקשות POST למשל), אז גם פיתרון בעזרת הסיפרייה הזאת יתקבל בברכה.

קישור לתוכן
שתף באתרים אחרים

עם java.net.URL זה כנראה באמת לא אפשרי. בספרית Apache HTTP יש תמיכה ב-cookies, אני חושב שאם תשתמש ב-HttpClient אחד משותף לשתי הבקשות ה-cookies יעברו אוטומטית ולא תצטרך לעשות שום דבר מיוחד.

אם אתה ממש רוצה לנהל את ה-cookies ידנית ניתן לשלוף אותם מתוך ה-HttpState כמו בדוגמה הזו:

http://www.java-tips.org/other-api-tips/httpclient/how-to-use-http-cookies.html

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...