お世話になります。
jspからサーブレット呼び出すときに500エラーが発生します。
ClassNotFoundExceptionが出ており、
web.xmlの設定、またはjspでのform内のURL指定が誤っているのかと
思いましたが、jspからサーブレットを問題なく呼び出せているソースと
比較したところ、web.xmlの記述などには差異は見られませんでした。
ご助言いただければ幸いです。
以下、ソースコード及びエラーメッセージです。
index.jsp
<%@ page contentType="text/html;charset=UTF-8"%> <html> <head> <title>Pakutter</title> </head> <body> <h1>Welcome to Pakutter!!!</h1> <form action = "/pakutter/servlet/Login" method = "Post"> ユーザー名:<input type = "text" name = "name"><br> パスワード :<input type = "text" name = "pass"><br> <input type = "submit" value = "ログイン"> </form> </body> </html>
Login.java
package servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import model.LoginLogic; import model.User; public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String pass = request.getParameter("pass"); // Userインスタンス(ユーザー情報)の生成 User user = new User(name, pass); // ログイン処理 LoginLogic loginLogic = new LoginLogic(); boolean isLogin = loginLogic.execute(user); // ログイン成功時の処理 if (isLogin) { // ユーザー情報をセッションスコープに保存 // HttpSessionインスタンスの取得 HttpSession session = request.getSession(); // セッションスコープにインスタンスを保存 session.setAttribute("loginUser", user); } // ログイン結果画面にフォワード RequestDispatcher dispacher = request.getRequestDispatcher("/WEB-INF/jsp/LoginResult.jsp"); dispacher.forward(request, response); } }
/pakutter/WEB-INF/web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 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>Login</servlet-name> <servlet-class>servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern> /servlet/Login </url-pattern> </servlet-mapping> </web-app>
エラーメッセージ
HTTPステータス 500 - Internal Server Error Type Exception Report メッセージ サーブレットクラス servlet.Login を初期化中にエラーが発生しました 説明 The server encountered an unexpected condition that prevented it from fulfilling the request. 例外 javax.servlet.ServletException: サーブレットクラス servlet.Login を初期化中にエラーが発生しました org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) 原因 java.lang.ClassNotFoundException: servlet.Login org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745)
こちらが問題なく動作するソース。
動作としてはindex.jspで入力された値をResult.javaのサーブレット側で取得し計算を行うというもの。
ClassNotFoundExceptionが発生せず処理を行なえている。
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html > <html> <head> <meta charset=UTF-8"> <title>映画料金計算</title> </head> <body> <h1>映画料金を計算しゃす!</h1> <form action = "/movieFee/servlet/Result" method = "Post"> 性別:<br> 男<input type = "radio" name = "gender" value = "0" required> 女<input type = "radio" name = "gender" value = "1"><br> 年齢:<br> <input type = "number" name = "age" required><br> タイプ:<br> 3D<input type = "radio" name = "type" value = "0" required> 2D<input type = "radio" name = "type" value "1"> <input type = "submit" value = "計算へ"> </body> </html>
Result.java
package servlet; import java.io.IOException; 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("/Result") public class Result extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int age = -1; // リクエストパラメータを取得 request.setCharacterEncoding("UTF-8"); String gender = request.getParameter("gender"); age = Integer.parseInt(request.getParameter("age")); String type = request.getParameter("type"); // Calcクラスのインスタンスを生成 Calc calc = new Calc(); // 計算結果を代入 int result = calc.movieFeeCalc(age, gender, type); request.setAttribute("result", result); getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/jsp/result.jsp").forward(request, response); } }
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 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>Result</servlet-name> <servlet-class>servlet.Result</servlet-class> </servlet> <servlet-mapping> <servlet-name>Result</servlet-name> <url-pattern> /servlet/Result </url-pattern> </servlet-mapping> </web-app>
回答2件
あなたの回答
tips
プレビュー