jsp - servlet - Cómo configurar la lista de archivos de bienvenida en web.xml
welcome file list servlet (4)
Se basa en desde qué archivo está intentando acceder a esos archivos.
Si está en la misma carpeta donde está el archivo de proyecto en funcionamiento, puede usar solo el nombre del archivo. sin necesidad de camino
Si está en la otra carpeta que está debajo de la misma carpeta principal de su archivo de proyecto en funcionamiento, puede usar una ubicación como la siguiente /javascript/sample.js
En su ejemplo, si está tratando de acceder a su archivo js desde su archivo html, puede usar la siguiente ubicación
../javascript/sample.js
el prefijo ../ irá a la carpeta principal del archivo (Folder upward journey)
Tengo esto en mi documento web.xml. Estoy tratando de tener una lista de bienvenida, así que ya no necesito escribir la ruta de la página de inicio. Pero cada vez que hace clic en la aplicación en mi página de Tomcat, aparece el recurso solicitado no disponible.
<listener>
<listener-class>web.Init</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>web.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
Mi servlet para la página jsp
package web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class IndexServlet extends HttpServlet
{
private Logger logger = Logger.getLogger(this.getClass());
private RequestDispatcher jsp;
public void init(ServletConfig config) throws ServletException
{
ServletContext context = config.getServletContext();
jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
logger.debug("doGet()");
jsp.forward(req, resp);
}
}
¿Por qué todavía no funciona? Todavía necesito escribir el / index en mi url ... ¿Cómo hacer esto correctamente?
Supongo que lo que quiere es que su servlet de índice actúe como la página de bienvenida, así que cambie a:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
Para que se use el servlet de índice. Tenga en cuenta que necesitará un contenedor de especificaciones de servlet 2.4 para poder hacer esto.
Tenga en cuenta también que @BalusC obtiene mi voto, ya que su servlet de índice es superfluo.
Vi una buena solución en este enlace que puede ayudar a los lectores del problema de manejo del servlet defulat al usar el patrón de URL de cadena vacía "":
@WebServlet("")
o
<servlet-mapping>
<servlet-name>yourHomeServlet</servlet-name>
<url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>
/index.jsp
colocar el archivo JSP en /index.jsp
en lugar de /WEB-INF/jsp/index.jsp
. De esta forma, todo el servlet es superfino por cierto.
WebContent
|-- META-INF
|-- WEB-INF
| `-- web.xml
`-- index.jsp
Si está absolutamente seguro de que necesita invocar un servlet de esta manera extraña, debe /index.jsp
en un patrón de URL de /index.jsp
lugar de /index
. Solo necesita cambiarlo para obtener el despachador de request
de la request
lugar de config
y deshacerse del método init()
completo.
En caso de que realmente pretenda tener un "servlet de página de inicio" (y por lo tanto no un archivo de bienvenida, que tiene un propósito completamente diferente, es decir, el archivo predeterminado que se sirve cuando se solicita una carpeta , que no es específicamente la raíz carpeta), entonces debería mapear el servlet en el patrón de URL de cadena vacía.
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
Consulte también Diferencia entre / y / * en el patrón de url de mapeo de servlets .