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

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

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

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

サーブレット

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

973閲覧

サーブレットでの画面移動

2951

総合スコア0

Java

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

サーブレット

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/12/15 06:22

編集2021/12/15 08:46

前提・実現したいこと

サーブレットを用いて、one.htmlに移動、
その次に、one.htmlで入力し、次ページを押すと
one.htmlからtwo.htnlに切り替わり
また次ページを押すとthree.htmlに切り替わり
最後はone.htmlに戻るプログラムを作りたいです
mvcなのでjavaコードは2つあって
HTMLは3つか4つ使いたい感じです

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

one.htmlの次ページを押すと、404エラーになります。

エラーメッセージ ```404エラー ### 該当のソースコード ```サーブレット ソースコード package emp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; //import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class XServlet */ //@WebServlet("/XServlet") public class XServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public XServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String contents = ContentsFactory.getContents(); contents = contents.replace("%oldName",""); out( res, contents ); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String contents = ContentsFactory.getContents(); String name = req.getParameter("name"); contents = contents.replace("%oldName",name); out( res, contents ); } private void out(HttpServletResponse res, String contents) throws IOException,ServletException { res.setContentType("text/html; charset=UTF-8"); PrintWriter out = res.getWriter(); out.println(contents); } }

ここに言語をここに言語を入力
javabeans?
package emp;

import java.util.Scanner;

public class ContentsFact{

private static String baseContents = null; public static String getContents() { if(baseContents == null) { Scanner scanner = new Scanner(ContentsFact.class.getResourceAsStream("one.html"),"UTF-8");

StringBuilder result = new StringBuilder("");
while(scanner.hasNextLine()) { String line = scanner.nextLine();
result.append(line).append("\n");
}
baseContents = result.toString();
scanner.close();
}
return new String(baseContents);

} public static void main(String[]args) { String text = ContentsFact.getContents(); System.out.println(text); }

}

one.html

1コードpackage emp; 2 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>Servlet</title> 8</head> 9<body> 10servlet 11<p/> 12 13<form action="two.html" method="post"> 14氏名: 15<input type="text" name="name" required value="%oldName%"> 16<br/> 17<input type="submit" value="次ページ"> 18</form> 19 20</body> 21</html> 22

コード```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_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>PracticeMVC</display-name> <servlet> <servlet-name>XServlet</servlet-name> <servlet-class>emp.XServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>XServlet</servlet-name> <url-pattern>/xServlet</url-pattern> </servlet-mapping> </web-app>

試したこと

<form action="two.html">にしてみたりしましたがいまいちわかりません また、two.htmlは、one.htmlと同じくformに入力する感じにしたいです。 two.htmlからブラウザーで戻るとone.htmlに戻るといった内容です

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

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

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

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

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

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

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

K_3578

2021/12/15 06:25

そもそもコードも提示されてないので何とも言えません。 404だし存在しないリンクに飛ぼうとしてるのでは
m.ts10806

2021/12/15 06:26

jspではなくhtmlの話ですか? どのような構成で組まれてるのでしょう
jimbe

2021/12/15 06:30

「前提・実現したいこと」しかないということは、丸投げでしょうか。
m.ts10806

2021/12/15 08:56 編集

直接.htmlに対してフォーム送信しても受け取るすべはないのですが、サーバーサイドでそのようにマッピングされているということでしょうか。
2951

2021/12/15 09:00

マッピング等しておりません サーブレットを使ってone.html→two.html→three.htmlといった具合には出来るのでしょうか?
m.ts10806

2021/12/15 09:53

なぜ、自前でファイル内容取得→置換 を行っているのでしょうか。 jsp使えばわざわざそんなことしなくてもいいのですが。 できるかできないかで言うと、大抵のことは「できる」としか応えようがないですが、そもそも(動的)Webアプリケーションの仕組み自体を理解しないことには何も進まないと思います。
m.ts10806

2021/12/15 10:01

あと念のためContentsFactory.getContents() って定義どこにありますか?ContentHandlerなら何となくわかるのですが。
guest

回答1

0

formタグのactionは「リクエストを受け取るURL」を指定するもので、要は指定したURLがWebブラウザからアクセス可能でないといけません。
且つ、フォーム送信した情報を処理したいのでしたら、サーバーサイドの処理が待ち受ける(マッピングされた)URLでないといけません。

web.xmlに書かれてる内容からすると、emp.XServletクラスが/xServletというURLで発動するようなので(マッピングされている)、送信先はおそらく(コンテキストパスを加えたうえで)/xServletとなるのでしょう。

というように、サーブレットを介したいのでしたら、同じようにURLはマッピングが必要となります。

あとは画面側をどうするかですけど、.htmlが何のために準備したか?です。
現状の質問内容とコメントだけでは私の方は分かっておりません。

単なるサーブレットならVIEW側をjspにすることで割と簡単に出来そうに思いますし(何ならサーブレットクラス介さずjspだけでもできないことはない)、やりたいことと、やろうとしていることと、本来必要な技術が合致してない気がします。

one.htmlの次ページを押すと、404エラーになります。

とのことなので、one.htmlは表示されてるのでしょうけど、URLどうしてます?
ファイル構成なども提示されないと、「やろうとしていること」は伝わらないので他者にはこれ以上応えようがないように思います。

投稿2021/12/15 10:06

m.ts10806

総合スコア80861

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問