examples - ¿Cuál es la utilidad de la apatridia en JSF?
jsf h input (2)
El punto es solo mantener el estado cuando hay un estado real para mantener.
Uno de los grandes problemas con JSF ha sido la ampliación de escala.
Básicamente has tenido dos opciones con JSF:
almacenar estado en el servidor - pros: tiempo de respuesta más rápido; contras: necesita cargar un montón de memoria para manejar más de aproximadamente 2-300 usuarios "simplemente navegando", por ejemplo, antes de iniciar sesión o agregar algo al carrito
almacenar estado en cliente - pros: elimina el límite de memoria; contras: aumenta el ancho de banda del servidor ya que el árbol de componentes debe enviarse al cliente cada vez
Se supone que Stateless debe garantizar que JSF se pueda usar para servir contenido de manera eficiente mientras que el usuario no tiene ningún estado que deba mantenerse.
Hay mejoras adicionales, como permitir que el árbol de componentes se reutilice donde tenga sentido, pero la idea es permitir que la aplicación se amplíe mejor.
Según este blog JSF se va apátrida. El problema de usar JSF no es que haga que guardar y restaurar el estado sea una tarea. ¿Cuál es el punto de JSF convertirse en apátridas? ¿Puede por favor proporcionar un ejemplo donde esto puede ser útil?
En primer lugar, me gustaría aclarar que JSF no es exactamente "quedarse sin estado" en su totalidad. JSF solo agrega una nueva característica que permite a los desarrolladores crear vistas / formularios sin estado a pedido.
El ahorro de estado es particularmente útil en formas manipuladas dinámicamente con, por ejemplo, partes procesadas ajax condicionalmente. Recuerda el estado del formulario en las devoluciones de datos basadas en ajax. En otras palabras, son aquellos formularios en los que absolutamente necesita un bean administrado con ámbito de vista en lugar de un bean administrado con ámbito de solicitud. En el caso de formas estáticas vinculadas a un bean de ámbito de solicitud, el estado podría recrearse fácilmente por solicitud en función del archivo de vista y, por lo tanto, no necesariamente debe guardarse.
El ahorro de estado tiene en el caso de la administración de ahorro de estado del lado del servidor, sin embargo, un costo en términos de memoria del servidor y creación de sesión. Además, tiene la desventaja adicional de que se produciría una ViewExpiredException
durante una devolución de datos mientras la sesión ha caducado. Todo esto se puede resolver configurando la administración de ahorro de estado en el lado del cliente. Pero esto, a su vez, tiene un costo en términos de ancho de banda de red y menor rendimiento debido a la serialización.
Por ejemplo, en el caso de sitios web grandes que cubren una sección "pública" y "restringida", le gustaría posponer la creación de la sesión hasta que el usuario haya iniciado sesión. Sin embargo, si tiene un formulario de inicio de sesión JSF en la parte pública, entonces La sesión aún se crearía simplemente accediendo a esa página. Este es un costo innecesario si el formulario no tiene básicamente ningún estado dinámico y está vinculado a un bean de ámbito de solicitud.
Es cierto que este costo es insignificante si tiene un hardware de vanguardia, pero no es insignificante si tiene relativamente muchos visitantes y / o un hardware relativamente pobre. En ese caso, medir es saber. Además, no siempre es posible quedarse sin estado, perdería el beneficio y la experiencia de tener formas / vistas manipuladas dinámicamente. Sin embargo, teóricamente, podría mantener el estado en base a cada solicitud jugando con campos de entrada ocultos y / o parámetros de solicitud personalizados.
Se debe tener en cuenta que la apatridia tiene una desventaja adicional de que teóricamente es más fácil realizar un ataque CSRF si hay un agujero XSS abierto. Afortunadamente, con JSF2 / Facelets ya es muy difícil tener un agujero XSS. La única forma de hacerlo es usar <h:outputText escape="false">
para volver a mostrar los datos controlados por el usuario.
Ver también:
- ¿Por qué JSF guarda el estado de los componentes UI en el servidor?
- ¿Estoy bajo riesgo de ataques CSRF en un formulario POST que no requiere que el usuario esté conectado?
- Prevención de ataques CSRF, XSS y SQL Injection en JSF
- ¿Cómo se comportan las diferentes fases del ciclo de vida de JSF en una vista sin estado que contiene un formulario?