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

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

ただいまの
回答率

87.35%

画面遷移がうまくいきません。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 158

score 2

Java初心者です。
現在、ログインが成功した場合のみ取り扱い商品一覧の画面に移動し、ログイン失敗の場合は強制的にログイン画面にフォワードするプログラムを作っているのですが、ログイン成功しても画面遷移がうまくいきません。また、ログイン失敗すると、フォワード先の画面が文字化けしてしまいます。

また、ログインに成功する前に直接additems.jsp、displaycart.jspにアクセスした場合もlogin.htmlへリダイレクトするようにしたいです。
どのように改善すれば良いでしょうか。

・CartController.java

package shop;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;

import beans.CartBean;
import beans.StocksBean;

@WebServlet("/controller") // URLパターンを /controller とする
public class CartController extends HttpServlet {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
    response.setContentType("text/html;charset=utf-8");
      request.setCharacterEncoding("utf-8");
    RequestDispatcher dispatch = request.getRequestDispatcher("./displaycart.jsp");
    dispatch.forward(request, response);
  }
  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();
        String ui = request.getParameter("userid");
        String up =request.getParameter("userpass");
        if(ui.equals("user")&& up.equals("password")){
          response.sendRedirect("additems.jsp");
        }

          else{
          RequestDispatcher dispatch = request.getRequestDispatcher("./login.html");
          dispatch.forward(request, response);
          }

    HttpSession session = request.getSession();
    CartBean cart = (CartBean)session.getAttribute("cart");
    StocksBean stocks = (StocksBean)session.getAttribute("stocks");

    String id = request.getParameter("id");
    //注文か取消かの判定
    String func = request.getParameter("submit");
    if(func.equals("注文")){
      //注文処理
      for(String[] goods : stocks.getStocks()){
        if(goods[0].equals(id)){
          cart.addItem(id, goods[1],goods[2], 1);
          break;
        }
      }
    }else if(func.equals("取消")){
      //取消処理
      cart.deleteItem(id);
    }
    RequestDispatcher dispatch = request.getRequestDispatcher("./additems.jsp");
    dispatch.forward(request, response);
  }
}


・additems.jsp

<%@ page contentType = "text/html;charset=utf-8" import="java.util.*" %>
<jsp:useBean id="cart" scope="session" class="beans.CartBean" />
<jsp:useBean id="stocks" scope="session" class="beans.StocksBean" />

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>商品カタログ</title>
  </head>
  <body>
    <h1>
      <%
        request.setCharacterEncoding("utf-8");
        //セッションが開始されているか名前が登録されているか確認する
        if(session.isNew() || session.getAttribute("name") == null) {
          // 強制的に login.html へリダイレクト
          response.sendRedirect("login.html");
        }
      %>
    </h1>
    <a href="/shopping-cart/controller">現在の注文数:</a><%=cart.getItemCounts() %>
    <hr>
    <center><h3> - 取り扱い商品一覧 - </h3></center>
    <table border="1" width="300" cellspacing="0" cellpadding="2" align="center">
      <tr><th>商品</th><th>価格</th><th>注文/取消</th></tr>
      <%
        for(String[] goods : stocks.getStocks()){
      %>
        <tr>
        <form action="/shopping-cart/controller" method="post">
        <input type="hidden" name="id" value="<%=goods[0] %>">
        <td><%=goods[1] %></td>
        <td align="right">&yen;<%=String.format("%1$,3d",Integer.parseInt(goods[2])) %></td>
        <td><input type="submit" name="submit" value="注文"><br><br>
        <input type="submit" name="submit" value="取消"></td>
        </form>
        </tr>
      <%
        }
      %>
    </table>
  </body>
</html>


・displaycart.jsp

<%@ taglib uri="carttag" prefix="cart" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.HashMap" %>
<jsp:useBean id="cart" scope="session" class="beans.CartBean" />
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>カート内の商品</title>
  </head>
  <body>
    <h1>
      <%
        request.setCharacterEncoding("utf-8");
        //セッションが開始されているか名前が登録されているか確認する
        if(session.isNew() || session.getAttribute("name") == null) {
          // 強制的に login.html へリダイレクト
          response.sendRedirect("login.html");
        }
      %>
    </h1>
    <center>
    <table width="300" border="1" cellspacing="0" cellpadding="2" border="0">
      <caption><b>カート内の商品</b></caption>
      <tr>
        <th>商品名</th><th>価格</th><th>個数</th><th>小計</th>
      </tr>
      <%
        HashMap<String,String[]> hm = cart.getItems();
        for(String[] goods : hm.values()){
      %>
      <tr>
        <td><%=goods[1] %></td>
        <td align="right">&yen;<%=String.format("%1$,3d",Integer.parseInt(goods[2])) %></td>
        <td align="right"><%=goods[3] %></td>
        <td align="right">
    &yen;<%=String.format("%1$,3d",cart.getEachSale(goods[0])) %></td>
      </tr>
      <%
        }
      %>
      <tr>
        <td align="right" colspan=3 >合計</td>
        <td align="right">
        &yen;<cart:total/>
        </td>
      </tr>
      <tr>
       <td align="right" colspan=3>消費税</td>
       <td align="right">
        &yen;<%=String.format("%1$,3d",(int)(cart.getTotalSales() * 0.08))  %>
    </td>
      </tr>
      <tr>
        <td align="right" colspan=3>注文金額</td>
        <td align="right"><b>&yen;
    <%= String.format("%1$,3d",(int)(cart.getTotalSales() * 1.08)) %>
        </b>
    </td>
      </tr>
    </table>
    </center>
    <br>
    <a href="additems.jsp">商品一覧に戻る</a>
  </body>
</html>


・login.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>LoginTest</title>
  </head>
  <body>
    <form action="/shopping-cart/controller" method="post">
     ユーザー IDを入力してください :
      <input type="text" name="userid" size="20" />
      <br><br>
     パスワードを入力してください :
      <input type="password" name="userpass" size="20" />
      <br><br>
      <input type="submit" value="ログイン" />
    </form>
  </body>
</html>

よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 87.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る