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

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

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

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

Spring Boot

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

Q&A

解決済

1回答

341閲覧

STS動的プロジェクト:JSP(サーブレット)がhtmlから画面遷されず404エラー

monica0

総合スコア7

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2024/07/10 05:24

編集2024/07/10 05:27

実現したいこと

STSの動的プロジェクトで登録情報の入力を作っています。
サーバー実行押した際に、HTMLは表示されますがJSPが表示されません

前提

環境:springboot/Tomcat9/jdk17

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

エラーメッセージがでない

該当のソースコード

register.html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"/> 5 <title>登録画面</title> 6</head> 7<body> 8 <h1>登録情報を入力してください</h1> 9 <form action="/SampleMVCC/register" method="post"> 10 名前:<input type="text" name="name" size="10" /><br/> 11 年齢:<input type="radio" name="age" value="child" />18歳未満  12 <input type="radio" name="age" value="adult" />18歳以上<br/> 13 開発経験:<input type="checkbox" name="lang" value="Java" />Java  14 <input type="checkbox" name="lang" value="Python" />Python  15 <input type="checkbox" name="lang" value="JavaScript" />JavaScript<br/><br/> 16 <input type="submit" value="送信" /> 17 </form> 18</body> 19</html> 20

RegisterServlet.java

1import bean.RegisterBean; 2import java.io.*; 3import javax.servlet.*; 4import javax.servlet.http.*; 5import javax.servlet.annotation.*; 6 7@WebServlet("/register") 8public class RegisterServlet extends HttpServlet { 9 public void doPost(HttpServletRequest req, HttpServletResponse res) 10 throws IOException, ServletException { 11 12 req.setCharacterEncoding("utf-8"); 13 14 String name = req.getParameter("name"); 15 String age = req.getParameter("age"); 16 String[] langs = req.getParameterValues("lang"); 17 res.setContentType("text/html;charset=utf-8"); 18 19 20 RegisterBean rb = new RegisterBean(); 21 rb.setName(name); 22 rb.setAge(age); 23 rb.setLangs(langs); 24 25 26 req.setAttribute("rb", rb); 27 28 29 RequestDispatcher rd = req.getRequestDispatcher("/regist.jsp"); 30 rd.forward(req, res); 31 } 32 public void doGet(HttpServletRequest req, HttpServletResponse res) 33 throws IOException, ServletException { 34 doPost(req, res); 35 } 36}

RegisterBean.java

1package bean; 2 3import java.io.Serializable; 4 5public class RegisterBean implements Serializable{ 6 private String name; 7 private String age; 8 private String[] langs; 9 10 public RegisterBean(){ 11 } 12 13 public void setName(String name){ 14 this.name = name; 15 } 16 public void setAge(String age){ 17 this.age = age; 18 } 19 public void setLangs(String[] langs){ 20 this.langs = langs; 21 } 22 23 public String getName(){ 24 return name; 25 } 26 public String getAge(){ 27 return age; 28 } 29 public String[] getLangs(){ 30 return langs; 31 } 32 33 public String getJpnAge(){ 34 String jpnAge; 35 if(age.equals("child")){ 36 jpnAge = "18歳未満"; 37 } else { 38 jpnAge = "18歳以上"; 39 } 40 return jpnAge; 41 } 42 public String getStrLangs(){ 43 String strLangs = ""; 44 for(int i = 0; i < langs.length; i++){ 45 strLangs = strLangs + langs[i] + " "; 46 } 47 return strLangs; 48 } 49}

register.jsp

1<%@page contentType="text/html;charset=utf-8" %> 2<jsp:useBean id="rb" scope="request" class="bean.RegisterBean" /> 3<html> 4 <head> 5 <title>確認画面</title> 6 </head> 7<body> 8 <h2>入力情報を確認して登録ボタンを押してください</h2> 9 氏名:<strong><jsp:getProperty name="rb" property="name" /></strong><br/> 10 年齢:<strong><%= rb.getJpnAge() %></strong><br/> 11 開発経験:<strong><%= rb.getStrLangs() %></strong><br/><br/> 12<input type="submit" value="登録" /> 13<input type="reset" value="戻る" /> 14</body> 15</html>

試したこと

・htmlファイルの「 <form action="/SampleMVCC/register" method="post">」ソース内確認
・ディレクトリ先の配置確認
・STSのサーバータグで対象のプロジェクト「追加及び排除で構成済みリソース追加されているか確認
・Tomcatフォルダ自体のbinからstartup.batが起動され重複してないかの確認(ポート重複してないか)
・オブジェクト名の頭文字を大文字startにすると、htmlすら404になってしまう

Github共有

https://github.com/User0501MU/sampleMVC

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

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

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

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

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

dodox86

2024/07/10 06:26

眺めただけで動作させて確認はしていませんが: 1. @WebServletアノテーションが"/register"になっているのに、htmlのフォームでは「action="/SampleMVCC/register"」になっている。正しいのでしょうか? 2. サーブレットからforwardするとき、req.getRequestDispatcher("/regist.jsp");となっているが、register.jspが正しいのではないでしょうか?
monica0

2024/07/10 08:07

自己解決できましたご回答感謝いたします。
guest

回答1

0

自己解決

解決
・Servesフォルダのserver.xmlはビジネスロジック層であるのにspringbootでのサービス作成と混乱していた。

<form action="/sampleMVC/register" method="post"> ・原因 :プロジェクト名の大文字小文字 :明示的にクリーンのし忘れ ※プロジェクト>プロパティ>プロジェクト・ファセットのバージョンなど確認したが今回関係なかった。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
補足:server.xmlを何故確認したのか?

server.xml

1 <Context docBase="sampleMVC" path="/sampleMVC" reloadable="false" source="org.eclipse.jst.jee.server:sampleMVC"/></Host> 2 3 <!-- コンテキスト,docBaseベースディレクトリはどこにしますか?pathは、どこのURLパスにしますか?という土台ルールを設定しており、sampleMVCオブジェクト名がルートディレクトリになる!そのため大本の値設定にミスがあるとディレクトリのツリーがうまく動かないことになる。--> 4

★コンテキスト・パス(/first_webapp)
コンテキスト・パスは、ソースコード上でアノテーションを使って指定するようだが、今回はアノテーションを指定していない動的プロジェクト(サーブレットとJSP)

【その他】
【?】htmlで何をしているのか気になった
【A】inputタグのsubmitになっている為、fromのactionを参照して動いている
【?】ボタン遷移から別のページを指定して画面遷移するには?
【A】inputタグとformaction=/URL/URLを指定してあげると別の動きが可能となった
※その際、test.html/test.java/test.jspでMVCモデルを作成した。
【?】コンテキストルート親元はどこでSTSに設定していたのか?
【A】動的プロジェクト作成を「次へ」と押すとWebモジュール設定がある。
イメージ説明
【github】新しいworkスペース
https://github.com/User0501MU/sampleMVC-

投稿2024/07/10 08:06

編集2024/07/11 02:24
monica0

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問