|
|
### Estructura básica visual del RID-UNRN
|
|
|
Actualmente, el RID utiliza la interfaz gráfica JSPUI. En resumen, ésta interfaz está implementada usando Java Servlets para gestionar la lógica de negocios, y JavaServer Pages (JSP) para producir el código HTML. Los documentos HTML se construyen ensamblando "porciones" generadas por archivos JSP, organizados en un layout común a todas las páginas.
|
|
|
|
|
|
### Servlets y JSPs
|
|
|
La interfaz de usuario web de JSPUI se basa libremente en el modelo MVC (modelo, vista, controlador). La API de gestión de contenido corresponde al modelo, los Servlets de Java son los controladores y las JSP son las vistas. Las interacciones toman la siguiente forma básica:
|
|
|
1. Se recibe una solicitud HTTP de un navegador.
|
|
|
1. Se invoca el servlet apropiado y procesa la solicitud invocando la API pública de la capa de lógica de negocios DSpace.
|
|
|
1. Dependiendo del resultado del procesamiento, el servlet invoca el JSP apropiado.
|
|
|
1. El JSP se procesa y se envía al navegador.
|
|
|
|
|
|
Las razones de este enfoque son:
|
|
|
* Todo el procesamiento se realiza antes de que se invoque el JSP, por lo que cualquier error o problema que ocurra no se produce a la mitad del procesamiento HTML.
|
|
|
* Los JSP contienen el menor código posible, por lo que se pueden personalizar sin tener que profundizar demasiado en el código Java.
|
|
|
* El _servlet org.dspace.app.webui.servlet.LoadDSpaceConfig_ siempre se carga primero. Este es un servlet muy simple que verifica el parámetro de contexto _dspace-config_, desde el descriptor de despliegue de DSpace, y lo usa para localizar _dspace.cfg_. También carga la configuración de Log4j. Es importante que este servlet se cargue primero, ya que si se carga otro servlet, hará que el sistema intente cargar configuraciones DSpace y Log4j, sabiendo que no se encontraría ninguna.
|
|
|
|
|
|
Todos los servlets DSpace son subclases de la clase _DSpaceServlet_. La clase _DSpaceServlet_ maneja algunas operaciones básicas como la creación de un objeto **Context** DSpace (abrir una conexión de base de datos, etc.), la autenticación y el manejo de errores. En lugar de anular los métodos _doGet_ y _doPost_ como lo haría normalmente para un servlet, los servlets DSpace implementan _doDSGet_ o _doDSPost_ que tienen un parámetro de contexto adicional, y permiten que el servlet arroje varias excepciones que pueden manejarse de manera estándar.
|
|
|
|
|
|
#### El Servlet DSpace
|
|
|
1. Procesa el contenido de la solicitud HTTP: esto puede implicar recuperar los resultados de una búsqueda con un término de consulta, acceder al registro de persona física del usuario actual o actualizar un envío en curso.
|
|
|
1. De acuerdo con los resultados de este procesamiento, el servlet debe decidir qué JSP debe mostrarse. Luego, completa los atributos apropiados en el objeto _HttpRequest_ que representa la solicitud HTTP que se está procesando. Esto se realiza invocando el método _setAttribute_ del objeto _javax.servlet.http.HttpServletRequest_ que se pasa al servlet desde **Tomcat**.
|
|
|
1. Por último, reenvía el control de la solicitud al JSP apropiado utilizando el método _JSPManager.showJSP_.
|
|
|
1. El método JSPManager.showJSP utiliza el mecanismo de reenvío de servlet Java estándar que, seguidamente, se utiliza para reenviar la solicitud HTTP al JSP.
|
|
|
1. **Tomcat** procesa el JSP y los resultados se envían de vuelta al navegador del usuario.
|
|
|
|
|
|
Excepción al modelo `servlet/JSP`
|
|
|
La 'página de inicio', `index.jsp`, recibe la solicitud HTTP directamente de Tomcat sin que se invoque primero un servlet. Esto se debe a que en la especificación del servlet 2.3, no existe manera de asignar un servlet para manejar solo las solicitudes hechas a '/'. Es decir, por defecto, Tomcat reenvía las solicitudes de '/' a index.jsp. Para tratar de hacer las cosas lo más limpias posible, index.jsp contiene un código simple que normalmente iría en un servlet, y luego reenvía a home.jsp usando el método _JSPManager.showJSP_. Esto significa que se pueden crear versiones localizadas de la 'página de inicio' colocando un home.jsp personalizado en `[dspace-source]/jsp/local`, de la misma manera que otros JSP.
|
|
|
|
|
|
### Página estática en el RID-UNRN
|
|
|
Para crear una página en la estructura de DSpace es necesario:
|
|
|
* Página JSP: la página se debe incluir dentro de la carpeta `/main/webapp` de JSPUI.
|
|
|
* Servlet: cada página deberá tener un servlet que responda a sus request. Los servlets se almacenan en la carpeta `/main/java/org/dspace/app/webui/servlet`.
|
|
|
* Mapeo: cada servlet se mapea en el archivo web.xml, ubicado en la carpeta `/main/webapp/WEB-INF`.
|
|
|
|
|
|
#### Estructura base de una página estática en JSP
|
|
|
```jsp
|
|
|
<%@ page contentType="text/html;charset=ISO-8859-1" %>
|
|
|
<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %>
|
|
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
|
|
|
|
|
<dspace:layout title="Ejemplo: Título de la página">
|
|
|
<%-- Contenido --%>
|
|
|
</dspace:layout>
|
|
|
```
|
|
|
|
|
|
#### Estructura base de un Servlet
|
|
|
```java
|
|
|
package org.dspace.app.webui.servlet;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.sql.SQLException;
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import org.dspace.app.webui.util.JSPManager;
|
|
|
import org.dspace.authorize.AuthorizeException;
|
|
|
import org.dspace.core.Context;
|
|
|
|
|
|
public class EjemploServlet extends DSpaceServlet
|
|
|
{
|
|
|
protected void doDSGet(
|
|
|
Context context,
|
|
|
HttpServletRequest request,
|
|
|
HttpServletResponse response
|
|
|
) throws ServletException, IOException, SQLException, AuthorizeException
|
|
|
{
|
|
|
JSPManager.showJSP(request, response, "/ejemplo.jsp");
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### Mapeo de los servlets con los JSP
|
|
|
En el archivo `/main/webapp/WEB-INF/web.xml` definimos, en primer lugar, el servlet que vamos a usar:
|
|
|
```xml
|
|
|
<servlet>
|
|
|
<servlet-name>ejemplo</servlet-name>
|
|
|
<servlet-class>org.dspace.app.webui.servlet.EjemploServlet</servlet-class>
|
|
|
</servlet>
|
|
|
```
|
|
|
Luego, mapeamos el servlet con la la URL de página que queremos utilizar
|
|
|
```xml
|
|
|
<servlet-mapping>
|
|
|
<servlet-name>ejemplo</servlet-name>
|
|
|
<url-pattern>/ejemplo</url-pattern>
|
|
|
</servlet-mapping>
|
|
|
```
|
|
|
|
|
|
### Compilar el código
|
|
|
|
|
|
Fuente: https://wiki.duraspace.org/display/DSDOC5x/Application+Layer |
|
|
\ No newline at end of file |