質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

5807閲覧

サーブレットクラス初期化中時にClassNotFoundが発生しクラスが見つからない

nagomi72

総合スコア51

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2018/07/27 04:17

編集2018/07/29 02:33

お世話になります。
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> パスワード&nbsp;&nbsp;:<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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/07/27 04:21

<url-pattern>をformのactionと同じにするとどうなりますか?
nagomi72

2018/07/27 04:25

<url-pattern>/pakutter/servlet/Login</url-pattern>としたところ404エラーが発生いたしました
guest

回答2

0

コンテキストパスが指定されていないだけに見えます。

index.jsp

1<%@page contentType="text/html" pageEncoding="UTF-8"%> 2<% String contextPath = request.getContextPath(); %> 3<!DOCTYPE html> 4<html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>JSP Page</title> 8 </head> 9 <body> 10 <form method="post" action="<%= contextPath %>/login" id="theForm"> 11 <input type="text" name="username" value="" /> 12 <input type="text" name="password" value="" /> 13 <button type="submit">ログイン</button> 14 </form> 15 </body> 16</html> 17

LoginServlet.java

1/* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6package controller; 7 8import java.io.IOException; 9import javax.servlet.ServletException; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14public class LoginServlet extends HttpServlet { 15 16 /** 17 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 18 * methods. 19 * 20 * @param request servlet request 21 * @param response servlet response 22 * @throws ServletException if a servlet-specific error occurs 23 * @throws IOException if an I/O error occurs 24 */ 25 protected void processRequest(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 request.setCharacterEncoding("UTF-8"); 28 29 System.out.println("userName : " + request.getParameter("username")); 30 System.out.println("passWord : " + request.getParameter("password")); 31 } 32 33} 34

web.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 3 4 <servlet> 5 <servlet-name>LoginServlet</servlet-name> 6 <servlet-class>controller.LoginServlet</servlet-class> 7 </servlet> 8 9 <servlet-mapping> 10 <servlet-name>LoginServlet</servlet-name> 11 <url-pattern>/login</url-pattern> 12 </servlet-mapping> 13 14</web-app>

投稿2018/07/27 06:01

marshmallowy

総合スコア204

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nagomi72

2018/07/28 04:19

ご回答いただきましてありがとうございます。 ご記際いただいたコードを参考に、index.jspにコンテキストパスを追加し、web.xmlのurlパターンを変更したのですが、同様のエラーが発生しております。どこが問題なのか、ご指摘いただけないでしょうか。
nagomi72

2018/07/28 04:23 編集

``` <%@ page contentType="text/html;charset=UTF-8"%> <% String contextPath = request.getContextPath(); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Pakutter</title> </head> <body> <h1>Welcome to Pakutter!!!</h1> < <form method="post" action="<%=contextPath%>/login" id="theForm"> ユーザー名:<input type="text" name="name"><br> パスワード&nbsp;&nbsp;:<input type="text" name="pass"><br> <input type="submit" value="ログイン"> </form> </body> </html> ```
nagomi72

2018/07/28 04:24 編集

``` <?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> /login </url-pattern> </servlet-mapping> </web-app> ```
guest

0

自己解決

workspaceのWB-INF下にclassファイルが生成されていなかった。
そりゃファイルないって言われますよね…

投稿2018/08/14 02:07

nagomi72

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問