Статус HTTP 404 - Servlet [ServletName] недоступен
Проблема: мой index.jsp с web.xml продолжает входить в HTTP 404 и 500
Я использую Tomcat6 .
Это из 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>
Когда я в регистрации:
и я нажимаю имя и фамилию, я иду в 404, сообщение:
Статус HTTP 404 - Servlet RegistrationServlet недоступен
Тип Статус отчета
сообщение Сервлет РегистрацияСервлет недоступен
описание Запрашиваемый ресурс (Servlet RegistrationServlet недоступен) недоступен.
Apache Tomcat / 6.0.35
Как вы думаете, что является причиной этой ошибки?
Класс RegistrationServlet
находится под файлом RegistrationServlet.java
в папке src/coreservlets/
Я проверил web.xml, но вроде бы все в порядке, но вот (если это будет полезно):
<?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>
Я пытался исправить этого маленького преступника в течение последних двух дней, но ничего, любая помощь будет высоко ценится.
РЕДАКТИРОВАТЬ:
По запросу, вот 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);
}
}
}
Также вот дерево проекта:
4 ответа
Ваш URL полностью в порядке. Если бы URL был неправильным, вы бы получили сообщение 404, как показано ниже:
Запрашиваемый ресурс
register
не доступен
Но вы вместо этого получили
Servlet
RegistrationServlet
не доступен
Это означает, что сервлет был найден, но он не может быть выполнен, потому что его создание и инициализация завершились неудачей с исключением. Под прикрытием Tomcat один из следующих шагов не удался:
Servlet servlet = new RegistrationServlet();
servlet.init(servletConfig);
servlet.init();
Вы должны прочитать журналы сервера для этого исключения и затем исправить код соответствующим образом.
Хотя с вашим URL все в порядке, он подвержен ошибкам в контексте. Вместо этого вы бы хотели указать URL, относящийся к домену:
<form action="${pageContext.request.contextPath}/register">
См. Также этот связанный ответ: Браузер не может получить доступ / найти относительные ресурсы, такие как CSS, изображения и ссылки, при вызове сервлета, который пересылает в JSP
Э-э... это очевидно, но есть ли RegistrationServlet.class в /WEB-INF/classes/coreservlets/? Вы скомпилировали? (С Tomcat, вам НУЖНО скомпилировать явно? Было бы удивительно, если бы вы этого не сделали.)
Если при создании сервлета возникнет какая-либо ошибка, мы получим этот тип ошибки, даже если библиотеки отсутствуют WEB-INF\lib
папка. Убедитесь, что все библиотеки размещены в WEB-INF\lib
,
Возможно, что путь для регистрации не учитывает путь к контексту. Хороший способ исправить это - использовать тег URL ядра jstl -
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
...
<c:url value="/register" var="url">
<form action="${url}">
Это гарантирует, что если ваш контекстный путь будет добавлен в URL.