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

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

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

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

servlet

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

Tomcat

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

Q&A

解決済

1回答

5487閲覧

[Java]サーブレットでforward(request,response)したら遷移先に指定したサーブレットのdoPostが呼び出された

snowshink

総合スコア138

Java

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

servlet

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

Tomcat

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

0グッド

0クリップ

投稿2019/05/17 05:02

編集2019/05/17 06:35

サーブレットでgetServletContext().getRequestDispathcher(URI).forward(request,response)したら、
指定したURlのサーブレットのdoPost(request,response)が呼び出されてしまいます。

java

1package servlet; 2 3import java.io.IOException; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9import javax.servlet.http.HttpSession; 10 11import bean.LoginBean; 12 13/** 14 * Servlet implementation class Login 15 */ 16@WebServlet("/login") 17public class Login extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public Login() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 // TODO Auto-generated method stub 33 LoginBean lb = new LoginBean(); 34 request.setAttribute("lb", lb); 35 request.getRequestDispatcher("/login.jsp").forward(request, response); 36 } 37 38 /** 39 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 40 */ 41 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 42 LoginBean lb = new LoginBean(); 43 //String job=request.getParameter("job"); 44 lb.setPass(request.getParameter("pass")); 45 lb.setEmail(request.getParameter("email")); 46 if(lb.login()) { 47 HttpSession session = request.getSession(); 48 session.setAttribute("login_userID", lb.getUserId()); 49 session.setAttribute("login_userName", lb.getUserName()); 50 session.setAttribute("login_email", lb.getEmail()); 51 session.setAttribute("login_zip_code", lb.getZip_code()); 52 session.setAttribute("login_adress", lb.getAdress()); 53 session.setAttribute("login_tel", lb.getTel()); 54 System.out.println(lb.getUserName()); 55 if(lb.getUserName().equals("root")) { 56 System.out.println("staff logged in"); 57 getServletContext().getRequestDispatcher("/staffLogin").forward(request, response); 58 }else { 59 getServletContext().getRequestDispatcher("/home").forward(request, response); 60 } 61 }else{ 62 request.setAttribute("lb",lb); 63 getServletContext().getRequestDispatcher("/login.jsp").forward(request, response); 64 } 65 66 } 67 68}

java

1package servlet; 2 3import java.io.IOException; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9import javax.servlet.http.HttpSession; 10 11import bean.LoginBean; 12 13/** 14 * Servlet implementation class StaffPage 15 */ 16@WebServlet("/staffLogin") 17public class StaffLogin extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public StaffLogin() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 // TODO Auto-generated method stub 33 System.out.println("stafflogin:doGet"); 34 LoginBean lb = new LoginBean(); 35 request.setAttribute("message", ""); 36 request.setAttribute("lb", lb); 37 LoginBean att = (LoginBean)(request.getAttribute("lb")); 38 System.out.println(att.getPass()); 39 request.getRequestDispatcher("/stafflogin.jsp").forward(request, response); 40 } 41 42 /** 43 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 44 */ 45 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 46 // TODO Auto-generated method stub 47 LoginBean lb = new LoginBean(); 48 lb.setPass(request.getParameter("pass")); 49 lb.setStaffId(request.getParameter("staffId")); 50 if(lb.staffLogin()) { 51 HttpSession session = request.getSession(); 52 session.setAttribute("login_staffId", lb.getStaffId()); 53 session.setAttribute("login_staffName", lb.getStaffName()); 54 session.setAttribute("login_authorityId", lb.getAuthorityId()); 55 request.getRequestDispatcher("/staffpage_main.jsp").forward(request, response); 56 }else { 57 System.out.println("staff login failed"); 58 request.setAttribute("lb", lb); 59 request.setAttribute("message", "ログインできませんでした。入力情報を確かめてください。"); 60 request.getRequestDispatcher("/stafflogin.jsp").forward(request, response); 61 } 62 } 63 64} 65

コンソールに表示されたのは
root
staff logged in
(SQLSyntaxErrorException)
staff login failed
で遷移先のdoGet()が呼び出されていません。

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

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

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

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

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

tetsunosuke

2019/05/17 05:07

やりたいことはもしかして redirect ですか?
snowshink

2019/05/17 05:16

リダイレクトについて深く理解してませんが、たぶん違うと思います。 ログインページからログインした人が従業員だったら、(従業員専用のログインページへとぶためのアカウントでログインしたら)、従業員専用のログインページに飛ばしたいのですが、なぜかリセットしたはずのパスワードがinputタグに入ったので調べてみたらという感じです。 あいまいな返答ですみません。
m.ts10806

2019/05/17 05:39

コードブロックの冒頭は”servlet”よりも”Java”のほうが適当かと思います。
tetsunosuke

2019/05/17 06:13

うーん。 結局 request.getMethod() の結果がPOSTになるので、forwardした先でもdoPostが呼ばれてしまう、ということなのかな?と思っています。 ログイン処理等を何も書かずに forwardだけをするdoPostを書いて、そこにPOSTでリクエストしてfowardした先でもdoPostが呼ばれる(再現する)ようであれば、そういう仕様と考えるしかないのでは。 関係ないけどタグの「Eclipse」はいらないと思います。
m.ts10806

2019/05/17 06:19

tetsunosukeさん System.out.println()でコンソール出力とか確認されているのでEclipseで実行(またはデバッグ実行)されてるのではないかなと。確かに絶対必要なものではないですが、個人的には「環境情報」としてはあっても邪魔にはならないかなと。
moredeep

2019/05/17 08:09

forwardはtetsunosukeさんのおっしゃる通りの挙動のはずです。(doPostからならdoPost、doGetからならdoGet)
guest

回答1

0

ベストアンサー

RequestDispatcher#forwardは、元のリクエストのHTTPメソッドを引き継ぎます。

たとえば GETメソッドで起動したサーブレットのメソッドから、別のサーブレット(またはJSP)へフォワードした際には、GETメソッドになります。

投稿2019/05/19 12:06

A-pZ

総合スコア12011

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問