sirve servlet que para instalar example ejemplo contenedor java jsp tomcat servlets

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