java - que - HTTP Status 404-El servlet[ServletName] no está disponible
servlet java ejemplo (4)
El problema : Mi index.jsp con web.xml continúa en HTTP 404 y 500
Estoy usando Tomcat6.
Esto es de index.jsp:
<legend>Registration</legend>
<form action="./register"> <%-- Address from web.xml --%>
First name: <input type="text" name="firstName"><br>
Last name: <input type="text" name="lastName"><br>
<input type="submit" value="Register">
</form>
Cuando estoy en el registro:
y presiono el nombre y el apellido, voy a 404, el mensaje:
HTTP Status 404 - Servlet RegistrationServlet no está disponible
tipo informe de estado
mensaje Servlet RegistrationServlet no está disponible
descripción El recurso solicitado (Servlet RegistrationServlet no está disponible) no está disponible.
Apache Tomcat / 6.0.35
¿Cuál crees que es la causa de ese error?
La clase RegistrationServlet
encuentra debajo del archivo RegistrationServlet.java
en la carpeta src/coreservlets/
Comprobé web.xml pero parece estar bien, pero aquí está (si fuera útil):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>ShowBalance</servlet-name>
<servlet-class>coreservlets.ShowBalance</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowBalance</servlet-name>
<url-pattern>/show-balance</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RandomNumberServlet</servlet-name>
<servlet-class>coreservlets.RandomNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomNumberServlet</servlet-name>
<url-pattern>/random-number</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegistrationServlet</servlet-name>
<servlet-class>coreservlets.RegistrationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistrationServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PrimeServlet</servlet-name>
<servlet-class>coreservlets.PrimeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PrimeServlet</servlet-name>
<url-pattern>/prime</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
He estado tratando de arreglar este pequeño culpable durante los últimos dos días, pero nada, cualquier ayuda sería muy apreciada.
EDITAR:
Según lo solicitado, aquí está RegistrationServlet
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RegistrationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
synchronized (session) {
NameBean nameBean = (NameBean) session.getAttribute("name");
if (nameBean == null) {
nameBean = new NameBean();
session.setAttribute("name", nameBean);
}
nameBean.setFirstName(request.getParameter("firstName"));
nameBean.setLastName(request.getParameter("lastName"));
String address = "/WEB-INF/mvc-sharing/ShowName.jsp";
RequestDispatcher dispatcher = request
.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
}
También aquí está el árbol del proyecto:
Err ... esto es obvio, pero es RegistrationServlet.class en / WEB-INF / classes / coreservlets /? ¿Compiló? (Con Tomcat, ¿NECESITA compilar explícitamente? Sería sorprendente que no lo hiciera).
Podría ser que la ruta de registro no tenga en cuenta la ruta del contexto. Una buena forma de arreglar esto sería usar la etiqueta jstl core url -
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
...
<c:url value="/register" var="url">
<form action="${url}">
Esto asegurará que si su ruta de contexto se agrega a la url.
Si se produce un error al instanciar el servlet, obtendremos este tipo de error, incluso si faltan bibliotecas en la carpeta WEB-INF/lib
. Asegúrese de que todas las bibliotecas estén ubicadas en WEB-INF/lib
.
Tu URL está completamente bien. Si la URL era incorrecta, habría recibido un mensaje 404 como el siguiente:
El
register
recursos solicitado no está disponible
Pero en su lugar tienes
Servlet
RegistrationServlet
no está disponible
Esto significa que se encontró el servlet, pero que no se pudo ejecutar porque su construcción y la inicialización fallaron con una excepción. Bajo las cubiertas de Tomcat, básicamente uno de los siguientes pasos ha fallado:
Servlet servlet = new RegistrationServlet();
servlet.init(servletConfig);
servlet.init();
Necesita leer los registros del servidor para esta excepción y luego corregir el código en consecuencia.
Si bien su URL es completamente buena, es propensa a errores en los cambios en el contexto. En su lugar, preferiría especificar una URL relativa al dominio:
<form action="${pageContext.request.contextPath}/register">
Consulte también esta respuesta relacionada: el navegador no puede acceder / encontrar recursos relativos como CSS, imágenes y enlaces cuando llama a un servlet que lo reenvía a un JSP