2010-09-20 12 views
5

Necesito escribir una pequeña clase de Java que me permita agregar y leer desde la sesión de usuario actual.Cómo acceder a la sesión desde una clase de Java

Todo lo que veo se refiere a Servlets, pero me gustaría utilizar una simple clase vieja.

¿Alguien puede ayudar a este Novato de Java?

Gracias

Respuesta

1

Sí, sólo tiene que pasar la HttpRequest a su clase de servlet.

En el servlet hacer algo como esto,

cmd.execute(request); 

En su clase de hacer algo como esto,

public class Command implements ICommand { 
    . 
    . 
    public void execute(HttpServletRequest request){ 
     HttpSession sess = request.getSession(false); 
    } 
    . 
    . 
    . 
} 
+0

La razón por la que no quiero usar un servlet es porque no sé cómo usarlos, por lo tanto, quiero solo una clase. Si puede proporcionar código de muestra aunque ... – griegs

+2

¡Oh! bueno. ¿Qué estás haciendo entonces? Quiero decir qué tipo de aplicación estás tratando de desarrollar. –

+0

Tratando de desarrollar una aplicación web y quiero un lugar centralizado para administrar mi sesión. Pensé que simplemente importaría una biblioteca para acceder a la sesión, pero ahora creo que necesito pasar la httpsession a mi clase – griegs

2

El concepto general de una "sesión" es en realidad un almacenamiento de datos para una interacción entre un cliente y servidor HTTP. La administración de la sesión es manejada automáticamente por todos los Servlets HTTP. ¿Qué marco?

Si solo desea almacenar información para una aplicación de consola para recordar la información entre ejecuciones, considere usar Xml para guardar/cargar datos de un archivo.

+1

Sé lo que es una sesión. Lo que quiero es la capacidad de llamar a una clase desde mi página jsp y leer y escribir en la sesión. – griegs

+0

Oh, si quieres acceder a la sesión desde JSP es tan simple como algo como esto: session.setAttribute ("test", "value") ;. Eche un vistazo a http://www.jsptut.com/Sessions.jsp –

+1

sesión se configura automáticamente como una variable en una página JSP, al igual que la solicitud es. –

1

Utilice un marco MVC basado en componentes que abstraiga todos los feos detalles de la API de Servlet para que termine con cero javax.servlet importaciones. Ejemplos de tales son JSF2 y Struts2. frijol

En JSF2 por ejemplo, que usted acaba de declarar User clase como una sesión de ámbito gestionado:

@ManagedBean 
@SessionScoped 
public class User { 
    // ... 
} 

Luego, en la "acción" de frijol que se está utilizando para procesar el envío del formulario, hacer referencia a ella como propiedad administrada:

@ManagedBean 
@RequestScoped 
public class SomeFormBean { 

    @ManagedProperty(value="#{user}") 
    private User user; 

    public void submit() { 
     SomeData someData = user.getSomeData(); 
     // ... 
    } 
} 

Eso es todo.

Si desea adherirse a la API de Servlet sin formato, debe aceptar el hecho de que debe pasar los objetos sin procesar HttpServletRequest/HttpServletResponse. Lo mejor que puede hacer es rodearlo con homegrow some abstraction (pero luego termina como lo que JSF2/Struts2 ya está haciendo, así que ¿por qué crecería? A menos que fuera por afición/autoaprendizaje :)).

0

En general, como se menciona en las otras respuestas, la sesión en muchos sentidos actúa como una tienda. Entonces, para interactuar con una sesión de otra clase que está fuera del marco de Servlet/JSP, es necesario obtener la referencia a la sesión en cuestión. Hay pocas maneras en que se puede lograr:

1) Paso de la sesión como parte de un parámetro de método (ya mencionado en otras respuestas) 2) Vinculando la sesión a una variable local de subproceso en la ejecución de subproceso actual (consulte ThreadLocal). Este método tiene la ventaja de no declarar parámetros específicos en la firma del método de la clase que necesita usar la sesión. Además, si el hilo de llamada pasa por una biblioteca y vuelve a llamar a una clase específica, p. Servlet-> YourClass0 -> Apache Some Library -> YourClass1, la sesión también estará disponible para YourClass1.

Sin embargo, el subproceso local también debe borrarse cuando el subproceso que se ejecuta retorna a través del componente inicial (por ejemplo, servlet); de lo contrario, ciertamente podría haber pérdidas de memoria.

Además, consulte su marco específico para el tratamiento de sesiones, el mecanismo anterior funciona bien en Tomcat.

Cuestiones relacionadas