解答例 - 実習課題2 - 9.Logicタグライブラリ2
(実習課題2)
以下のWebアプリケーションを作成しなさい。
- クッキーにユーザの名前が登録されていたらその名前を表示する。
- 登録されていなかったら、名前を登録するための入力フォームを表示する。
- フォームに入力された名前が空文字列だった場合には、エラーメッセージを表示するようにする事。
解答例
▼ディレクトリ構成は以下の通り
.
├─com
│ └─techscore
│ └─struts
│ └─chapter9
│ └─exercise2 login.jsp
└─WEB-INF web.xml(実習課題1と同じ),struts-config.xml
├─classes
│ └─com
│ └─techscore
│ └─struts EncodingFilter.class(2章 実習課題2と同じ),
│ │ MessageResources.properties
│ └─chapter9
│ └─exercise2 LoginForm.class,RegisterAction.class
├─lib strutsライブラリjarファイル
└─tld struts-bean.tld,struts-html.tld,struts-logic.tld
※strutsライブラリjarファイル
struts.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-logging.jar
※MessageResource.txtは、MessageResources.propertiesのnative2ascii実行前ファイルです
/**
* LoginForm.java
* TECHSCORE Java JakartaStruts 9章 実習課題2
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*
*/
package com.techscore.struts.chapter9.exercise2;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import javax.servlet.http.HttpServletRequest;
public class LoginForm extends ActionForm{
private String userName = "";
public void setUserName(String userName){
this.userName = userName;
}
public String getUserName(){
return userName;
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){
ActionErrors errors = new ActionErrors();
if (userName.equals("")) {
errors.add("userName", new ActionError("invalid.userName"));
}
return errors;
}
}
/**
* RegisterAction.java
* TECHSCORE Java JakartaStruts 9章 実習課題2
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*
*/
package com.techscore.struts.chapter9.exercise2;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Cookie;
import java.net.URLEncoder;
public class RegisterAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
LoginForm loginForm = (LoginForm)form;
Cookie cookie = new Cookie("userName", URLEncoder.encode(loginForm.getUserName(), "EUC-JP"));
cookie.setMaxAge(60);
response.addCookie(cookie);
response.sendRedirect(request.getContextPath() + "/com/techscore/struts/chapter9/exercise2/login.jsp");
return null;
}
}
<!-- login.jsp -->
<!-- TECHSCORE Java JakartaStruts 9章 実習課題2 -->
<!-- Copyright (c) 2004 Four-Dimensional Data, Inc. -->
<%@ page contentType="text/html; charset=Windows-31J"
session="false"
pageEncoding="Windows-31J"
import="java.net.URLDecoder" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"
prefix="logic" %>
<html:html>
<head><title>TECHSCORE Java JakartaStruts 9章 実習課題2</title></head>
<body>
<logic:notPresent cookie="userName">
<p>ユーザ名を入力してください。</p>
<html:form action="/com/techscore/struts/chapter9/exercise2/Login.do" method="post">
<p>ユーザ名 : <html:text property="userName" />
<html:errors property="userName" /></p>
<p><html:submit value="登録" /></p>
</html:form>
</logic:notPresent>
<logic:present cookie="userName">
<bean:cookie id="user" name="userName"/>
<%=URLDecoder.decode(user.getValue(), "EUC-JP") %>さんようこそ
</logic:present>
</body>
</html:html>
invalid.userName=\u30e6\u30fc\u30b6\u540d\u306f\u5fc5\u305a\u5165\u529b\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u4e0b\u3055\u3044\u3002
invalid.userName=ユーザ名は必ず入力するようにして下さい。
▼struts-config.xml
<?xml version="1.0" encoding="Windows-31J" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm92"
type="com.techscore.struts.chapter9.exercise2.LoginForm" />
</form-beans>
<action-mappings>
<action path="/com/techscore/struts/chapter9/exercise2/Login"
type="com.techscore.struts.chapter9.exercise2.RegisterAction"
name="loginForm92"
scope="request"
validate="true"
input="/com/techscore/struts/chapter9/exercise2/login.jsp">
</action>
</action-mappings>
<message-resources parameter="com.techscore.struts.MessageResources" />
</struts-config>
▼起動URLは以下の通り
WEB_ROOT/com/techscore/struts/chapter9/exercise2/login.jsp
EncodingFilter.javaの参照(2章の実習課題2と同じ)

