¿Donde se deben crear los ficheros JSP?

publicado por: Anonymous

Estoy empezando a aprender sobre java web con tomcat y me está dando problemas donde colocar cada fichero. Los servlets y las clases de java, las estoy creando dentro de src pero los ficheros jsp,html, la vista de mi aplicación, donde debería ir dentro de mi proyecto?

Estuve viendo que se agregan dentro de la carpeta WEB-INF pero al no ser pública como puedo acceder a ella mediante servlet's?

solución

Los JSPs y otros recursos de la vista deben ir de lado de los recursos web de la aplicación, esto es, la carpeta webapp, webview, web resources o como sea que esté denominada en tu proyecto. Todos los archivos que estén dentro de tus carpetas fuente (src o como lo configures) irán últimamente a la carpeta WEB-INF/classes, donde residen tus compilados.

Considera que si colocas un archivo JSP dentro de WEB-INF, entonces los usuarios de tu aplicación no pueden acceder a esa información mediante el enlace de JSP. Esto es útil cuando necesitas pre procesar la petición antes de mostrar la vista, clásico de una arquitectura MV* (MVC, MVP, MVVM, etc.).

Por ejemplo, si necesitas cargar una lista de productos de tu fuente de datos (base de datos, servicio web, etc) y mostrarla en la aplicación, se complica más al tener el JSP como acceso directo al cliente puesto que tendrías que colocar código Java en el JSP para obtener la información y luego mostrarla, esto se logra con scriptlets pero esa tecnología no debe utilizarse, no se recomienda. En cambio, al colocar tu archivo JSP dentro de WEB-INF facilitas este proceso al invocar primero el servlet y que este haga un forward a la vista apropiada.

Aquí un ejemplo breve. Se asume que tienes como dependencias en tu proyecto la librería JSTL.

Estructura del proyecto:

src
- edu.ltmj.controller
  + ArticulosServlet.java
Web Resources (o como se llame en tu proyecto)
- WEB-INF
  + articulos.jsp
  + web.xml
- resources
  + (tus archivos de recursos: JS, CSS, imágenes, etc, que son de acceso libre)

Código de ArticulosServlet:

public class ArticulosServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws IOException, ServletException {
        ArticuloService articuloService = new ArticuloService();
        List<Articulo> listaArticulos = articuloService.getListaArticulos(); //se conecta a base de datos u otra fuente de datos para traer la lista de artículos
        req.setAttribute("listaArticulos", listaArticulos);
        req.getRequestDispatcher("WEB-INF/articulos.jsp")
            .forward(req, res);
    }
}

Código de articulos.jsp:

<%--
    Se agrega la librería JSTL
    Indispensable para realizar MV* con JSPs
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Articulos</title>
</head>
<body>
    Lista de artículos:
    <table>
        <thead>
            <tr>
                <th>Nombre</th>
                <th>Precio</th>
            </tr>
        </thead>
        <tbody>
        <c:forEach items="${listaArticulos}" var="articulo">
            <tr>
                <td>${articulo.nombre}</td>
                <td><fmt:formatNumber value="${articulo.precio}" type="currency" maxFractionDigits="3" /></td>
            </tr>
        </c:forEach>
        </tbody>
    </table>
</body>
</html>
Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *