5

问题:我的带有 web.xml 的 index.jsp 不断进入 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 不可用

描述请求的资源(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

4 回答 4

5

你的网址完全没问题。如果 URL 错误,您将收到如下 404 消息:

请求的资源register不可用

但你反而得到了

ServletRegistrationServlet不可用

这意味着找到了 servlet,但无法执行它,因为它的构造和初始化失败并出现异常。在 Tomcat 的保护下,基本上以下步骤之一失败了:

Servlet servlet = new RegistrationServlet();
servlet.init(servletConfig);
servlet.init();

您需要阅读此异常的服务器日志,然后相应地修复代码。


虽然您的 URL 完全没问题,但在上下文更改时容易出错。您宁愿指定域相对 URL:

<form action="${pageContext.request.contextPath}/register">

另请参阅此相关答案:Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP

于 2012-07-02T13:04:08.593 回答
1

呃……这很明显,但是 RegistrationServlet.class 在 /WEB-INF/classes/coreservlets/ 中吗?你编译了吗?(使用 Tomcat,您是否需要显式编译?如果您不这样做会很奇怪。)

于 2012-07-02T12:08:13.673 回答
0

可能是注册路径没有考虑上下文路径。解决此问题的一个好方法是使用 jstl 核心 url 标签 -

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
...
<c:url value="/register" var="url">
<form action="${url}">

这将确保您的上下文路径是否添加到 url。

于 2012-07-02T12:32:15.710 回答
0

如果在实例化 servlet 时发生任何错误,即使WEB-INF\lib文件夹中缺少库,我们也会收到此类错误。确保所有库都放在WEB-INF\lib.

于 2013-12-20T14:54:17.710 回答