アプリケーションの作成 1
サーバーサイドの作成
JSONICには、SeasarやSpringと連携する機能があります。そこで今回は、Seasar、JSONICとTomcatを使用してサーバーサイドを作成します。
まず、JSONICからコールされるServiceやDaoを作成します。インターフェースやDaoについては省略しますが、Serviceの実装クラスのコードは次のようになります。
package sample.service.impl; ...中略... public class EmpServiceImpl implements EmpService { public List<Emp> find(EmpQuery query) { return empDao.getDatas(query); } public void create(Emp emp) { empDao.insert(emp); } public void update(Emp emp) { empDao.update(emp); } public void delete(Emp emp) { empDao.delete(emp); } ...中略... }
上記のコードは複雑なロジックを記述していないので、Webアプリケーションを作成した事のあるJava技術者であれば理解できると思います。
作成したServiceや、Daoをdiconファイルに記述します(注:今回は、理解しやすさを優先して、app.diconに直接記述しています)。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="aop.dicon"/> <include path="dao.dicon"/> <component class="sample.service.impl.EmpServiceImpl" > <aspect>aop.traceThrowsInterceptor</aspect> <aspect>aop.traceInterceptor</aspect> <aspect>j2ee.requiredTx</aspect> </component> <component class="sample.dao.EmpDao" > <aspect>dao.interceptor</aspect> </component> </components>
そして、JSONICとSeasarを連携させるためには、web.xmlを次のように記述します。
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="2.4"> <filter> <filter-name>s2filter</filter-name> <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class> </filter> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <description>JSON-WebService</description> <servlet-name>json-ws</servlet-name> <servlet-class>net.arnx.jsonic.web.WebServiceServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value> container: 'net.arnx.jsonic.web.S2Container' debug: true mappings: { '/[package]/[class]/[id].[ext]': 'sample.web.${package}.service.${class}Service' '/[package]/[class].[ext]': 'sample.web.${package}.service.${class}Service' '/[class].[ext]': 'sample.service.${class}Service' } </param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/s2servlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>json-ws</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> </web-app>
JSON-WebServiceのinit-paramに注目してください。containerに、'net.arnx.jsonic.web.S2Container'と記述することで、Seasarとの連携が可能になります('net.arnx.jsonic.web.SpringContainer'と記述すればSpringと連携できます)。また、mappingsには、URLとDIコンテナに登録されたコンポーネントのマッピングを記述します。この記述の場合、例えば、/emp.jsonというURLでアクセスした場合、sample.service.EmpServiceがコールされます。
RESTスタイルの場合、コールされるメソッドは、次のようにHTTPのメソッドによって決定されます。
- GET
findメソッドが呼び出される。引数はURLのクエリ文字列で指定
- POST
createメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
- PUT
updateメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
- DELETE
deleteメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
動作確認をするには、Tomcatを起動し、ブラウザに次のURLを入力しアクセスします(注:URLはTomcatの設定により変わります)。
- http://localhost:8080/curl_server/emp.json
すると、次のようなリクエストが返ってきます。
[ { "deptno": 20, "empno": 7369, "ename": "SMITH", "hiredate": 345826800000, "job": "CLERK", "mgr": 7902, "sal": 800.0 }, { "deptno": 30, "empno": 7499, "ename": "ALLEN", "hiredate": 351442800000, "job": "SALESMAN", "mgr": 7698, "sal": 1600.0 }, ...中略... ]
Service、Daoを作成して、それをSeasarに登録し、web.xmlを記述するだけで、サーバーサイドの準備は完了です。