Struts のサンプル
Java のフレームワークの代表格とも言える Struts を用いた簡単な Web アプリケーションを作ってみたので、恥晒しのつもりで晒します。
なお、開発環境は以下の通り。
- OS : Windows Vista Home Premium SP2 (32-bit) ※UAC 解除済み
- 言語 : Java 7
- Web アプリケーションサーバ : Apache Tomcat 7.0.22
- 統合開発環境 : eclipse 3.7.1 + WTP 3.3.1, pleiades 1.3.3 で日本語化
1. struts-1.3.10-all.zip を入手する
http://struts.apache.org/ からダウンロード。
2. 動的 Web プロジェクトを作成
eclipse 上で適当な名前(今回は ParseNum とする)の動的 Web プロジェクトを作成する。
3. Struts ライブラリの配置
作った動的 Web プロジェクトの WebContent/WEB-INF/lib 以下に、1. で入手した struts-1.3.10-all.zip を展開して出来た struts-1.3.10/lib 直下にある jar ファイルを全てコピーする。
4. web.xml の記述
WebContent/WEB-INF/web.xml を以下のように編集する。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="struts1a" version="3.0"> <display-name>ParseNum</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
5. struts-config.xml の作成
WebContent/WEB-INF 直下に以下の内容で struts-config.xml を作成する。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="parseform" type="sample.framework.ParseActionForm" /> </form-beans> <action-mappings> <action path="/action" name="parseform" type="sample.framework.ParseAction" input="/parse.jsp" /> </action-mappings> </struts-config>
6. ダミーの index.jsp の作成
WebContent 直下に以下の内容で index.jsp を作成する。
<!doctype html> <html> <head> <title>Index Page</title> </head> <body> <% response.sendRedirect("parse.jsp"); %> </body> </html>
7. parse.jsp の作成
WebContent 直下に以下の内容で parse.jsp を作成する。
<%@ page contentType="text/html; charset=utf-8" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <!doctype html> <html:html lang="true"> <head> <title>進数変換</title> <link rel="stylesheet" href="parse.css" type="text/css"> </head> <body> <html:form action="action.do" method="post"> <fieldset> <legend>入力</legend> <html:text property="input" size="30" /><br> <html:radio property="inRadix" value="2">2 進</html:radio> <html:radio property="inRadix" value="8">8 進</html:radio> <html:radio property="inRadix" value="10">10 進</html:radio> <html:radio property="inRadix" value="16">16 進</html:radio> </fieldset> <p><html:submit value="変換" /></p> <fieldset> <legend>出力</legend> <html:text property="output" size="30" /><br> <html:radio property="outRadix" value="2">2 進</html:radio> <html:radio property="outRadix" value="8">8 進</html:radio> <html:radio property="outRadix" value="10">10 進</html:radio> <html:radio property="outRadix" value="16">16 進</html:radio> </fieldset> </html:form> </body> </html:html>
8. (おまけ)parse.css の作成
WebContent 直下に以下の内容で parse.css を作成する(parse.jsp で呼び出すスタイルシート)。
fieldset { width : 20em }
9. Java クラスファイルの作成
作成した動的 Web プロジェクトの「Java Resources」の src 直下に sample.framework パッケージを作成し、以下のクラスファイルを作る。
package sample.framework; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class ParseActionForm extends ActionForm { private static final long serialVersionUID = 1L; private String input; private String output; private String inRadix; private String outRadix; public ParseActionForm() { inRadix = "10"; outRadix = "10"; } public String getInput() { return input; } public void setInput(String input) { this.input = input; } public String getOutput() { return output; } public void setOutput(String output) { this.output = output; } public String getInRadix() { return inRadix; } public void setInRadix(String inRadix) { this.inRadix = inRadix; } public String getOutRadix() { return outRadix; } public void setOutRadix(String outRadix) { this.outRadix = outRadix; } public void reset(ActionMapping mapping, HttpServletRequest request) { super.reset(mapping, request); try { request.setCharacterEncoding("utf-8"); } catch(UnsupportedEncodingException ex) { ex.printStackTrace(); } } }
package sample.framework; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class ParseAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws Exception { ParseActionForm parseform = (ParseActionForm)form; String input = parseform.getInput(); String output; int inRadix = Integer.parseInt(parseform.getInRadix()); int outRadix = Integer.parseInt(parseform.getOutRadix()); try { int tmp = Integer.parseInt(input, inRadix); output = Integer.toString(tmp, outRadix).toUpperCase(); } catch(NumberFormatException nfe) { output = "Error!"; } parseform.setOutput(output); return mapping.getInputForward(); } }
プロジェクト自体はこれで完成。長くなったので説明はまたの機会に。