m-namikiの日記

おもしろき こともなき世を おもしろく

Strutsによる簡単Webアプリその1

今回作成するアプリケーションは、以下のような処理を実装します。

  1. 入力画面で名前を入力
  2. 結果画面に、入力画面で入力された名前を表示

web.xml

まず始めに、Mavenによって作成されたweb.xmlの編集を行います。web.xmlはWebアプリの設定を定義するファイルです。このファイルに記述することにより、アプリケーション毎に様々な設定を定義することが出来ます。

web.xmlはsrc/main/webapp/WEB-INF配下に作成します。Mavenで作成したWebアプリプロジェクトでは最初から存在するはずですが、もしなければ新たに作成してください。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<webapp>
  <display-name>Simple Struts</display-name>
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>net.masa.simple.struts.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- Standard Action Servlet Configuretion -->
  <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>
  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- The Usual Welcome File List -->
  <welcome-file-list>
    <welcome-file>/pages/index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

入力画面と結果画面の作成

続いて入力画面と結果画面を作成します。入力画面はindex.jsp、結果画面はhello.jspとします。src/main/webapp配下に「pages」というディレクトリを作成してください。各画面はこのディレクトリに作成します。

入力画面(index.jsp

入力画面には名前の入力欄と画面遷移用のボタンを用意します。index.jspの内容は下記の通りです。

<%@page contentType="text/html; charset=UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html:html>
    <head>
        <title>SimpleStruts - index</title>
    </head>
    <body>
        Please input your name.<br/>
        <html:form action="/hello" method="POST">
	    <html:text property="name"/>
            <html:submit value="send"/>
        </html:form>
    <body>
</html:html>
結果画面(hello.jsp

結果画面には、入力画面で入力された名前を表示する表示欄を用意します。hello.jspの内容は下記の通りです。

<%@page contentType="text/html; charset=UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<html:html>
    <head>
        <title>SimpleStruts - hello</title>
    </head>
    <body>
        <h3>Welcome to Struts World!!</h3>
        Hello <c:out value="${name}"/>.
    <body>
</html:html>

結果画面ではStrutsタグライブラリだけでなく、JSTLというJSP標準のタグライブラリを使用します。が、詳細は後日。。。

java

次に実際に処理を行うJavaクラスを作成します。今回は以下の3クラスを作成します。

  • CharacterEncodingFilter.java
    • 画面から送られるリクエストをフィルタリングして、文字コードを変換します
  • SimpleAction.java
    • 画面でボタンがクリックされた場合の処理を定義します
  • SimpleActionForm.java
    • 画面で入力された情報を保持します


さて、実際に作り始める前に、ライブラリを追加する必要があります。というのも、今の状態ではStrutsはおろか、Servletの情報すらこのプロジェクトには定義されていないので、このままソースコードを書いてもコンパイル・エラーとなってしまうためです。

Maven(m2eclipse)では、利用するライブラリを指定すれば自動で取得してきてくれる便利な機能があります。ここではその機能を使用して必要となるライブラリを取得します。

パッケージ・エクスプローラーの「pom.xml」で右クリック→「Maven」→「依存関係の追加」を選択すると、「リポジトリー検索」というダイアログが表示されます。このダイアログの「クエリ」欄に「javax.servlet」と入力すると、「検索結果」欄にいくつかの候補が表示されます。そこから「servlet-api」を選択して展開すると、いくつかのバージョンとjarファイル名が表示されるので、その中から「2.4 - servlet-api-2.4.jar」を選択してOKボタンをクリックしてください。すると、いま選択したjarの情報がpom.xmlに反映され、しばらくするとEclipseの「Maven Console」に色々な情報が表示されます。また、パッケージ・エクスプローラーの「Maven Dependencies」の中に、いま選択した「servlet-api-2.4.jar」が追加されます。これでライブラリの登録は完了です。

このようにMaven(m2eclipse)を利用することで、簡単にライブラリの追加が行えます。では今回必要となるライブラリを、この方法で追加していきます。追加するライブラリは以下の通りです。

groupId artifactId version
javax.servlet servlet-api 2.4
javax.servlet jstl 1.1.2
org.apache.struts struts-core 1.3.9
org.apache.struts struts-taglib 1.3.9
taglib standard 1.1.2

上記表のgroupIdをクエリ欄に入力し、arfifactIdを検索結果から選択して、versionのライブラリを指定して追加してください。

すべてのライブラリの追加が終わったpom.xmlは以下の通りとなります。

<?xml version="1.0"?><project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.masa.simple.struts</groupId>
  <artifactId>SimpleStruts</artifactId>
  <packaging>war</packaging>
  <name>SimpleStruts Maven Webapp</name>
  <version>1.0-SNAPSHOT</version>
  <url>http://maven.apache.org</url>
  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <finalName>SimpleStruts</finalName>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts-core</artifactId>
      <version>1.3.9</version>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts-taglib</artifactId>
      <version>1.3.9</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>
</project>

ここで一箇所だけ修正する必要があります。servlet-apiは、Tomcat等のAPサーバには最初から組み込まれており、ブロジェクトをビルドする場合には必要ですが、デプロイする場合には不要となります。上記のservlet-apiの部分を以下のように書き換えてください。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.4</version>
  <scope>provided</scope>
</dependency>

providedは、ライブラリがJDKやコンテナによって提供される場合に指定します。他にもscopeに設定出来る値がありますので、まとめておきます。

意味
compile scopeを省略した場合のデフォルト値。すべての場合にクラスパスに追加 struts-core
provided ライブラリがJDKやコンテナによって提供される場合に指定。コンパイル時のみクラスパスに追加 servlet-api
runtime 実行時に必要な場合に指定。テストの実行および通常の実行時にクラスパスに追加 JDBCドライバ
test テストの時のみ必要な場合に指定。テストのコンパイルと実行時にクラスパスに追加 jUnit

これでソースコードを書く準備が整いました。次回からは実際にJavaクラスを作り始めます。