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

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

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

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

1回答

695閲覧

サーブレットコンパイル時のエラーについて

ktkr2020

総合スコア10

Java

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

1クリップ

投稿2022/08/14 16:25

前提・実現したいこと

現在vpsのubuntu 22.04でwebアプリを開発したいと考えています。
最終的な目的はwebアプリを開発して公開までの流れを知ることです。

そこで、サーブレットをコンパイルするとするとエラーが起きます。

フォルダ構成は以下のようになっています。
/opt/apache-tomcat-10.0.23/webapps/myapps/
WEB-INF/classes/myapps/bmicalc/BmiServlet.java

色々と試している中で、コード自体に問題があるのではなく実行環境に問題があるのではないかと考えています。

どのようにすればコンパイルがうまくいくか教えていただけると幸いです。

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

/opt/apache-tomcat-10.0.23/webapps/myapps/WEB-INF/classes/myapps/bmicalc$ javac BmiServlet.java BmiServlet.java:4: error: package jakarta.servlet does not exist import jakarta.servlet.ServletException; ^ BmiServlet.java:5: error: package jakarta.servlet.annotation does not exist import jakarta.servlet.annotation.WebServlet; ^ BmiServlet.java:9: error: cannot find symbol public class BmiServlet extends HttpServlet { ^ symbol: class HttpServlet BmiServlet.java:11: error: cannot find symbol protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ ^ symbol: class HttpServletRequest location: class BmiServlet BmiServlet.java:11: error: cannot find symbol protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ ^ symbol: class HttpServletResponse location: class BmiServlet BmiServlet.java:11: error: cannot find symbol protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ ^ symbol: class ServletException location: class BmiServlet BmiServlet.java:6: error: package jakarta.servlet.http does not exist import jakarta.servlet.http.*; ^ BmiServlet.java:10: error: method does not override or implement a method from a supertype @Override ^ BmiServlet.java:26: error: cannot find symbol this.getServletContext().getRequestDispatcher("/bmicalc/bmi_result.jsp").forward(request,response); ^ symbol: method getServletContext() 9 errors

ソースコード

BmiServlet.java

1package myapps.bmicalc; 2 3import java.io.IOException; 4import jakarta.servlet.ServletException; 5import jakarta.servlet.annotation.WebServlet; 6import jakarta.servlet.http.*; 7 8//@WebServlet("/chap06/BmiServlet") urlはweb.xmlの方で定義してあります。 9public class BmiServlet extends HttpServlet { 10@Override 11protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 12double hcm=Double.parseDouble(request.getParameter("height"));//height label 13double w=Double.parseDouble(request.getParameter("weight"));//weight label 14 15double hm=hcm/100; 16double bmi=w/(hm*hm); 17request.setAttribute("bmi",bmi); 18if(bmi<18.5){ 19 request.setAttribute("rank","痩せ気味"); 20 }else if(bmi<25){ 21 request.setAttribute("rank","標準"); 22 }else{ 23 request.setAttribute("rank","肥満気味"); 24 } 25 26 this.getServletContext().getRequestDispatcher("/bmicalc/bmi_result.jsp").forward(request,response); 27} 28} 29

試したこと

・ubuntu、tomcatの再起動
・クラスパスの設定

printenvコマンドにより、設定した後CLASSPATHを確認しましたが特に問題ないように感じています。(色々いじっているうちに無駄に追加してしまったものもあります。)

CLASSPATH=/opt/apache-tomcat-10.0.23/lib/servlet-api.jar:/opt/apache-tomcat-10.0.23/lib/jsp-api.jar:.:/opt/apache-tomcat-10.0.23/webapps/myapps/WEB-INF/classes/myapps/bmicalc:/opt/apache-tomcat-10.0.23/webapps/myapps/WEB-INF/classes/myapps:/opt/apache-tomcat-10.0.23/webapps/myapps/WEB-INF/classes

また、windows、tomcat10.0.20の環境ではコンパイルでき、実行できることまで確認しています。(windowsからzipでフォルダごと転送したため間違いありません。)
クラスファイル(.class)もその際に入れてあったのですが、うまく動作しなかったためコンパイルし直したところエラーが起きました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

jcs502ulf

2022/08/16 00:37

コンパイルコマンド(javac ...)も掲載すると良いと思います。
ktkr2020

2022/08/17 12:04

自己解決したため、省かせていただきます。 ありがとうございました。
guest

回答1

0

自己解決

JDKのバージョンの違いにより、実行ができていませんでした。
新しいバージョンを更新するだけでなく、tomcatの設定ファイルを新しいバージョンのJDKに書き換えることで実行(Webアプリが正しく動作)ができるようになりました。

コンパイルについては現在も解決せず、原因も特定できませんでした。

windowsでコンパイルしたものを同じバージョンのubuntuに送り実行することで解決しました。

投稿2022/08/17 12:09

ktkr2020

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問