Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <!-- DataSourceの設定。 -->  
  2. <bean id="dataSource" class="……">……</bean>  
  3.   
  4. <bean id="transactionManager"  
  5. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  6. <property name="dataSource" ref="dataSource"/>  
  7. </bean>  
  8.   
  9. <!-- 単一のJDBCデータソース向けのトランザクションマネージャ。 -->  
  10. <tx:advice id="transactionInterceptor" transaction-manager="transactionManager">  
  11.   <tx:attributes>  
  12.     <tx:method name="execute*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  13.   </tx:attributes>  
  14. </tx:advice>  
  15.   
  16. <!-- AOPの設定 -->  
  17. <aop:config>  
  18. <aop:pointcut id="blogicBeans" expression="bean(*BLogic)"/>  
  19. <aop:pointcut id="serviceBeans" expression="bean(*Service)"/>  
  20. <aop:advisor  
  21. pointcut-ref="blogicBeans"  
  22. advice-ref="transactionInterceptor"/>  
  23. <aop:advisor  
  24. pointcut-ref="serviceBeans"  
  25. advice-ref="transactionInterceptor"/>  
  26. </aop:config>  
<!-- DataSourceの設定。 -->
<bean >……</bean>

<bean 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<!-- 単一のJDBCデータソース向けのトランザクションマネージャ。 -->
<tx:advice >
  <tx:attributes>
    <tx:method name="execute*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
  </tx:attributes>
</tx:advice>

<!-- AOPの設定 -->
<aop:config>
<aop:pointcut />
<aop:pointcut />
<aop:advisor
pointcut-ref="blogicBeans"
advice-ref="transactionInterceptor"/>
<aop:advisor
pointcut-ref="serviceBeans"
advice-ref="transactionInterceptor"/>
</aop:config>


上面的例子是发生例外时,进行rollback。
但有时不想抛出例外,仅仅想rollback的话可以这样写。

Java代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. if(有业务错误){   
  2. //仅仅想rollback   
  3. TransactionUtil.setRollbackOnly();   
  4. }  
if(有业务错误){
//仅仅想rollback
TransactionUtil.setRollbackOnly();
}


【数据库操作】
SQL的定义等配置和iBATIS一样。
Terasoluna的QueryDAOiBatisImpl提供了以下的方法。
executeForObject (String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz, int
beginIndex, int maxCount)

executeForObjectList(String sqlID, Object bindParams)
executeForObjectList(String sqlID, Object bindParams, int beginIndex, int
maxCount)

【Util类】
Terasoluna提供以下Util类
ClassUtil:通过指定的Class名和参数生成object。
DateUtil:日期,时间和日历相关的共同方法。 例如:日本的暦元号相关的方法。
PropertyUtil:操作Property文件的类。
StringUtil:操作String的类。
例如:
1)取文件名的扩展名 (为什么这个不是FileUtil的内容。。。)
2)byte数组 转换成16进制的String
3)日文全半角转换
4)html的escape  < & > ¥"  → &lt; &amp; &gt; &quot;
5)指定encode,取得String的byte长度


【Message管理和国际化】


【登录状态检查】
貌似终于来了一个实用点的功能。
web.xml的配置
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <web-app>  
  2. <filter>  
  3. ……   
  4. <filter-name>authenticationControlFilter</filter-name>  
  5. <filter-class>  
  6. jp.terasoluna.fw.web.thin.AuthenticationControlFilter   
  7. </filter-class>  
  8. <init-param>  
  9. <param-name>controller</param-name>  
  10. <param-value>  
  11. sampleAuthenticationController   
  12. </param-value>  
  13. </init-param>  
  14. </filter>  
  15. ……   
  16. <filter-mapping>  
  17. <filter-name>authenticationControlFilter</filter-name>  
  18. <url-pattern>/*</url-pattern>  
  19. </filter-mapping>  
  20. ……   
  21. <error-page>  
  22. <exception-type>  
  23. jp.terasoluna.fw.web.thin.UnauthenticatedException   
  24. </exception-type>  
  25. <location>/authenticatedError.jsp</location>  
  26. </error-page>  
  27. ……  
<web-app>
<filter>
……
<filter-name>authenticationControlFilter</filter-name>
<filter-class>
jp.terasoluna.fw.web.thin.AuthenticationControlFilter
</filter-class>
<init-param>
<param-name>controller</param-name>
<param-value>
sampleAuthenticationController
</param-value>
</init-param>
</filter>
……
<filter-mapping>
<filter-name>authenticationControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
……
<error-page>
<exception-type>
jp.terasoluna.fw.web.thin.UnauthenticatedException
</exception-type>
<location>/authenticatedError.jsp</location>
</error-page>
……


Bean的定义。
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. ……   
  2. <bean id="sampleAuthenticationController"  
  3. class="jp.sample.SampleAuthenticationController"/>  
  4. ……  
……
<bean 
class="jp.sample.SampleAuthenticationController"/>
……


AuthenticationController的例子
Java代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. package jp.terasoluna.sample;   
  2. import javax.servlet.ServletRequest;   
  3. import jp.terasoluna.fw.web.thin.AuthenticationController;   
  4. public class SampleAuthenticationController   
  5. implements AuthenticationController {   
  6. // ログオン済みチェックが必要ないパス   
  7. private String noCheckRequiredPath = “/sample/index.jsp”;   
  8. // アクセス権限がある場合はtrueを返し、ない場合はfalseを返す   
  9. public boolean isAuthenticated(String pathInfo,   
  10. ServletRequest req) {   
  11. // セッションを取得   
  12. HttpSession session = ((HttpServletRequest) req).getSession();   
  13. // セッションからUserValueObjectを取得   
  14. SampleUserValueObject uvo = (SampleUserValueObject)   
  15. session.getAttribute(UserValueObject.USER_VALUE_OBJECT_KEY);   
  16. // 例はログオンした場合のみセッションにUserValueObjectを格納するという前提なので   
  17. // UserValueObjectがセッションにあった場合はログオン済みとする   
  18. if (uvo != null) {   
  19. return true;   
  20. }   
  21. return false;   
  22. }   
  23. // ログオン済みチェックが必要ならtrue、必要ないならfalseを返す   
  24. public boolean isCheckRequired(ServletRequest req) {   
  25. if (noCheckRequiredPath.equals(RequestUtil.getPathInfo(req))) {   
  26. return false;   
  27. }   
  28. return true;   
  29. }   
  30. }  
package jp.terasoluna.sample;
import javax.servlet.ServletRequest;
import jp.terasoluna.fw.web.thin.AuthenticationController;
public class SampleAuthenticationController
implements AuthenticationController {
// ログオン済みチェックが必要ないパス
private String noCheckRequiredPath = “/sample/index.jsp”;
// アクセス権限がある場合はtrueを返し、ない場合はfalseを返す
public boolean isAuthenticated(String pathInfo,
ServletRequest req) {
// セッションを取得
HttpSession session = ((HttpServletRequest) req).getSession();
// セッションからUserValueObjectを取得
SampleUserValueObject uvo = (SampleUserValueObject)
session.getAttribute(UserValueObject.USER_VALUE_OBJECT_KEY);
// 例はログオンした場合のみセッションにUserValueObjectを格納するという前提なので
// UserValueObjectがセッションにあった場合はログオン済みとする
if (uvo != null) {
return true;
}
return false;
}
// ログオン済みチェックが必要ならtrue、必要ないならfalseを返す
public boolean isCheckRequired(ServletRequest req) {
if (noCheckRequiredPath.equals(RequestUtil.getPathInfo(req))) {
return false;
}
return true;
}
}


【禁止某些后缀名文件直接访问】
web.xml
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <filter>  
  2. <filter-name>extensionFilter</filter-name>  
  3. <filter-class>  
  4. jp.terasoluna.fw.web.thin.ExtensionFilter   
  5. </filter-class>  
  6. </filter>  
  7. <filter-mapping>  
  8. <filter-name>extensionFilter</filter-name>  
  9. <url-pattern>/*</url-pattern>  
  10. </filter-mapping>  
<filter>
<filter-name>extensionFilter</filter-name>
<filter-class>
jp.terasoluna.fw.web.thin.ExtensionFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>extensionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


system.properties
Properties代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. #禁止   
  2. access.control.prohibited.extension.1=.jsp   
  3. access.control.prohibited.extension.2=.htm   
  4. access.control.prohibited.extension.3=.html   
  5. access.control.prohibited.extension.4=.css   
  6.   
  7. #例外的(不禁止)   
  8. restrictionEscape.1=/index.jsp   
  9. restrictionEscape.2=/common.css  
#禁止
access.control.prohibited.extension.1=.jsp
access.control.prohibited.extension.2=.htm
access.control.prohibited.extension.3=.html
access.control.prohibited.extension.4=.css

#例外的(不禁止)
restrictionEscape.1=/index.jsp
restrictionEscape.2=/common.css



【Session同步功能】
功能说明,同一个Session只允许同时处理一个request。
防止同时处理产生的业务错误。
缺点是,可能会造成性能下降。

web.xml
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <filter>  
  2. <filter-name>sessionLockControlFilter</filter-name>  
  3. <filter-class>  
  4. jp.terasoluna.fw.web.thin.SessionLockControlFilter   
  5. </filter-class>  
  6. <init-param>  
  7. <param-name>interruptResponseCode</param-name>  
  8. <param-value>503</param-value>  
  9. </init-param>  
  10. <init-param>  
  11. <param-name>threshold</param-name>  
  12. <param-value>2</param-value>  
  13. </init-param>  
  14. </filter>  
  15. <filter-mapping>  
  16. <filter-name>sessionLockControlFilter</filter-name>  
  17. <url-pattern>*.do</url-pattern>  
  18. </filter-mapping>  
  19. ……   
  20. <error-page>  
  21. <error-code>503</error-code>  
  22. <location>/error.jsp</location>  
  23. </error-page>  
<filter>
<filter-name>sessionLockControlFilter</filter-name>
<filter-class>
jp.terasoluna.fw.web.thin.SessionLockControlFilter
</filter-class>
<init-param>
<param-name>interruptResponseCode</param-name>
<param-value>503</param-value>
</init-param>
<init-param>
<param-name>threshold</param-name>
<param-value>2</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>sessionLockControlFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
……
<error-page>
<error-code>503</error-code>
<location>/error.jsp</location>
</error-page>

threshold:同时有几个request由于同步在等待时,中断。 设为-1时,不发生中断。
interruptResponseCode:上面提到的中断时的responsecode。
例如例子里就是同时有2个request在等待时(同时有3个request被提交),向客户端返回503错误。


【增强版Form】
FormEx
DynaValidatorActionFormEx
ValidatorActionFormEx

Java代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. DynaValidatorActionFormEx formEx = (FormEx) form;   
  2. String[] stringArray = new String[] {   
  3. "a""b""c"  
  4. };   
  5. formEx.set("hoge", stringArray);    
  6. formEx.get("hoge"5); //虽然数组越界了,但返回null   
  7. formEx.set("hoge"3"c");  //虽然数组越界了,增加第4个item,设为"c"  
DynaValidatorActionFormEx formEx = (FormEx) form;
String[] stringArray = new String[] {
"a", "b", "c"
};
formEx.set("hoge", stringArray); 
formEx.get("hoge", 5); //虽然数组越界了,但返回null
formEx.set("hoge", 3, "c");  //虽然数组越界了,增加第4个item,设为"c"


带"_"的form名。
如果form前面指定了"_"会有以下特别的效果。
各个业务定义不同的_form后,在从1个业务迁移到另1个业务时,之前业务的_form将被删除。

例:
假设有_sampleForm 和 _helloForm
struts-config.xml
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <action-mappings  
  2. type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”>  
  3. <action  
  4. path=”/hogeSCR”   
  5. type=” jp.terasoluna.fw.web.struts.actions.ForwardAction”   
  6. parameter="/sample/hoge.jsp"  
  7. name=”_sampleForm”   
  8. scope=”session” />  
  9. </action-mappings>  
<action-mappings
type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”>
<action
path=”/hogeSCR”
type=” jp.terasoluna.fw.web.struts.actions.ForwardAction”
parameter="/sample/hoge.jsp"
name=”_sampleForm”
scope=”session” />
</action-mappings>

上面定义时,再迁移到/hogeSCR时, _helloForm将被删除。

指定了clearForm为true时
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <action-mappings  
  2. type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”>  
  3. <action  
  4. path=”/hogeSCR”   
  5. type=” jp.terasoluna.fw.web.struts.actions.ForwardAction”   
  6. parameter="/sample/hoge.jsp"  
  7. name=”_sampleForm”   
  8. scope=”session” />  
  9. <set-property property="clearForm" value="true" />  
  10. </action-mappings>  
<action-mappings
type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”>
<action
path=”/hogeSCR”
type=” jp.terasoluna.fw.web.struts.actions.ForwardAction”
parameter="/sample/hoge.jsp"
name=”_sampleForm”
scope=”session” />
<set-property property="clearForm" value="true" />
</action-mappings>

将会删除所有"_"开头的form。

(不清楚这个功能有什么好处 (@﹏@)~ )

Form的Reset,为了将scope为session的form的值恢复到初始值,
Terasoluna提供了ResetterImpl。
(这里也看得不是很懂。)

【CodeList】
又一个实用的功能。
web.xml
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <listener>  
  2. <listener-class>  
  3. org.springframework.web.context.ContextLoaderListener   
  4. </listener-class>  
  5. </listener>  
  6. <context-param>  
  7. <param-name>contextConfigLocation</param-name>  
  8. <param-value>/WEB-INF/applicationContext.xml</param-value>  
  9. </context-param>  
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>


定义code。
硬code的写法。
bean的定义
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <bean id="sampleCodeList"  
  2. class="jp.terasoluna.fw.web.codelist.MappedCodeListLoader"  
  3. init-method="load">  
  4. <property name="codeListMap">  
  5. <map>  
  6. <entry key="001">  
  7. <value>value001</value>  
  8. </entry>  
  9. <entry key="002">  
  10. <value>value002</value>  
  11. </entry>  
  12. <entry key="003">  
  13. <value>value003</value>  
  14. </entry>  
  15. </map>  
  16. </property>  
  17. </bean>  
<bean 
class="jp.terasoluna.fw.web.codelist.MappedCodeListLoader"
init-method="load">
<property name="codeListMap">
<map>
<entry key="001">
<value>value001</value>
</entry>
<entry key="002">
<value>value002</value>
</entry>
<entry key="003">
<value>value003</value>
</entry>
</map>
</property>
</bean>


从数据库里取出的写法。
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <bean id="sampleDBCodeList"  
  2. class="jp.terasoluna.fw.web.codelist.DBCodeListLoader"  
  3. init-method="load">  
  4. <property name="dataSource"  
  5. ref="TerasolunaDataSource"/>  
  6. <property name="sql">  
  7. <value>SELECT KEY, VALUE FROM CODE_LIST ORDER BY KEY</value>  
  8. </property>  
  9. </bean>  
<bean 
class="jp.terasoluna.fw.web.codelist.DBCodeListLoader"
init-method="load">
<property name="dataSource"
ref="TerasolunaDataSource"/>
<property name="sql">
<value>SELECT KEY, VALUE FROM CODE_LIST ORDER BY KEY</value>
</property>
</bean>


code的使用
jsp时
<%@ taglib prefix="t" uri="/WEB-INF/terasoluna.tld"%>
<html><head><body>
<html:form action="/codeList">
<t:defineCodeList >
Xml代码 Terasoluna(note 1.0) Terasoluna(note 1.0)Terasoluna(note 1.0)
  1. <bean id="sampleCodeList"  
  2. class="jp.terasoluna.fw.web.codelist.MappedCodeListLoader"  
  3. ……   
  4. </bean>  
  5. <bean id="sampleBusinessLogic"  
  6. class="jp.terasoluna.sample.SampleBusinessLogic">  
  7. <property name="codeListLoader" ref="sampleCodeList"/>  
  8. </bean>  

相关文章:

猜你喜欢
  • 2021-04-09
  • 2022-12-23
  • 2021-05-19
  • 2021-07-12
  • 2021-04-12
  • 2021-09-23
相关资源
相似解决方案