Aviv C פורסם 2011 באוגוסט 19 Share פורסם 2011 באוגוסט 19 אני כותב תוכנית ב- 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 למשל), אז גם פיתרון בעזרת הסיפרייה הזאת יתקבל בברכה. קישור לתוכן שתף באתרים אחרים More sharing options...
etal פורסם 2011 באוגוסט 19 Share פורסם 2011 באוגוסט 19 session ממומש בדרך כלל על ידי cookie. בשביל שזה יעבוד אתה צריך לקרוא את ה-cookies שקיבלת בחזרה מהשרת בקריאה ל-first ולצרף אותם לקריאה שלך ל-second. קישור לתוכן שתף באתרים אחרים More sharing options...
Aviv C פורסם 2011 באוגוסט 19 מחבר Share פורסם 2011 באוגוסט 19 תוכל לתת קוד דוגמה? זה פשוט בדיוק מה שניסיתי לחפש אבל לא מצאתי. קישור לתוכן שתף באתרים אחרים More sharing options...
etal פורסם 2011 באוגוסט 20 Share פורסם 2011 באוגוסט 20 עם 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 קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.