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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

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

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

Tomcat

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

2219閲覧

VPS(CentOS9)にデプロイしたSpringBootのWEBアプリのページにアクセスするとrequestpathの先頭に余分な『/』がついてしまう

kadyu

総合スコア14

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

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

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

Tomcat

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/01/29 03:30

前提・実現したいこと

SpringBoot +Tomcat + Apache でConohaVPS(CentOS9)上にアプリをデプロイしようと考えていました。
ローカルでは『http://localhost:8080/hogecp(コンテキストパス)/hello/』 にアクセスすることでページを開けることを確認したので、build.gradleを用いてwarを作成し、VPSの『/opt/apache-tomcat-9.0.58/webapps/』配下にデプロイしました。その後、apacheとtomcatを再起動し確認しました。
なお、tomcatのリバースプロキシ設定は/etc/httpd/conf.d/tomcat.confにて下記のように設定しています

tomcat.conf

1ProxyPass /rptm ajp://localhost:8009/

各パスにアクセスすると以下のように表示されます。
・『http://(サーバーのipアドレス)/』 → apacheのテストページ
・『http://(サーバーのipアドレス)/rptm/』→ tomcatのテストページ
・『http://(サーバーのipアドレス)/rptm/hogecp/hello/』→ There was an unexpected error (type=Internal Server Error, status=500).

ちなみにサーバー内で作成したjspページを『/opt/apache-tomcat-9.0.58/webapps/jsp/』配下に置いて『http://(サーバーのipアドレス)/rptm/jsp/test.jsp』にアクセスした場合は表示されました。DBへの接続も問題なかったです。

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

catalina.outのエラーメッセージを確認すると、設定したcontextPathと実際にアクセスしようとしたrequestPathの先頭が一致しないためエラーが出てしまっているみたいでした。 requestPath: '//hogecp/hello/'の通り先頭に不要な/が入っています。
ローカルではコンテキストパスのアクセスは問題なかったのですがなぜVPSでアクセスするとこの/がはいってしまうのか自分で調査したのですが限界を感じたので今回ご質問いたしました。

catalina.out

12022-01-29 12:06:38.178 ERROR 3012 --- [0.0-8009-exec-5] o.s.b.w.servlet.support.ErrorPageFilter : Forwarding to error page from request [/hello/] due to exception [Invalid contextPath '/hogecp': must match the start of requestPath: '//hogecp/hello/'] 2 3java.lang.IllegalArgumentException: Invalid contextPath '/hogecp': must match the start of requestPath: '//hogecp/hello/' 4 at org.springframework.http.server.DefaultRequestPath.validateContextPath(DefaultRequestPath.java:81) ~[spring-web-5.3.15.jar:5.3.15] 5 at org.springframework.http.server.DefaultRequestPath.initContextPath(DefaultRequestPath.java:56) ~[spring-web-5.3.15.jar:5.3.15] 6 at org.springframework.http.server.DefaultRequestPath.<init>(DefaultRequestPath.java:41) ~[spring-web-5.3.15.jar:5.3.15] 7 at org.springframework.http.server.RequestPath.parse(RequestPath.java:79) ~[spring-web-5.3.15.jar:5.3.15] 8 at org.springframework.web.util.ServletRequestPathUtils$ServletRequestPath.parse(ServletRequestPathUtils.java:258) ~[spring-web-5.3.15.jar:5.3.15] 9 at org.springframework.web.util.ServletRequestPathUtils.parseAndCache(ServletRequestPathUtils.java:66) ~[spring-web-5.3.15.jar:5.3.15] 10 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:959) ~[spring-webmvc-5.3.15.jar:5.3.15] 11 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar:5.3.15] 12 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.15.jar:5.3.15] 13 at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[servlet-api.jar:4.0.FR] 14 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar:5.3.15] 15 at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR] 16 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [catalina.jar:9.0.58] 17 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 18 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.58] 19 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.58] 20 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 21 at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar:5.3.15] 22 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.15.jar:5.3.15] 23 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.58] 24 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 25 at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar:5.3.15] 26 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.15.jar:5.3.15] 27 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.58] 28 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 29 at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126) [spring-boot-2.6.3.jar:2.6.3] 30 at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64) [spring-boot-2.6.3.jar:2.6.3] 31 at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101) [spring-boot-2.6.3.jar:2.6.3] 32 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.15.jar:5.3.15] 33 at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119) [spring-boot-2.6.3.jar:2.6.3] 34 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.58] 35 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 36 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.15.jar:5.3.15] 37 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.15.jar:5.3.15] 38 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [catalina.jar:9.0.58] 39 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [catalina.jar:9.0.58] 40 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [catalina.jar:9.0.58] 41 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [catalina.jar:9.0.58] 42 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) [catalina.jar:9.0.58] 43 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [catalina.jar:9.0.58] 44 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.58] 45 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) [catalina.jar:9.0.58] 46 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [catalina.jar:9.0.58] 47 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359) [catalina.jar:9.0.58] 48 at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:433) [tomcat-coyote.jar:9.0.58] 49 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:9.0.58] 50 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) [tomcat-coyote.jar:9.0.58] 51 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735) [tomcat-coyote.jar:9.0.58] 52 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.58] 53 at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-util.jar:9.0.58] 54 at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-util.jar:9.0.58] 55 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.58] 56 at java.lang.Thread.run(Thread.java:748) [na:1.8.0_312-ea] 57

使用した設定ファイル

application.propertiesとbuild.gradleを共有します

application.properties

1# Thymeleaf 2spring.thymeleaf.cache=false 3spring.thymeleaf.enabled=true 4spring.thymeleaf.prefix=classpath:/templates/ 5spring.thymeleaf.suffix=.html 6 7spring.application.name=My First Boot Application. 8 9server.servlet.context-path=/hogecp 10 11# MariaDBP (DB接続用の情報が書かれています) 12spring.datasource.url=xxx 13spring.datasource.username=xxx 14spring.datasource.password=xxx 15spring.datasource.driverClassName=xxx

build.gradle

1plugins { 2 id 'org.springframework.boot' version '2.6.3' 3 id 'io.spring.dependency-management' version '1.0.11.RELEASE' 4 id 'java' 5} 6 7group = 'com.hogecp' 8version = '0.0.1-SNAPSHOT' 9sourceCompatibility = '1.8' 10 11configurations { 12 compileOnly { 13 extendsFrom annotationProcessor 14 } 15} 16 17repositories { 18 mavenCentral() 19} 20 21apply plugin: 'war' 22 23war { 24 archiveName 'hogecp.war' 25} 26 27dependencies { 28 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 29 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 30 implementation 'org.springframework.boot:spring-boot-starter-web' 31 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.1' 32 compileOnly 'org.projectlombok:lombok' 33 developmentOnly 'org.springframework.boot:spring-boot-devtools' 34 runtimeOnly 'com.h2database:h2' 35 runtimeOnly 'mysql:mysql-connector-java' 36 runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' 37 annotationProcessor 'org.projectlombok:lombok' 38 testImplementation 'org.springframework.boot:spring-boot-starter-test' 39 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 40} 41 42tasks.named('test') { 43 useJUnitPlatform() 44} 45

参考にしたサイト

APache+Tomcat連携は下記サイトを参考に開発を進めてました
https://suzuki-kengo.net/apachetomcat/

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

・CentOS 9
・tomcat : 9.0.58
・Apache : Apache/2.4.51
・java : 1.8.0_312

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

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

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

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

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

kadyu

2022/01/30 01:47

Spring boot ver2.6.2で再現しましたこの件ですが、2.5.9では再現しませんでした。 また独自のFilterクラスでリクエストのURIを確認しましたが各フィルタークラスが実行されるより前に 既に//が二つ付いた状態になっていました。そのため、SpringBoot側の不具合の可能性があります。 同じ件で悩まれている方は一度バージョンを下げることを検討するのもいいかもしれません。 引き続き原因を調査します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問