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

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

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

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Java

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

Q&A

0回答

1499閲覧

Javaアプリを公開サーバにデプロイする際の、ファイルパス指定方法

KTG

総合スコア1

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Java

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

0グッド

1クリップ

投稿2021/02/08 13:21

編集2021/02/09 03:29

##前提
Java書籍からダウンロードをしたJavaのサンプルアプリをherokuにデプロイする際に、
正しいファイルパス指定方法がわからず、どうしても404が出て困っています。

##詳細
herokuへのデプロイ方法は、warファイルをデプロイする方法で行っています。

まず、基本的には絶対パスを利用しています。
最初はhttp://localhost:8080/doco-01/●●●●
で指定をしてデプロイをしたら、ページ遷移の際にlocalhostへ接続されてしまいました。
なので、プログラム内に直接デプロイ時に生成されるURLを書き込みました。
具体的には、
http://localhost:8080/doco-01/●●●●

http://doco-01.herokuapp.com/doco-01/●●●●
に書き換えました。

index.jspを例にソースを示します。

Java,

1<%-- リスト10-6の状態 --%> 2<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>どこつぶ</title> 8</head> 9<body> 10<h1>どこつぶへようこそ</h1> 11<form action="http://doco-01.herokuapp.com/doco-01/Login" method="post"> 12ユーザー名:<input type="text" name="name"><br> 13パスワード:<input type="password" name="pass"><br> 14<input type="submit" value="ログイン"> 15</form> 16</body> 17</html>
<form>の部分が該当箇所です。

サーブレットでは、getRequestDispatcherが絶対パスを指定できないので、
/WEB-INF/jsp/main.jsp
としています。
こちらがMain.java(Servlet)のソースです。

Java

1package servlet; 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletContext; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15 16import model.Mutter; 17import model.PostMutterLogic; 18import model.User; 19 20@WebServlet("/Main") 21public class Main extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 protected void doGet(HttpServletRequest request, 25 HttpServletResponse response) 26 throws ServletException, IOException { 27 28 // つぶやきリストをアプリケーションスコープから取得 29 ServletContext application = this.getServletContext(); 30 List<Mutter> mutterList = 31 (List<Mutter>) application.getAttribute("mutterList"); 32 // 取得できなかった場合は、つぶやきリストを新規作成して 33 // アプリケーションスコープに保存 34 if (mutterList == null) { 35 mutterList = new ArrayList<Mutter>(); 36 application.setAttribute("mutterList", mutterList); 37 } 38 // ログインしているか確認するため 39 // セッションスコープからユーザー情報を取得 40 HttpSession session = request.getSession(); 41 User loginUser = (User) session.getAttribute("loginUser"); 42 if (loginUser == null) { // ログインしていない場合 43 // リダイレクト 44 response.sendRedirect("http://doco-01.herokuapp.com/doco-01/"); 45 } else { // ログイン済みの場合 46 // フォワード 47 RequestDispatcher dispatcher = 48 request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 49 dispatcher.forward(request, response); 50 } 51 } 52 53 protected void doPost(HttpServletRequest request, 54 HttpServletResponse response) 55 throws ServletException, IOException { 56 57 // リクエストパラメータの取得 58 request.setCharacterEncoding("UTF-8"); 59 String text = request.getParameter("text"); 60 61 // 入力値チェック 62 if (text != null && text.length() != 0) { 63 // アプリケーションスコープに保存されたつぶやきリストを取得 64 ServletContext application = this.getServletContext(); 65 List<Mutter> mutterList = 66 (List<Mutter>) application.getAttribute("mutterList"); 67 68 // セッションスコープに保存されたユーザー情報を取得 69 HttpSession session = request.getSession(); 70 User loginUser = (User) session.getAttribute("loginUser"); 71 72 // つぶやきをつぶやきリストに追加 73 Mutter mutter = new Mutter(loginUser.getName(), text); 74 PostMutterLogic postMutterLogic = new PostMutterLogic(); 75 postMutterLogic.execute(mutter, mutterList); 76 77 // アプリケーションスコープにつぶやきリストを保存 78 application.setAttribute("mutterList", mutterList); 79 } else { 80 //エラーメッセージをリクエストスコープに保存 81 request.setAttribute("errorMsg", "つぶやきが入力されていません"); 82 } 83 84 // メイン画面にフォワード 85 86 RequestDispatcher dispatcher = 87 request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 88 89 dispatcher.forward(request, response); 90 } 91}

このように直接公開サーバのURLを書き込むと、
index.jspからページ遷移をした際に404となってしまいます。

なので、どなたかWeb開発の際の正しいファイルパス指定方法を教えていただきたいです。
よろしくお願いいたします。

##補足
web.xmlは何も編集していません。Procfileを作成して、pom.xmlだけサーブレット依存関係などの記述をしました。

pom.xmlはこちらです。

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>doco-01</groupId> 4 <artifactId>doco-01</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <packaging>war</packaging> 7 <dependencies> 8 <dependency> 9 <groupId>junit</groupId> 10 <artifactId>junit</artifactId> 11 <version>3.8.1</version> 12 <scope>test</scope> 13 </dependency> 14 <dependency> 15 <groupId>javax.servlet</groupId> 16 <artifactId>javax.servlet-api</artifactId> 17 <version>4.0.1</version> 18 <scope>provided</scope> 19 </dependency> 20 </dependencies> 21 <build> 22 <sourceDirectory>src</sourceDirectory> 23 <plugins> 24 <plugin> 25 <artifactId>maven-compiler-plugin</artifactId> 26 <version>3.8.1</version> 27 <configuration> 28 <release>11</release> 29 </configuration> 30 </plugin> 31 <plugin> 32 <artifactId>maven-war-plugin</artifactId> 33 <version>3.2.3</version> 34 <configuration> 35 <warSourceDirectory>WebContent</warSourceDirectory> 36 </configuration> 37 </plugin> 38 39 <plugin> 40 <groupId>org.apache.maven.plugins</groupId> 41 <artifactId>maven-dependency-plugin</artifactId> 42 <executions> 43 <execution> 44 <phase>package</phase> 45 <goals><goal>copy</goal></goals> 46 <configuration> 47 <artifactItems> 48 <artifactItem> 49 <groupId>com.github.jsimone</groupId> 50 <artifactId>webapp-runner</artifactId> 51 <version>9.0.11.0</version> 52 <destFileName>webapp-runner.jar</destFileName> 53 </artifactItem> 54 </artifactItems> 55 </configuration> 56 </execution> 57 </executions> 58 </plugin> 59 60 </plugins> 61 </build> 62</project>

Webアプリのファイル構造はこちらです。

. ├── Procfile ├── WebContent │   ├── META-INF │   │   └── MANIFEST.MF │   ├── WEB-INF │   │   ├── jsp │   │   │   ├── loginResult.jsp │   │   │   ├── logout.jsp │   │   │   └── main.jsp │   │   └── lib │   └── index.jsp ├── build │   └── classes │   ├── model │   │   ├── LoginLogic.class │   │   ├── Mutter.class │   │   ├── PostMutterLogic.class │   │   └── User.class │   └── servlet │   ├── Login.class │   ├── Logout.class │   └── Main.class ├── pom.xml ├── src │   ├── model │   │   ├── LoginLogic.java │   │   ├── Mutter.java │   │   ├── PostMutterLogic.java │   │   └── User.java │   └── servlet │   ├── Login.java │   ├── Logout.java │   └── Main.java └── target ├── classes │   ├── model │   │   ├── LoginLogic.class │   │   ├── Mutter.class │   │   ├── PostMutterLogic.class │   │   └── User.class │   └── servlet │   ├── Login.class │   ├── Logout.class │   └── Main.class ├── m2e-wtp │   └── web-resources │   └── META-INF │   ├── MANIFEST.MF │   └── maven │   └── doco-01 │   └── doco-01 │   ├── pom.properties │   └── pom.xml └── test-classes

私の質問に対する回答(解決策)のみ受け付けます。
それ以外のよくわからないことは今後一切書き込まないでください。

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

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

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

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

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

m.ts10806

2021/02/08 21:37 編集

インデントずれてて読む気が起きません。調整してください。 可能なら、手動ではなくIDEなどのコードフォーマット機能で自動で。
hoshi-takanori

2021/02/08 23:08 編集

「Java書籍」の書名を書いてくれないと、「web.xmlは何も編集していません」と言われても何も分かりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問