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の積極的な活用にも取り組み中。
とっても恥ずかしがり。