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>

私が登録しているとき:

ここに画像の説明を入力

name と last-name を入力すると、 404 に入り、次のメッセージが表示されます。

HTTP ステータス 404 - サーブレット登録サーブレットは利用できません

タイプステータス レポート

メッセージサーブレット登録サーブレットは利用できません

説明要求されたリソース (サーブレット登録サーブレットは利用できません) は利用できません。

アパッチ トムキャット/6.0.35

そのエラーの原因は何だと思いますか?

クラスはフォルダ内RegistrationServletのファイルの下にありますRegistrationServlet.javasrc/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>

この 2 日間、この小さな問題を解決しようとしてきましたが、何も解決しませんでした。

編集:

リクエストに応じて、ここにあります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はまったく問題ありません。URL が間違っていると、次のような 404 メッセージが表示されます。

要求されたリソースregisterは利用できません

しかし、あなたは代わりに得ました

サーブレットRegistrationServletは利用できません

これは、サーブレットが見つかったが、その構築と初期化が例外で失敗したために実行できなかったことを意味します。Tomcat のカバーの下では、基本的に次の手順のいずれかが失敗しました。

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

この例外のサーバー ログを読み、それに応じてコードを修正する必要があります。


URL はまったく問題ありませんが、コンテキストが変化するとエラーが発生しやすくなります。代わりにドメイン相対 URL を指定したい場合:

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

この関連する回答も参照してください:ブラウザは、JSP に転送するサーブレットを呼び出すときに、CSS、画像、リンクなどの相対リソースにアクセス/検索できません

于 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

サーブレットのインスタンス化中にエラーが発生した場合、ライブラリがWEB-INF\libフォルダーにない場合でも、このタイプのエラーが発生します。すべてのライブラリが に配置されていることを確認してくださいWEB-INF\lib

于 2013-12-20T14:54:17.710 に答える