1

私はサーブレットに慣れていないので、我慢してください。

2つのテキスト値の下にデフォルト値(たとえば、2行、2列)の標準テーブルを書き込むサーブレットを作成したいと思います。

これらのテキストボックスに、必要な行と列を入力します。これらのテキスト値がテーブルに入力された後、要求されたフォームに変更する必要があります。

この時点で404エラーが発生します

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

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
@SuppressWarnings("unchecked")
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("Text/html");
    PrintWriter pw = response.getWriter();
    pw.println("<html><body>");
    pw.println("<h1>Table generator</h1><table border=1>");

    Integer row = (Integer) request.getAttribute("rows");
    Integer col = (Integer) request.getAttribute("cols");

    if (row != null && col != null) {

        for (int i = 1; i < col; i++) {
            pw.print(HtmlUtils.getTH("center", "COL" + i));
        }

        @SuppressWarnings("rawtypes")
        Vector av = new Vector();

        for (int i = 1; i < row; i++) {

            for (int y = 1; i < col; y++) {

                av.addElement("index" + col + "." + y);

            }
        }

    } else {

        pw.print(HtmlUtils.getTableHead("center", 1));

        pw.print(HtmlUtils.getTH("center", "COL1"));
        pw.print(HtmlUtils.getTH("center", "COL2"));

        @SuppressWarnings("rawtypes")
        Vector av = new Vector();

        for (int i = 1; i < 5; i++) {

            av.addElement("index1." + i);
            av.addElement("index2." + i);

        }

        pw.print(HtmlUtils.getTableContents("center", av, 2));

    }

    pw.println("</table>");

    pw.println("<form action='input' method='post'>");
    pw.println("Rows : <input type='text' name='rows'><br>");
    pw.println("Cols : <input type='text' name='cols'><br>");
    pw.println("<input type='submit'>");
    pw.println("</form></body></html>");
}

助言がありますか

4

1 に答える 1

2

コードからは、リクエストの属性とパラメータが混同されているように見えます。

値を入力した後、ユーザーはフォームの送信ボタンをクリックする必要があります。同じサーブレットに送信するようにフォームを構成する必要があります。このサーブレットは、必要な処理(データベースの値の保存など)を実行してWebページを再表示できますが、ユーザーがフォームに入力した値(存在する場合)を確認する必要があります。2つのテキスト値のいずれかが入力されている場合、サーブレットはこれらの値をテーブルに入れることができます。

フォームが次のようになっているとします。

<form name="input" action="your-servlet-name.action" method="get">
  Text1: <input type="text" name="text1">
  Text2: <input type="text" name="text2">
  <input type="submit" value="Submit">
</form> 

フォームのaction属性は、サーブレットがあるURLに設定する必要があります。Javaコードでは、request.getParameter( "text1")などを呼び出して、ユーザーが入力した値を取得できます。

記述されているコードでは、パラメーターと同じではない要求属性にアクセスしようとしています。パラメータは、ブラウザから送信される値です。属性は、サーバー上のJavaコードによってリクエストに挿入された値です。

于 2013-01-25T16:27:17.373 に答える