1. 程式人生 > >日系框架之seasar2(SAStruts)升級篇

日系框架之seasar2(SAStruts)升級篇

參照上面的例子,建立如下工程:

jar包一覽如下圖:

程式碼如下:

AddAction.java

  1. package tutorial.action;
  2. import javax.annotation.Resource;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpSession;
  5. import org.seasar.struts.annotation.ActionForm;
  6. import org.seasar.struts.annotation.Execute;
  7. import tutorial.dto.AddDto;
  8. import tutorial.form.AddForm;
  9. import tutorial.service.AddDtoService;
  10. import tutorial.service.AddService;
  11. /**
  12.  * @author shenbin
  13.  */
  14. publicclass AddAction {
  15. public Integer result;
  16. public AddService addService;
  17. public AddDtoService addDtoService;
  18. public HttpServletRequest request;
  19. public HttpSession session;
  20. @ActionForm
  21. @Resource
  22. protected AddForm addForm;
  23. @Execute(validator = false)
  24. public String index() {
  25.         request.setAttribute("r_name", addForm.r_name);
  26.         session.setAttribute("s_name", addForm.s_name);
  27. return"index.jsp";
  28.     }
  29. @Execute(input = "index.jsp")
  30. public String submit() {
  31.         addForm.r_name = (String)request.getAttribute(
    "r_name");
  32.         addForm.s_name = (String)session.getAttribute("s_name");
  33.         result = addService.add(Integer.valueOf(addForm.arg1), Integer.valueOf(addForm.arg2));
  34. return"index.jsp";
  35.     }
  36. @Execute(input = "index.jsp")
  37. public String dtosvc() {
  38.         String arg1 = addForm.arg1;
  39.         String arg2 = addForm.arg2;
  40. int _result = addService.add(Integer.valueOf(arg1), Integer.valueOf(arg2));
  41.         String result = String.valueOf(_result);
  42.         AddDto addDto = new AddDto();
  43.         addDto.arg1 = arg1;
  44.         addDto.arg2 = arg2;
  45.         addDto.result = result;
  46.         addDtoService.persistence(addDto);
  47. return"index.jsp";
  48.     }
  49. }

Add.dicon

  1. <?xmlversion="1.0"encoding="Shift_JIS"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  3.     "http://www.seasar.org/dtd/components21.dtd">
  4. <components>
  5. <componentclass="tutorial.service.impl.AddServiceImpl"/>
  6. <componentclass="tutorial.service.impl.AddDtoServiceImpl"/>
  7. </components>

AddDto.java

  1. package tutorial.dto;
  2. /**
  3.  * @author shenbin
  4.  */
  5. import javax.persistence.Entity;
  6. import javax.persistence.GeneratedValue;
  7. import javax.persistence.Id;
  8. @Entity
  9. publicclass AddDto {
  10. @Id
  11. @GeneratedValue
  12. public Integer id;
  13. public String arg1;
  14. public String arg2;
  15. public String result;
  16. }

AddForm.java

  1. package tutorial.form;
  2. import org.seasar.struts.annotation.IntegerType;
  3. import org.seasar.struts.annotation.Required;
  4. /**
  5.  * @author shenbin
  6.  */
  7. publicclass AddForm {
  8. public String r_name;
  9. public String s_name;
  10. @Required
  11. @IntegerType
  12. public String arg1;
  13. @Required
  14. @IntegerType
  15. public String arg2;
  16. }

AddDtoServiceImpl.java

  1. package tutorial.service.impl;
  2. import java.util.List;
  3. import org.seasar.extension.jdbc.JdbcManager;
  4. import tutorial.dto.AddDto;
  5. import tutorial.service.AddDtoService;
  6. /**
  7.  * @author shenbin
  8.  */
  9. publicclass AddDtoServiceImpl implements AddDtoService {
  10. public JdbcManager jdbcManager;
  11. publicvoid persistence(AddDto addDto) {
  12.         System.out.println("================INSERT START==================");
  13.         jdbcManager.insert(addDto).execute();
  14.         System.out.println("================INSERT   END==================");
  15.         System.out.println("================SELECT START==================");
  16. long count = jdbcManager.from(AddDto.class).getCount();
  17.         System.out.println(count);
  18.         List<AddDto> results = jdbcManager.from(AddDto.class).getResultList();
  19. for (AddDto add : results) {
  20.             System.out.println(add.result);
  21.         }
  22.         System.out.println("================SELECT   END==================");
  23.     }
  24. }

AddServiceImpl.java

  1. package tutorial.service.impl;
  2. import tutorial.service.AddService;
  3. /**
  4.  * @author shenbin
  5.  */
  6. publicclass AddServiceImpl implements AddService {
  7. publicint add(int arg1, int arg2) {
  8. return arg1 + arg2;
  9.     }
  10. }

AddDtoService.java

  1. package tutorial.service;
  2. import tutorial.dto.AddDto;
  3. /**
  4.  * @author shenbin
  5.  */
  6. publicinterface AddDtoService {
  7. publicvoid persistence(AddDto addDto);
  8. }

AddService.java

  1. package tutorial.service;
  2. /**
  3.  * @author shenbin
  4.  */
  5. publicinterface AddService {
  6. publicint add(int arg1, int arg2);
  7. }

配置檔案基本和上例一致,只有部分檔案需要修改。

app.dicon

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5. <includepath="convention.dicon"/>
  6. <includepath="aop.dicon"/>
  7. <includepath="j2ee.dicon"/>
  8. <includepath="s2jdbc.dicon"/>
  9. <includepath="tutorial/dicon/Add.dicon"/>
  10. <componentname="actionMessagesThrowsInterceptor"class="org.seasar.struts.interceptor.ActionMessagesThrowsInterceptor"/>
  11. </components>

jdbc.dicon

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  3.     "http://www.seasar.org/dtd/components21.dtd">
  4. <componentsnamespace="jdbc">
  5. <includepath="jta.dicon"/>
  6. <!-- for HSQLDB -->
  7. <componentname="xaDataSource"
  8. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  9. <propertyname="driverClassName">
  10.             "org.hsqldb.jdbcDriver"
  11. </property>
  12. <propertyname="URL">
  13.             "jdbc:hsqldb:file:"
  14.                 + application.getRealPath("/WEB-INF/data")
  15.                 + "/test"
  16. </property>
  17. <propertyname="user">"sa"</property>
  18. <propertyname="password">""</property>
  19. </component>
  20. <!-- for H2 -->
  21.     <!--
  22. <componentname="xaDataSource"
  23. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  24. <propertyname="driverClassName">
  25.             "org.h2.Driver"
  26. </property>
  27. <propertyname="URL">
  28.             "jdbc:h2:file:"
  29.                 + @[email protected](@[email protected]).getCanonicalPath()
  30.                 + "/data/demo;DB_CLOSE_ON_EXIT=FALSE"
  31. </property>
  32. <propertyname="user">"sa"</property>
  33. <propertyname="password"></property>
  34. </component>
  35.     -->
  36. <!-- for Oracle -->
  37.     <!--
  38. <componentname="xaDataSource"
  39. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  40. <propertyname="driverClassName">
  41.             "oracle.jdbc.driver.OracleDriver"
  42. </property>
  43. <propertyname="URL">
  44.             "jdbc:oracle:thin:@xxx:1521:xxx"
  45. </property>
  46. <propertyname="user">"xxx"</property>
  47. <propertyname="password">"xxx"</property>
  48. </component>
  49.     -->
  50. <!-- for DB2 -->
  51.     <!--
  52. <componentname="xaDataSource"
  53. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  54. <propertyname="driverClassName">
  55.             "com.ibm.db2.jcc.DB2Driver"
  56. </property>
  57. <propertyname="URL">
  58.             "jdbc:db2://foo.bar.com:50000/SAMPLE"
  59. </property>
  60. <propertyname="user">"db2user"</property>
  61. <propertyname="password">"db2password"</property>
  62. <initMethodname="addProperty">
  63. <arg>"currentSchema"</arg>
  64. <arg>"SCHEMA"</arg>
  65. </initMethod>
  66. </component>
  67.     -->
  68. <!-- for PostgreSQL -->
  69.     <!--
  70. <componentname="xaDataSource"
  71. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  72. <propertyname="driverClassName">
  73.             "org.postgresql.Driver"
  74. </property>
  75. <propertyname="URL">
  76.           "jdbc:postgresql://localhost/TEST"
  77. </property>
  78. <propertyname="user">"xxxx"</property>
  79. <propertyname="password">"xxxx"</property>
  80. </component>
  81.     -->
  82.     <!-- MySQL
  83.     - MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に,
  84.         以下の接続パラメータを追加で指定してください.
  85. useUnicode=true
  86. characterEncoding=[MySQLのエンコーディングに対応した
  87.         Javaのエンコーディング名]
  88.         例:"jdbc:mysql://localhost:3306/test?useUnicode=true" +
  89.         "&characterEncoding=Windows-31J"
  90.     - MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には,
  91.         URL指定の後に,以下の接続パラメータを追加で指定してください.
  92. characterEncoding=UTF-8またはWindows-31J
  93. characterSetResults=UTF-8またはWindows-31J
  94.         例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" +
  95.         "&characterSetResults=UTF-8"
  96.         この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が
  97.         行なわれるため,ユーザー定義外字などの一部の文字が化けます.
  98.         この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の
  99.         変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が
  100.         行なわれるようになります.この結果,文字化けを防げます.
  101.         なおJIS X 0212(補助漢字)を使用する場合は,Windows-31Jではなく
  102.         UTF-8を指定する必要があります.
  103.     - 上記以外の場合は,my.cnfでdefault-character-setの設定を適切に
  104.         (cp932やutf8など.デフォルトのlatin1は不可)行なっていれば,
  105.         文字化けは防げます.
  106. <componentname="xaDataSource"
  107. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  108. <propertyname="driverClassName">
  109.             "com.mysql.jdbc.Driver"
  110. </property>
  111. <propertyname="URL">
  112.             "jdbc:mysql://localhost:3306/test"
  113. </property>
  114. <propertyname="user">"xxx"</property>
  115. <propertyname="password">"xxx"</property>
  116. </component>
  117.     -->
  118. <!-- for SQLServer -->
  119.     <!--
  120. <componentname="xaDataSource"
  121. class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  122. <propertyname="driverClassName">
  123.             "net.sourceforge.jtds.jdbc.Driver"
  124. </property>
  125. <propertyname="URL">
  126.             "jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
  127. </property>
  128. <propertyname="user">"xxxx"</property>
  129. <propertyname="password">"xxxx"</property>
  130. </component>
  131.     -->
  132. <componentname="connectionPool"
  133. class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
  134. <propertyname="timeout">600</property>
  135. <propertyname="maxPoolSize">10</property>
  136. <propertyname="allowLocalTx">true</property>
  137. <destroyMethodname="close"/>
  138. </component>
  139. <componentname="DataSource"
  140. class="org.seasar.extension.dbcp.impl.DataSourceImpl"
  141. />
  142. <!-- from JNDI -->
  143.     <!--
  144. <componentname="DataSource"
  145. class="javax.sql.DataSource">
  146.         @[email protected]("java:comp/env/jdbc/DataSource")
  147. </component>
  148.     -->
  149.     <!--
  150. <componentname="DataSource"
  151. class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
  152.     -->
  153. </components>

其他無需變化。

jsp檔案部分

/view/add/index.jsp

  1. <%@page pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. <title>Tutorial: Add</title>
  5. <linkrel="stylesheet"type="text/css"href="${f:url('/css/sa.css')}"/>
  6. </head>
  7. <body>
  8. <h1>Tutorial: Add</h1>
  9. <html:errors/>
  10. <s:form>
  11. request:<html:textproperty="r_name"value="request"/>
  12. session:<html:textproperty="s_name"value="session"/>
  13. <br/>
  14. <br/>
  15. <html:textproperty="arg1"/> +
  16. <html:textproperty="arg2"/>
  17. = ${f:h(result)}<br/>
  18. <inputtype="submit"name="submit"value="サブミット"/>
  19. <br>
  20. <inputtype="submit"name="dtosvc"value="Persistence"/>
  21. </s:form>
  22. </body>
  23. </html>

資料庫初始檔案:

WEB-INF/data/test.properties

  1. #HSQL Database Engine
  2. #Sat Nov 03 19:49:53 JST 2007
  3. hsqldb.script_format=0
  4. runtime.gc_interval=0
  5. sql.enforce_strict_size=false
  6. hsqldb.cache_size_scale=8
  7. readonly=false
  8. hsqldb.nio_data_file=true
  9. hsqldb.cache_scale=14
  10. version=1.8.0
  11. hsqldb.default_table_type=memory
  12. hsqldb.cache_file_scale=1
  13. hsqldb.log_size=200
  14. modified=yes
  15. hsqldb.cache_version=1.7.0
  16. hsqldb.original_version=1.8.0
  17. hsqldb.compatible_version=1.8.0

test.script

  1. CREATE SCHEMA PUBLIC AUTHORIZATION DBA
  2. CREATE USER SA PASSWORD ""
  3. GRANT DBA TO SA
  4. SET WRITE_DELAY 20
  5. SET SCHEMA PUBLIC
  6. create table ADD_DTO (ID integer generated by default as identity, ARG1 varchar(255) not null, ARG2 varchar(255) not null, RESULT varchar(255) not null)

如次,在原來的基礎上追加了services層和dto層協同工作。

相關推薦

框架seasar2(SAStruts)升級

參照上面的例子,建立如下工程: jar包一覽如下圖: 程式碼如下: AddAction.java package tutorial.action; import javax.annotation.Resource; import javax.servlet.htt

框架Seasar2SQL註釋大坑-yellowcong

Seasar是一個輕量級的框架,用起來也挺方便的,但是在註釋和除法的時候,會有一些坑,我就跳進去了,淡騰啊,注意/*變數*/和/* 註釋*/之間,區別是 多了一個空格。還有/*變數*/doubi預設值和/*變數*/ /100的演算法中,不同的地方是,多了一

框架seasar2(S2JPAOpenJPA)

MySql上新建資料庫s2openjpa,並執行如下DDL: SET FOREIGN_KEY_CHECKS=0;  -- ----------------------------  -- Table structure for dept  -- ------------

框架seasar2(S2Hibernate3)

所需Jar包列表: antlr-2.7.6.jaraopalliance-1.0.jarcommons-collections-3.1.jarcommons-lang-2.3.jarcommons-logging-1.1.jardom4j-1.6.1.jarehcache

Hibernate框架路(二)一對多關

true pre conn 關系 編寫 none isp exce dia 在下列案例中:   客戶是一;聯系人是多;客戶可以擁有多個聯系人;一個聯系人只有一個客戶   1、編寫實體類 package com.pojo; import java.util

Hibernate框架路(二)多對多多關

-m let ble ssi gin rop assert on() odi 1、配置實體類 package cn.pojo; import java.util.HashSet; import java.util.Set; public class

重構路第六——處理概括關

取代 interface face down 函數 orm 塑造 tor 本體 1 Pull up Field(字段上移) 2 Pull up Method(函數上移) 3 Pull up Constructor Body(構造函數本體上移) 4 Push Down Met

開源接口測試框架公司應用

希望 簡化 div json del class 以及 str png 最近一段時間,筆者一直在和我們公司的研發童鞋,運維童鞋等一起努力來搞我們公司的接口,每晚的那個點我們就開始了我們的工作,由於是後期補做,所以在時間上也是那麽匆忙,閑暇

構建NetCore應用框架實戰(一):什麽是框架,如何設計一個框架

net 希望 dmi 清晰 構建 組織 評估 系統開發 概念 一、系列簡述 本篇起,將通過一系列文章,去描述如何構建一個應用開發框架,並以作者開發的框架為例,逐個點展開分析,如何從零開始,構建自己的開發框架。 本系列文章的目的,是帶領有一編程經驗的人,通過動手,初步完成

構建NetCore應用框架實戰索引

slist strong cor spa str etc 構建 .com core 構建NetCore應用框架之實戰篇 構建NetCore應用框架之實戰篇(一):什麽是框架,如何設計一個框架 構建NetCore應用框架之實戰篇索引

構建NetCore應用框架實戰(四):BitAdminCore框架1.0登錄功能細化及技術選型

1.0 dmi 也會 繼承 blank bit 技術選型 cor 我會 本篇承接上篇內容,如果你不小心點擊進來,建議從第一篇開始完整閱讀,文章內容繼承性連貫性。 構建NetCore應用框架之實戰篇系列 一、BitAdminCore框架1.0版本 1、1.0版本是指

NET Core應用框架BitAdminCore框架應用系列

net EDA clas IE span targe slist target nco BitAdminCore是基於NET Core2.0的後端快速開發框架,本篇主要目標是介紹如何使用框架開發應用。框架的一些特性等。 系列鏈接 BitAdminCore框架應用

TK可視化文件內容查找(升級

基礎 bind ack 用戶 taf 按鈕 column 列表 win 升級為帶有選擇框 分三種查看格式一種是表格查看 一種是文本查看 一種是列表 1.列表查看類 # listbox 顯示數據 import tkinter class ListShowData:

Python開發【第二十一】:Web框架Django【基礎】

name line 控制 creat js等 nec serve pan xiaohua 一、 Django簡介 1.web框架簡介 具體介紹Django之前,必須先介紹WEB框架等概念。 web框架: 別人已經設定好的一個web網站模板,你學習它的規則,然後“填空”或“修

JAVA常用集合框架用法詳解基礎Colletion介面

首先,在學習集合之前我們能夠使用的可以儲存多個元素的容器就是陣列。 下面舉幾個例子主要是引出集合類的: 1、8,4,5,6,7,55,7,8  像這樣的型別相同的可以使用陣列來儲存,本例可以用int[] arr來儲存。 2、”zhnagsan”,true,68 像這樣的可以使

JAVA常用集合框架用法詳解基礎Colletion子介面Set

這一篇我們來介紹Collection介面的另一個子介面,Set介面。Set是個介面,元素不可以重複,是無序的。Set介面中的方法和Collection的一致。 A、Set的子類: 1、HashSet:此類實現的Set介面,由雜湊表(實際上是一個HashMap)例項支援,它不保證Set的迭代順

JAVA常用集合框架用法詳解基礎Colletion子介面List

接著上一篇,接著講講集合的知識。上一篇講了Collection介面。它可以說是集合的祖先了,我們這一篇就說說它的子孫們。 一、Collection的子介面 List:有序(存入和取出的順序一致),元素都有索引(即角標),元素可以重複。 Set:元素不能重複,無序的。 首先講講L

Django框架第二

一、知識點回顧 1、MTV模型   model:模型,和資料庫相關的   template:模板,存放html檔案,模板語法(目的是將變數如何巧妙的嵌入到HTML頁面中)。    views:檢視函式 另加urls:url路徑與檢視函式的對映關係,,可以不是一一對應的。 2、相關的一些命令   

ROS2GO系統升級(Ubuntu 18.04 + ROS 1 Melodic + ROS 2 Bouncy + V-Rep等)

本教程風險極大,請不要輕易嘗試。當然此篇方法適用於任何想從Ubuntu 16.04升級到18.04(10年超長期支援)的使用者。 ----過程如下::---- [email protected]:~$ sudo apt update [e

JetBrains開發者見聞(一)Kotlin/Native 嚐鮮

簡述: 今天我們來講點Kotlin中比較時髦的東西,有的人可能會說:“不像你之前的風格啊,之前的文章不是一直在死扣語法以及語法糖背後祕密。當你還在死扣泛型語法的時候,別人的文章早就說了Kotlin/Native和Kotlin1.3的新特性”。瞬間感覺自己out了,今天我們就說說這些時髦的東西,也許你能看到一些