Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Пример сесии на JSP


Автор: grisha 15.2.2005, 16:01
Нужен пример использования сессии на jsp не на java а именно на jsp
Как ее создать как передавать значения сесии как их потом извлекать и т.д.

Автор: batigoal 15.2.2005, 16:50
Цитата(grisha @ 15.2.2005, 16:01)
...использования сессии на jsp не на java а именно на jsp

Не понял, это как?

А вообще, даже я лично уже пару раз здесь писал:

Код

session.setAttribute("name", Object);
Object obj = (Object)session.getAttribute("name");

Создавать ее не надо, сама справится smile

Автор: grisha 17.2.2005, 10:23
Вобще нужно через сессию записывать значения в базу из текстового поля, тоесть создать "визард" по записи данных в базу Допустим с начала пишем имя потом кликаем next пишем количество и т.д. и до тех пор пока не нажать кнопку финиш в базу ничего не пишеться а храниться все в сессии

Автор: Domestic Cat 17.2.2005, 10:27
Ну вот Lamer George тебе и сказал как делать.

Автор: grisha 17.2.2005, 10:44
А что такое параметр "name"


session.setAttribute("name", Object);
Object obj = (Object)session.getAttribute("name");

Автор: Шмель 17.2.2005, 12:27
Это "имя" объекта, с помощью которого ты сможешь извлечь объект из сессии

Автор: grisha 17.2.2005, 14:21
E:\Program Files\Apache Software Foundation\Tomcat\jsp\session_jsp.java:42: cannot resolve symbol
symbol : variable Object
location: class org.apache.jsp.session_jsp
session.setAttribute("name", Object);
^
1 error


А что он от меня сейчас хочет
Код



<HTML>
<HEAD>
   <TITLE></TITLE>
</HEAD>
<BODY>
<%
session.setAttribute("name", Object);
Object obj = (Object)session.getAttribute("name");
%>
</BODY>
</HTML>

Автор: batigoal 17.2.2005, 14:53
Ну вот, смотри:

Код

<%@ page contentType="text/html;charset=UTF-8"%>
<%!
   public class MyObject
   {
       public String name;
       public int number;
       public MyObject()
       {
           name="John";
           number=0;
       }
   }
%>

<%!
   MyObject my;
   public void jspInit()
   {
       my = new MyObject();
   }
   public void jspDestroy()
   {
       my = null;
   }
%>
<html>
<%
   my.name = "George";
   session.setAttribute("obj", my);
   my.number = 5;
%>

<body>
   <input type="text" value="<%=((MyObject)session.getAttribute("obj")).name%> <%=((MyObject)session.getAttribute("obj")).number%>">
</body>
</html>


Не судите за убогость, я еще маленький и писал наспех.

Автор: Sardar 17.2.2005, 15:06
grisha не поверишь, он от тебя простит то что ты хочешь сохранить в сессии! smile
Взгляни на эту строку: session.setAttribute("name", Object);
Если не понял, то взгляни еще раз smile

Звиняюсь, опоздал smile

Автор: grisha 17.2.2005, 15:11
Хорошо я за писал на одной странице значения потом перехожу на другую страницу и на другой станице вывести все что ввели на первой???

Автор: batigoal 17.2.2005, 15:18
Ну да, конечно. setAttribute - на первой, getAttribute - на второй.

Автор: grisha 17.2.2005, 15:21
А как перейти без потери сессии ???

Автор: batigoal 17.2.2005, 15:24
Лучше объясните мне как перейти с потерей сессии smile
Она не прервется. Кстати, я вот сам не знаю, когда заканчивается сессия. Подскажите, а?

Автор: grisha 17.2.2005, 15:30
прекратить сессию
session.invalidate();

Добавлено @ 15:34
Прослеживать отсоединение клиента можно используя
HttpSessionAttributeListener тоесть пока клиент на сайте его сесия активна, но после того как он покинул сайт (например закрыл IE) его сесия становится неактивной(промежуток времени в течении которого сесия становится неактивной задается в дескрипторе развертывания
<session-config>
<session-timeout>1</session-timeout>
</session-config>
)перед тем как сесия становится неактивной из сесии удаляются атрибуты и мы в методе attributeRemoved(интерфейс HttpSessionAttributeListener) получаем имя сесии которая удаляется

Автор: batigoal 17.2.2005, 15:36
Ясно. А когда она заканчивается естественным путем?

Автор: grisha 17.2.2005, 15:37
Но наверно на серваке выставляеться сколько держать сессию...

Автор: batigoal 17.2.2005, 15:41
После ухода с сайта?

Автор: grisha 17.2.2005, 15:45
Ага
Добавлено @ 15:47
Ну вот код одной страницы
Код




<%@ page contentType="text/html;charset=UTF-8"%>
<%!
   public class MyObject
   {
       public String name;
       public int number;
       public MyObject()
       {
           name="ABC";
           number=0;
       }
   }
%>

<%!
   MyObject my;
   public void jspInit()
   {
       my = new MyObject();
   }
   public void jspDestroy()
   {
       my = null;
   }
%>
<html>
<%
   my.name = "ABC";
   session.setAttribute("obj", my);
   my.number = 51;

%>

<body>
   <input type="text" value="<%=((MyObject)session.getAttribute("obj")).name%> <%=((MyObject)session.getAttribute("obj")).number%>">


</body>

</html>




а вот код другой

Код



<%@ include file ="session.jsp"%>
    <td>"<%=((MyObject)session.getAttribute("obj")).name%> <%=((MyObject)session.getAttribute("obj")).number%>"</td>





Вот а теперь по идеи я пишу значения на одной
Добавлено @ 15:48
странице в текстовое поле а на другой вывожу его то как мне перейти на другую без потери сессии ???

Автор: grisha 17.2.2005, 16:02
Тоесть я все правильно пишу или нет ???

Автор: batigoal 17.2.2005, 16:07
Дык проверь smile
Только не понимаю, зачем инклюд

Вот пример с двумя страницами:

Утебя есть класс MyObject (на сей раз в отдельном файле)
Код

package mypack;
public class MyObject
{
   public String name;
   public int number;
   public MyObject()
   {
       
   }
}



Есть страница Test.jsp, на которой ты создаешь и прикрепляешь объект, выводишь ссылку на другую страницу:
Код

<%@ page contentType="text/html;charset=UTF-8" import="mypack.MyObject"%>

<%!
   MyObject my;
   public void jspInit()
   {
       my = new MyObject();
   }
   public void jspDestroy()
   {
       my = null;
   }
%>
<html>
<%
   my.name = "George";
   my.number = 5;
   session.setAttribute("obj", my);
%>

<body>
<a href="Test2.jsp">Test2.jsp</a>
</body>
</html>


Страница Test2.jsp выводит информацию из приврепленного объекта:
Код

<%@ page contentType="text/html;charset=UTF-8" import="mypack.MyObject"%>

<html>
<body>
<input type="text" value="<%=((MyObject)session.getAttribute("obj")).name%> <%=((MyObject)session.getAttribute("obj")).number%>">
</body>
</html>

Автор: grisha 17.2.2005, 17:15
Написал все как Ты говориш а при переходе на Test2 он говорит
Код


HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:284)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:200)


root cause

java.lang.ClassCastException
org.apache.jsp.session1_jsp._jspService(session1_jsp.java:60)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:284)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:200)


note The full stack trace of the root cause is available in the Tomcat logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.16


Автор: batigoal 17.2.2005, 17:32
Проверь правильность имени страницы, находятся ли они в одном каталоге. Попробуй убрать динамическое содержимое и оставить только HTML-код.

Автор: grisha 18.2.2005, 11:18
Файлы на ходяться в одной директории

Вобще их три

Myobject.jsp

Код

<%!
public class MyObject
{
   public String name;
   public int number;
   public MyObject()
   {


   }
}
%>



session.jsp

Код

<%@ include file ="Myobject.jsp"%>
<%!
   MyObject my;
   public void jspInit()
   {
       my = new MyObject();
   }
   public void jspDestroy()
   {
       my = null;
   }
%>
<html>
<%

   my.name = "George";
   my.number = 5;
   session.setAttribute("obj", my);

%>

<body>
<a href="session1.jsp">session1.jsp</a>
</body>
</html>



session1.jsp

Код

<%@ include file ="Myobject.jsp"%>
<html>
<body>
<input type="text" value="<%=((MyObject)session.getAttribute("obj")).name%> <%=((MyObject)session.getAttribute("obj")).number%>">
</body>
</html>




И при переходе с session на sesson1 получаем вот что

Код

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:284)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:200)


root cause

java.lang.ClassCastException
org.apache.jsp.session1_jsp._jspService(session1_jsp.java:60)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:284)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:200)


note The full stack trace of the root cause is available in the Tomcat logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.16



Почему оно не работает ???

Автор: batigoal 18.2.2005, 14:01
Во-первых, MyObject надо выделить не в страницу, а в класс (MyObject.java), при этом его название должно ТОЧНО совпадать с именем класса (а то у тебя буква "о") маленькая. Если ты используешь какую-нибудь среду разработки, тогда класс у тебя будет лежать не там же, где страницы, а отдельно (скорее всего \src\mypack).

Во-вторых, инклюд тогда не понадобится, но понадобится импорт. Вставь код дословно, ну кроме названий страниц.

В-третьих, строчку
Код

<%@ page contentType="text/html;charset=UTF-8" import="mypack.MyObject"%>

лучше не забывать.

Автор: grisha 18.2.2005, 16:21
Спасибо за ответ я уже сам два часа назад к этому дошол



Спасибо за помощь все работает!!!!


Можно тему закрывать....

Автор: batigoal 18.2.2005, 16:53
Рад, что у тебя все получилось smile обращайся

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)