実行しようとしている単純なサーブレットHello.Javaに問題があります。 Eclipseで作成し、ファイルをwebapps/ServletTest/WEB-INF/classes
フォルダーに配置してコンパイルし、同じフォルダーにファイルHello.class
を作成しました。次に、web.xmlファイルを変更してサーブレットをマップし、次のアドレスで実行しようとしました。
http://localhost:8080/ServletTest/Hello
ただし、これは機能せず、次のエラーが発生します
HTTPステータス404-
タイプステータスレポート
メッセージ
説明要求されたリソースは利用できません。ApacheTomcat/ 7.0.42
Web.xmlファイルのマッピングは次のようになります。
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>Main.Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
サーブレットのコード:
package Main;
import Java.io.IOException;
import Java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
public Hello() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String path = request.getContextPath();
String ip = request.getRemoteAddr();
out.print("<html>" +
"<title>Hello</title>" +
"Hello World"+ "<br>" +
"Your ip is: " + ip + "<br>" +
"Your path is: " + path
+ "</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
コンパイルされたHello.class
ファイルはフォルダにあるはずです
webapps/ServletTest/WEB-INF/classes/Main
パッケージMain
に含まれていると宣言されているためです。
また、Tomcatの起動ログは/logs/catalina.out
または/logs/catalina.log
で確認できます。
また、Sureshはコメントに正しく含まれています。<servlet>
宣言または@WebServlet
のいずれかを使用してください。両方を使用しないでください。
Web.xmlを削除してみてください。 Tomcat 7+には、注釈@WebServlet("/Hello")
で十分です。
ルートフォルダに適切な権限がない場合、この問題が発生します。したがって、ルートフォルダのプロパティを確認し、読み取り専用のアクセス許可を削除して、[セキュリティ]タブでユーザーをフルアクセスアクセス許可に追加してください。