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

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

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

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

Java

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

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

4697閲覧

CentOS/tomcat9環境でServletが実行できない

rin1026

総合スコア6

JSP

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

Java

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

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2020/05/15 10:28

編集2020/05/16 14:07

前提・実現したいこと

現在JavaでServletとJSPを用いたWebアプリケーションを作成しています。
eclipse/tomcat9サーバ上で開発を行い、eclipse上ではjsp,Servletのページ遷移など全て問題なくできています。
リンクボタン(Servlet指定)を押すとServlet内で指定したjspに遷移するという機能についてなのですが、仮想環境にデプロイして実行したところ、Servletを指定したボタンを実行するとHTTPステータス404エラーが出てしまいます。
(下記のソースコード:main.html内のレシピ管理ボタンを実行して、RecipesServlet.java → recipe_manage.jspに遷移したい)

仮想環境内でURLを指定すれば全てのjspには飛べるので、Servletの実行先のjspなどに問題があるわけではなさそうです。
自分で調べた結果、おそらくweb.xmlのURLパターン(?)あたりに原因があるのかなというところまでは絞れたのですが、eclipse上で実行した際は遷移も問題なくできているため、具体的な原因が特定できておりません。
ソースコードについては、サンプルを元に作成したものなので、web.xmlの設定の多くはコピーしてきたもののうち必要な部分を書き換えたのみで、自分では一部理解できていない箇所もあります。
問題なくページを遷移させるために具体的な解決策・アドバイスなどありましたらお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージ http://192.168.33.10:8080/WebApp/basic/recipes/RecipesServlet を実行した際、 HTTPステータス404が表示される(オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。)。 ```### ソースコード

main.html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>MyレシピTOP</title> <link rel="stylesheet" type="text/css" href="css/styles.css"> <link href="https://fonts.googleapis.com/css?family=Baloo+Tamma+2&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=M+PLUS+1p&display=swap" rel="stylesheet"> </head> <body> <div class="top-wrapper"> <div class="top-title"><h1>MyRecipe</h1></div>
<div class="top-contents"> <div class="recipe-management"><a href="basic/recipes/RecipesServlet">レシピ管理</a></div> <div class="user-management"><a href="auth/UserUpdateServlet">ユーザ管理</a></div> <form class="logout-btn top-logout-btn" action="auth/logout" method="post"> <input type="submit" value="ログアウト"> </form> </div> </div>
</body> </html> ``` ``` RecipesServlet.java package recipes.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import recipes.beans.RecipesInfoBean;

/**

  • Servlet implementation class RecipesServlet

*/
@WebServlet("/basic/recipes/RecipesServlet")
public class RecipesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/** * @see HttpServlet#HttpServlet() */ public RecipesServlet() { super(); // TODO Auto-generated constructor stub } /** * 初期表示 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("RecipesServlet.doGet()"); System.out.println("【レシピ一覧初期表示】"); // 【レシピ一覧の作成】 ArrayList<RecipesInfoBean> recipesList = new ArrayList<>(); // ■DB接続 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 接続情報 String url="jdbc:mysql://localhost:3306/myrecipe_db"; String user="(ユーザ名)"; String password="(パスワード)"; try { // 接続処理 conn = DriverManager.getConnection(url, user, password); // ■検索処理実行 // SQL作成 String sql = "SELECT\r\n" + " recipe_table.recipe_id,\r\n" + " recipe_table.recipe_name,\r\n" + " recipe_table.budget,\r\n" + " recipe_table.ingredients,\r\n" + " recipe_table.ingredients_memo,\r\n" + " recipe_table.howto\r\n" + "FROM\r\n" + " recipe_table\r\n" + "WHERE recipe_table.del_flag = 0"; System.out.println(sql); // SQL準備 ps = conn.prepareStatement(sql); // SQL実行 rs = ps.executeQuery(); // データを読込み、レシピ一覧(ArrayList)に設定する System.out.println("■一覧データを設定"); while(rs.next()) { // データ読込 int recipeId = rs.getInt("recipe_id"); String recipeName = rs.getString("recipe_name"); int budget = rs.getInt("budget"); String ingredients = rs.getString("ingredients"); String ingredientsMemo = rs.getString("ingredients_memo"); String howto = rs.getString("howto"); // レシピ情報(JavaBeans)に追加 RecipesInfoBean recipesInfo = new RecipesInfoBean(); recipesInfo.setRecipeId(recipeId); recipesInfo.setRecipeName(recipeName); recipesInfo.setBudget(budget); recipesInfo.setIngredients(ingredients); recipesInfo.setIngredientsMemo(ingredientsMemo); recipesInfo.setHowto(howto); System.out.println(recipesInfo); // レシピ一覧(ArrayList)に追加 recipesList.add(recipesInfo); } } catch(SQLException e) { // 接続失敗時の処理 e.printStackTrace(); } finally { try { // ■クローズ処理 // 検索結果 if(rs!=null) { rs.close(); } // SQL文 if(ps!=null) { ps.close(); } // DB接続 if(conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } // 【表示値を設定する】 System.out.println(recipesList); request.setAttribute("recipesList", recipesList); // 【画面に遷移する】 request.getRequestDispatcher("recipe_manage.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }

}

```web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Myrecipe</display-name> <welcome-file-list> <welcome-file>main.html</welcome-file> </welcome-file-list> <error-page> <error-code>403</error-code> <location>/auth/login_err.jsp</location> </error-page> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/auth/login.jsp</form-login-page> <form-error-page>/auth/login_err.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>myrecipe</role-name> </security-role> <!-- ■認証をかけるURL  ○/main.html[メイン画面]※「/」も同じURLに今回は設定  ○/basic/~ ■認証をかけないURL  ○/auth/~[認証関連] --> <security-constraint> <web-resource-collection> <web-resource-name>Authentication of FormAuth</web-resource-name> <url-pattern>/main.html</url-pattern> <url-pattern>/basic/*</url-pattern> <!-- <url-pattern>/object/*</url-pattern> --> </web-resource-collection> <auth-constraint> <role-name>myrecipe</role-name> </auth-constraint> </security-constraint> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
server.xml <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.JDBCRealm" connectionName="(ユーザ名)" connectionPassword="(パスワード)" connectionURL="jdbc:mysql://localhost:3306/myrecipe_db" driverName="com.mysql.jdbc.Driver" roleNameCol="rolename" userCredCol="password" userNameCol="username" userRoleTable="auth_roles" userTable="auth_users"> <CredentialHandler algorithm="SHA-256" className="org.apache.catalina.realm.MessageDigestCredentialHandler"/> </Realm> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service> </Server>

試したこと

各jspを指定して実行(エラーなく遷移した)
Servletのurlをいろいろ変えて実行(404エラー)

補足情報(FW/ツールのバージョンなど)

仮想環境:CentOS6.6
サーバ:tomcat9.0.34
アプリのWebApp.warファイルは
/opt/tomcat/apache-tomcat-9.0.34/webappsに配置

プロジェクトのフォルダ構造
イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/05/15 10:50

コンパイルエラーを修正しましょう
KoichiSugiyama

2020/05/15 14:00

server.xmlはどうなっているかも開示していただいた方が、解決につながりやすいと思います。
rin1026

2020/05/16 14:09 編集

コメントいただきありがとうございます。server.xmlのソースコードを追加しました!(文字数制限の関係で、コメント部分は省略しています) コンパイルエラーももう一度見直してみようかと思います。
退会済みユーザー

退会済みユーザー

2020/05/18 02:11

エクリプスのプロジェクト指定が 11 だからでは? あと dao はコンパイルエラーじゃないのか 赤い×がついてるが
rin1026

2020/05/18 02:35

ややこしくてすみません。スクリーンショット内のdaoはデプロイ後に作成していたものなので、実際にデプロイされているwarファイルはdaoが含まれていない、エラー表示がないものになっています。 (フォルダ構造を見てもらった方がわかりやすいかなと思い、daoを作成した後に撮りました。common.dao, recipes.dao以外は何も変更ありません)
guest

回答1

0

自己解決

今回のこのエラーに関しては環境を構築し直したので、正確には解決とはいっていませんが終了とさせていただきます。
ご意見をくださった方々、誠にありがとうございました。
Javaを再インストールしたところ、似たような別のエラーが出てしまったので、それについてはまた別に質問を立てさせていただこうと思います。

投稿2020/05/19 02:57

rin1026

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問