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

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

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

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

servlet

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

Tomcat

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

Q&A

解決済

2回答

3130閲覧

Servletを使ったデータの受け渡し(画面遷移)ができません

Y.Mamoru

総合スコア47

Java

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

servlet

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

Tomcat

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

0グッド

0クリップ

投稿2020/09/01 05:20

〇やりたいこと
Input.jspで入力した内容を、InputServlet.javaを通しその結果を、result.jspに表示したい。

〇困っていること
最初の入力画面は表示できている。(http://localhost:8080/プロジェクト名/Input.jspと、urlにベタ打ちですが。)

しかし入力後送信ボタンを押すと404NOT FOUNDエラーが出る。

〇試してみたこと
①formのaction先を変えてみた。
(プロジェクト名/InputServlet.java)(Servlet/InputServlet.java)など。

②web.xmlのservlet登録を変えてみた。
(url-patternを/Servlet/InputServlet や、/Input など)

〇知人からは、web.xmlのmappingをもう一度見直すか、動的プロジェクトのコンテキストをtomcatディレクトリに固定してみるのは?とアドバイスをもらいました。
しかし、どのようにweb.xmlに変化を加えるのかがわからず。
コンテキストに関しては、一応調べながらtomcatディレクトリを指定できているはずです。

なぜ遷移が上手くいかないのか教えていただきたいです。

Input.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 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="/InputServlet" method="get"> 12 <p>社員番号:</p><input type="text" name="number"> 13 <p>名前:</p><input type="text" name="name"> 14 <input type="submit" name="send" value="送信"> 15 </form> 16</body> 17</html>

InputServlet.java

1package input; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10/** 11 * Servlet implementation class InputServlet 12 */ 13public class InputServlet extends HttpServlet { 14 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 String number = request.getParameter("number"); 16 String name = request.getParameter("name"); 17 18 request.setAttribute("number" , number); 19 request.setAttribute("name" , name); 20 21 getServletConfig().getServletContext().getRequestDispatcher("/result.jsp").forward(request , response); 22 } 23 24} 25

result.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>入力結果</title> 8</head> 9<body> 10 <form method="get" action="/InputServlet"> 11 <p>社員番号は、</p><%= request.getAttribute("number") %> 12 <p>名前は、</p><%= request.getAttribute("name") %> 13 </form> 14</body> 15</html>

wev.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>Tomcat_Task</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <servlet> 13 <description></description> 14 <display-name>InputServlet</display-name> 15 <servlet-name>InputServlet</servlet-name> 16 <servlet-class>input.InputServlet</servlet-class> 17 </servlet> 18 <servlet-mapping> 19 <servlet-name>InputServlet</servlet-name> 20 <url-pattern>/InputServlet</url-pattern> 21 </servlet-mapping> 22</web-app>

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

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

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

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

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

guest

回答2

0

ベストアンサー

input.jspのformタグのactionに指定するパスから、先頭のスラッシュをとる

JSP

1<form action="InputServlet" method="get">

result.jspへのディスパッチ時のパスをWEB-INFから書いてみる。
例えば以下(パスは自分の環境に変えてください)

Java

1getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/view/input/result.jsp").forward(request , response);

上記のようにするとどうなりますか?

投稿2020/09/01 05:59

root_jp

総合スコア4666

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

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

Y.Mamoru

2020/09/01 06:15

ありがとうございます! 通りました! これから通った理由を考えてみます!
guest

0

teratailで頻出かと思います(

コンテキスト設定できていてもform送信先の指定(action属性の属性値)が/から始まる絶対パスになっていては正しく受け先に送信できないのでは。

直書きよりgetContextPath()をつけた上でのURIを埋め込むべきと思います。

投稿2020/09/01 05:39

編集2020/09/02 01:21
m.ts10806

総合スコア80861

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

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

Y.Mamoru

2020/09/01 06:16

ありがとうございます! なるほど。絶対パスの使いどころがわかっていませんでした。 ありがとうございます。 getContextPathについても調べてみます。ありがとうございます!
m.ts10806

2020/09/01 07:54

リンクつけてますのでご参考に。 環境に依存しない実装をしましょう。
Y.Mamoru

2020/09/01 08:07

わざわざありがとうございます!
m.ts10806

2020/09/02 01:19

誰か知らないけど無言低評価反対。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問