JSPとサーブレットを利用した注文アプリケーションのサンプル

JSPとサーブレット、Beanを用いてログインと注文を受け付けるアプリケーションを作成します。

コード (JSPファイル: login.jsp)

<%@page contentType="text/html"%>
<%@page 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>JSP Page</title>
  </head>
  <body>
    <h1>Login</h1>
    <FORM method="POST" action="Control">
      UserName : <INPUT type="text" name="username"><br><br>
      Password : <INPUT type="password" name="password"><br><br>
      <INPUT type="submit" name="pagename" value="SEND">
      <INPUT type="reset" value="RESET">  
    </FORM>  
  </body>
</html>

コード (JSPファイル: authok.jsp)

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="userbeanses" scope="session" class="webApplication27.UserBean" />
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
    <h1>Login</h1>
    <p><jsp:getProperty name="userbeanses" property="aName" /> さん、ようこそ</p>
    <!--
    <FORM>
        <INPUT TYPE="submit" name="pagename" value="商品一覧を見る">
    </FORM>
    -->
    <a href="product.jsp">商品一覧</a>
  </body>
</html>

コード (JSPファイル: autherror.jsp)

<%@page contentType="text/html"%>
<%@page 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>
  </body>
</html>

コード (JSPファイル: product.jsp)

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="userbeanses" scope="session" class="webApplication27.UserBean" />
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
    <h1>JSP Page</h1>
    <P><jsp:getProperty name="userbeanses" property="aName" /> さん!商品を選んでね</P>
    <FORM method="POST" action="Control">
      <INPUT TYPE="checkbox" name="product" value="JustTomcat">JustTomcat<BR>
      <INPUT TYPE="checkbox" name="product" value="WebService">WebService<BR>
      <INPUT TYPE="checkbox" name="product" value="StepJava">StepJava<BR>
      <INPUT TYPE="checkbox" name="product" value="Servlet">Servlet<BR>
      <INPUT TYPE="checkbox" name="product" value="JSP">JSP<BR>
      <BR><BR>
      <INPUT TYPE="submit" name="pagename" value="注文">
      <INPUT TYPE="reset" value="リセット">
    </FORM>
  </body>
</html>

コード (JSPファイル:sessionerror.jsp)

<%@page contentType="text/html"%>
<%@page 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>JSP Page</title>
  </head>
  <body>
    <h1>JSP Page</h1>
  </body>
</html>

コード (JSPファイル: order.jsp)

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="userbeanses" scope="session" class="webApplication27.UserBean" />
<%@ taglib uri="/OrderLibrary" prefix="product" %>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Book online</title>
  </head>
  <body>
    <h1>注文</h1>
    <TABLE align="center" border="1" width="100">
      <CAPTION align="TOP">
        <jsp:getProperty name="userbeanses" property="aName" /> さんの注文リスト
      </CAPTION>
      <product:getOrder />
    </TABLE>
    <BR><BR>
    <A HREF="./Control">ログインに戻る</A>
  </body>
</html>

コード (サーブレット:Control.java)

package webApplication27;

import com.sun.security.auth.login.ConfigFile;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import webApplication27.*;

public class Control extends HttpServlet {
  /** Handles the HTTP <code>GET</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    RequestDispatcher rd = null;
    rd = getServletConfig().getServletContext().getRequestDispatcher("/login.jsp");
    rd.forward(request, response);
    //processRequest(request, response);
  }

  /** Handles the HTTP <code>POST</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    if (request.getParameter("pagename").equals("SEND") == true) {
      webApplication27.UserBean ub = null;
      ub = new webApplication27.UserBean();

      String formun = request.getParameter("username");
      String formps = request.getParameter("password");
      ub.setaName(formun);
      ub.setPassword(formps);

      webApplication27.UserAuthBean uab = null;
      uab = new webApplication27.UserAuthBean();

      HttpSession session = null;
      RequestDispatcher rd = null;
      if (uab.execute(ub) == true) {
        //認証に成功
        //セッションオブジェクトを作成
        if (checkSession(request) == true) {
          //セッションオブジェクトがある場合は獲得
          session = request.getSession(false);
        } else {
          //セッションオブジェクトがない場合は新規作成
          session = request.getSession(true);
        }
        //Beansをセッションオブジェクトに保存
        session.setAttribute("userbeanses", ub);


        rd = getServletConfig().getServletContext().getRequestDispatcher("/authok.jsp");
      } else {
        //認証に失敗
        rd = getServletConfig().getServletContext().getRequestDispatcher("/autherror.jsp");
      }
      rd.forward(request, response);
    } else {
      String[] product = (String[]) request.getParameterValues("product");
      HttpSession session = request.getSession(false);
      webApplication27.UserBean ub
        = (webApplication27.UserBean) session.getAttribute("userbeanses");
      ub.setProduct(product);

      webApplication27.UserOrderBean uob = new webApplication27.UserOrderBean();
      boolean beanResult = uob.execute(ub);

      RequestDispatcher rd = null;
      rd = getServletConfig().getServletContext().getRequestDispatcher("/order.jsp");
      rd.forward(request, response);
    }
  }

  /** Returns a short description of the servlet. */
  public String getServletInfo() {
    return "Short description";
  }

  //セッションオブジェクトのチェックメソッド
  public boolean checkSession(HttpServletRequest req) {
    HttpSession session = req.getSession(false);
    if (session != null) {
      return true;
    } else {
      return false;
    }
  }
}

コード (サーブレット: OrderHandler.java)

package webApplication27;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;

public class OrderHandler extends TagSupport {
  public int doEndTag() {
    HttpSession session = pageContext.getSession();
    //String[] product = (String[])session.getAttribute("userbeanses");
    webApplication27.UserBean ub
      = (webApplication27.UserBean) session.getAttribute("userbeanses");
    String[] product = ub.getProduct();

    JspWriter out = pageContext.getOut();

    try {
      out.println("<TR><TD>Name</TD></TR>");

      for (int i = 0; i < product.length; i++) {
        out.print("<TR><TD>");
        out.print(product[i]);
        out.print("</TD></TR>");
      }
    } catch (Exception e) {
    }
    return EVAL_PAGE;
  }

  /** Creates a new instance of OrderHandler */
  public OrderHandler() {
  }
}

コード (UserAuthBean.java)

package webApplication27;

public class UserAuthBean {

  /** Creates a new instance of UserAuthBean */
  public UserAuthBean() {
  }

  public boolean execute(UserBean ub) {
    if (ub.getaName().equals("taro") == true && ub.getPassword().equals("taro") == true) {
      return true;
    } else {
      return false;
    }
  }
}

コード (Bean: UserBean.java)

package webApplication27;

import java.io.*;

public class UserBean implements Serializable {

  private String name;
  private String password;
  private String address;
  private String[] product;

  /** Creates a new instance of UserBean */
  public UserBean() {
    name = "No Name";
    address = "No Address";
  }

  public String getaName() {
    return name;
  }

  public void setaName(String na) {
    name = na;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String ps) {
    password = ps;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String adr) {
    address = adr;
  }

  public String[] getProduct() {
    return product;
  }

  public void setProduct(String[] product) {
    this.product = product;
  }
}

コード (UserOrderBean.java)

package webApplication27;

public class UserOrderBean {

  /** Creates a new instance of UserOrderBean */
  public UserOrderBean() {
  }

  public boolean execute(webApplication27.UserBean ub) {
    String[] product = ub.getProduct();

    //FORM情報が入力されているかチェック
    if (product == null) {
      //入力されていない場合
      ub.setProduct(new String[0]);
      return false;
    } else {
      //入力されている場合
      return true;
    }
  }
}

コード (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
    "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>Control</servlet-name>
    <servlet-class>webApplication27.Control</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Control</servlet-name>
    <url-pattern>/Control</url-pattern>
  </servlet-mapping>
  <jsp-config>
    <taglib>
      <taglib-uri>/OrderLibrary</taglib-uri>
      <taglib-location>/WEB-INF/tlds/order.tld</taglib-location>
    </taglib>
  </jsp-config>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

実行結果

起動すると下図のログイン画面が表示されます。


ユーザー名とパスワードを入力し、[SEND]ボタンをクリックします。


ユーザー名とパスワードが一致していればログイン完了画面が表示されます。[商品一覧]リンクをクリックします。


商品一覧ページが表示されます。


購入する商品のチェックボックスにチェックをつけ[注文]ボタンをクリックします。


チェックした注文商品が画面に表示されます。


著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
掲載日: 2011-02-14
iPentec all rights reserverd.