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

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

ただいまの
回答率

88.20%

MVCモデルでアンケート機能の作成

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,712

khr0404

score 43

前提・実現したいこと

現在javaを研修しているのですがMVCモデルによるアンケート機能の作成を行っております。

ある程度の形はできたと思ったのですがうまく実行できません。

サーブレットが上手く書けていないと思うのですがご教授お願いいたします。

サーブレットクラス

/**
 * Servlet implementation class EnqueteServlet
 */
@WebServlet("/EnqueteServlet")
public class EnqueteServlet extends HttpServlet {


    private static final long serialVersionUID = 1L;


    /**
     * @see HttpServlet#HttpServlet()
     */
    public EnqueteServlet() {

        super();
        // TODO Auto-generated constructor stub
    }


    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    @Override
    protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        request.setCharacterEncoding( "UTF-8" );
        ServletContext application = this.getServletContext();

        String[] s1 = {
            "男",
            "女"
        };
        String[] s2 = {
            "10代以下 ",
            "20代 ",
            "30代 ",
            "40代 ",
            "50代以上 "
        };
        String[] s3 = {
            "ほぼ毎日",
            "たまに",
            "使ったことがある程度",
            "使ったことがない"
        };

        Question[] questions = {
            new Question( "性別は?", s1 ),
            new Question( "年齢は?", s2 ),
            new Question( "インターネットの利用頻度は? (携帯電話からの利用も含む)", s3 )
        };


        if ( application.getAttribute( "Enq" ) != null ) {
            Enquete enq = (Enquete) application.getAttribute( "Enq" );
            String wAct = request.getParameter( "act" );
            String wSex = request.getParameter( "sex" );
            String wAge = request.getParameter( "age" );
            String wNet = request.getParameter( "net" );


            if ( wAct.equals( "送信" ) ) {
                int sex = 0;
                int age = 0;
                int net = 0;


                switch ( wSex ) {
                    case "1":
                        sex = 1;
                        break;
                    case "2":
                        sex = 2;
                        break;

                    default:
                        break;
                }

                switch ( wAge ) {
                    case "1":
                        age = 1;
                        break;
                    case "2":
                        age = 2;
                        break;
                    case "3":
                        age = 3;
                        break;
                    case "4":
                        age = 4;
                        break;
                    case "5":
                        age = 5;
                        break;

                    default:
                        break;
                }

                switch ( wNet ) {
                    case "1":
                        net = 1;
                        break;
                    case "2":
                        net = 2;
                        break;
                    case "3":
                        net = 3;
                        break;
                    case "4":
                        net = 4;
                        break;

                    default:
                        break;
                }

                int[] answer = {
                    sex,
                    age,
                    net
                };
                enq.setQuestions( questions );
                Answer a = new Answer();
                a.setValues( answer );
                enq.addAnswer( a );
                enq.agg();

                application.setAttribute( "Enq", enq );
                RequestDispatcher dispatch = request.getRequestDispatcher( "/enqDone.jsp" );
                dispatch.forward( request, response );

            } else if ( wAct.equals( "戻る" ) ) {
                Enquete enquete = new Enquete();
                //Enquete.setQuestion( question );
                application.setAttribute( "Enq", enq );
                RequestDispatcher dispatch = request.getRequestDispatcher( "/enqForm.jsp" );
                dispatch.forward( request, response );

            } else {
                application.setAttribute( "Enq", enq );
                RequestDispatcher dispatch = request.getRequestDispatcher( "/enqAgg.jsp" );
                dispatch.forward( request, response );
            }


        } else {
            Enquete enq = new Enquete();
            Question[] question = null;
            enq.setQuestions( question );
            application.setAttribute( "Enq", enq );
            RequestDispatcher dispatch = request.getRequestDispatcher( "/enqAgg.jsp" );
            dispatch.forward( request, response );
        }


    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    @Override
    protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        // TODO Auto-generated method stub
    }

}

アンケート登録完了画面

pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンケート登録完了画面</title>
</head>
<body>

<h1>アンケートが送信されました</h1>
<p>アンケートの集計結果</p>
<form action ="/psc/enq"method="get">
<input type ="submit" value="見る" name="act">

</form>

</body>
</html>

アンケート入力フォーム

pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンケート入力フォーム</title>
</head>
<body>
    <h1>アンケート入力フォーム</h1>
        <form action ="/psc/enq" method="get">
            <table border ="1">

            <tr>
            <td><b>Q1,性別は?</b><br>
            <input type="radio" name="sex" value="1"><input type="radio" name="sex" value="2"></td>
            </tr>

            <tr>
            <td><b>Q2,年代は?</b>    <br>    
            <input type="radio" name="age" value="1">10代以下
            <input type="radio" name="age" value="2">20代
            <input type="radio" name="age" value="3">30代
            <input type="radio" name="age" value="4">40代
            <input type="radio" name="age" value="5">50代以上
            </td>
            </tr>

            <tr>
            <td><b>Q3,インターネットの利用頻度は?(携帯電話からの利用を含む)</b><br>
            <input type="radio" name="net" value="1">ほぼ毎日
            <input type="radio" name="net" value="2">たまに
            <input type="radio" name="net" value="3">使ったことがある程度
            <input type="radio" name="net" value="4">使ったことがない
            </td>
            </tr>

            </table>

            <font color=blue size=2>右の送信ボタンをクリック</font><input type="SUBMIT" value="送信" name="act">



        </form>

</body>
</html>

アンケート集計結果表示画面

    pageEncoding="UTF-8"%>
<%@ page import ="jp.co.core.psc.argo.MyResult" %>
<%@ page import ="jp.co.core.psc.argo.Enquete" %>
<%@ page import ="jp.co.core.psc.argo.Question" %>

<% Enquete enq = (Enquete) application.getAttribute( "Enq" ); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンケート集計結果表示画面</title>
</head>
    <body>
        <h1>アンケート集計結果</h1>
            <form action ="/psc/enq" method="get">
            <b>Q1,性別は?</b>
            <br>

            <%   MyResult[] results = enq.getMyResults();
             for ( int i = 0; i < results.length; i++ ) {
                 Question q = results[i].getQuestion();%>    
                 Q <%= ( i + 1 )%>  .  <%=q.getQuestion()%>
                <br>

                <%= "[" %>

                   <%  for ( int j = 0, num = q.getLabels().length; j < num; j++ ) { %>
                <%=  ( j + 1 ) %>  :  <%= q.getLabels()[j]%> <%= " " %>
                <% } %>

                <%="]"%>
                <br>

                   <%for ( int j = 0, num = q.getLabels().length; j < num; j++ ) {%>
                <%=j + 1%>: <%=results[i].getCount( j )%><%="人  " %>
                  <%}%>
                <br>

            <%} %>



        <form action="/psc/enq" method="post">
            <input type ="submit" value="戻る" name="act">    
    </form>
</body>
</html>

エラー

アンケート集計結果表示画面を実行するとこのようなエラーになります

type 例外レポート

メッセージ java.lang.NullPointerException

説明 The server encountered an internal error (java.lang.NullPointerException) that prevented it from fulfilling this request.

例外 

org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

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

java
eclipse 
tomcat

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

研修なら講師に質問するべきだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/12 14:06

    研修でも講師がいる研修ではなく会社で勉強しているのですが、担当上司が不在のため質問できない状況でした。

    事故解決できました。
    フォワードの出力先のアプリケーション名の間違いとアンケートを処理内で二つ作ってしまっていたため実行できたなかったみたいです。

    yonaさん度々回答ありがとうございます。

    キャンセル

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

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

関連した質問

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