Struts2をやってみる (1)
まぁStruts1.xがEOLっていう事で代わりとなりえるだろうフレームワークを調査中で。でまぁStruts2とかもあるんじゃないかっていう事で色々勉強をしてみる事に
セットアップ
まぁ本来どうやるのかは微妙ですけど。gradleでプロジェクト管理してEclipseで開発したり、jettyで動かしてみたりしたいのでbuild.gradleを書く
apply plugin: "java"
apply plugin: "war"
apply plugin: "jetty"
apply plugin: "eclipse"
ext {
targetDir = "target"
}
buildDir = targetDir
repositories {
mavenCentral()
}
dependencies {
compile "org.apache.struts:struts2-core:2.3.15.1"
}
sourceSets {
main {
output.classesDir = "${buildDir}/classes"
output.resourcesDir = "${buildDir}/classes"
}
test {
output.classesDir = "${buildDir}/classes"
}
}
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.findAll { entry ->
entry.kind == "output"
}*.path = "/${project.name}/${targetDir}/classes"
}
}
jettyとかで動かしたい時は
gradle jettyRun
まぁ構造とかは
├── build.gradle └── src ├── main │ ├── java │ │ └── sample │ │ └── action │ │ └── IndexAction.java │ ├── resources │ │ └── struts.xml │ └── webapp │ └── WEB-INF │ ├── jsp │ │ └── index.jsp │ └── web.xml └── test ├── java └── resources
んな感じ。で上記で書く必要のあるファイルを書いていく
src/main/resources/struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- package name属性に指定するのはユニークな値であればなんでも良いっぽい -->
<!-- namespaceでプレフィックス的なが指定出来る模様 -->
<package name="sample" extends="struts-default" namespace="/sample">
<action name="index" class="sample.action.IndexAction">
<result>/WEB-INF/jsp/index.jsp</result>
</action>
</package>
</struts>
Struts2にはZero Configuration的な機構なあれもあるらしいけどそこまでやってないので(ry
src/main/webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
特に言う事無いと思うので
んまぁこれでStruts2が動く環境を構築したのでJavaソース及びJSPを書いていく
要件
名前入力してサブミットしたら表示するただそれだけ
src/main/webapp/WEB-INF/jsp/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
<s:form action="index">
<s:textfield name="name" />
<s:submit />
</s:form>
<s:if test="name != null">
<p>say: <s:property value="name" /></p>
<p>say: ${name}</p>
</s:if>
</body>
</html>
src/main/java/sample/action/IndexAction.java
package sample.action;
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name = null;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
デフォルトだとexecuteだと思いますが、struts.xmlにて
<action name="index" class="sample.action.IndexAction" method="execute">
</action>
っていう感じで指定出来る模様。検証してないけど...
JSP側からはActionのgetterメソッドをOGNL式として評価して利用できる模様。
んでコンパイルしてサーバー起動。テキストボックスがあるのでそこに適当に入力してサブミット
っていう感じになる。んまぁファーストステップ的な所はこんな所で