去年的這個時候在terasoluna的框架下做過開發,但今年又準備重新弄的時候發現很多東西都忘了,昨天下午整理了一下,並run了一個demo。寫在這裏是爲了分享給其他人,有理解不到位的地方也請指摘。
terasoluna是日本整合的一個java框架,它整合了struts與spring。
terasoluna擴展了struts的控制器部分(後臺)
1.Action (struts框架的)
2.ActionEx extends Action{
public ActionForward execute (ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
ActionForward forward = doExecute(mapping, form, request, response);
}
public abstract ActionForward doExecute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response);
}
3.AbstractBLogicAction<P> extends ActionEx{
public ActionForward doExecute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
preDoExecuteBLogic(request, response, params);
//為空,可以自己添加,也可以不管
BLogicResult result = doExecuteBLogic(params);
postDoExecuteBLogic(request, response, params, result);
//為空,可以自己添加,也可以不管
}
public abstract BLogicResult doExecuteBLogic(P param) throws Exception;
}
4.BLogicAction<P> extends AbstractBLogicAction<P>{
public BLogicResult doExecuteBLogic(P param){
BLogicResult result = businessLogic.execute(param);
}
}
5.interface BLogic<P> {
BLogicResult execute(P params);
}
//自己寫的業務類
6.businessLogic<P> implements BLogic<P> {
BLogicResult execute(P params);
}
注:
1. 注意一下顏色相同的方法,有助於幫助你理解整個流程
第四個類(BLogicAction)和第六個類(businessLogic)會在後面的demo中的配置文件中體現它們之間的關聯
demo的需求是:從一個jsp頁面中提交表單,將提交的內容顯示在另一個jsp中。
1.首先我們需要在WEB-INF中建立一個由自己命名的文件夾,我這裏命名爲“logon”,並在下面添加了3個xml配置文件,分別是blogic-logon-io.xml,logonContext.xml,struts-logon-config.xml。建立這個文件夾是爲了降低主模塊兒和附屬功能模塊兒的耦合性,如果以後需要對登錄部份進行修改,只需要修改logon目錄下著3個文件,不用修改根目錄下的配置文件WEB-INF路徑下與之相對的這3個文件如下。
在blogic-logon-io.xml中配置了相應和請求時的數據信息,需要設置如下:
- <!-- ビジネスロジック入出力定義 -->
- <blogic-io>
- <action path="/userBL/userBL">
- <blogic-params bean-name="com.dto.UserMessageInput">
- <set-property property="userName" blogic-property="userName" source="form" />
- </blogic-params>
- <blogic-result>
- <set-property property="userName" blogic-property="userName" dest="form" />
- </blogic-result>
- </action>
- </blogic-io>
其中,<action path>是從頁面jsp中發出的請求,<blogic-params>中的bean-name指定了存放請求數據的JavaBean,<set-property>中的property屬性是form裏聲明的屬性,blogic-property屬性是JavaBean裏聲明的屬性,source是說數據是從form裏得到,因爲數據和之前的struts一樣,是先存放到form裏的。<blogic-result>是所要相應的數據,在這裏可以是屬性,集合,對象。
在logonContext.xml中,配置了所要讓spring託管的信息,與spring.xml有些類似。
- !-- ログオン業務のBean定義 -->
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:util="http://www.springframework.org/schema/util"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
- <!-- ログオン処理用アクション定義 -->
- <bean name="/userBL/userBL" scope="singleton"
- class="jp.terasoluna.fw.web.struts.actions.BLogicAction" >
- <property name="businessLogic" ref="UserMessageBLogic" />
- </bean>
- <!-- ログオン処理ビジネスロジック定義 -->
- <bean id="UserMessageBLogic" scope="singleton"
- class="com.blogic.UserMessageBLogic" />
- </beans>
我們需要配置第二個bean和第三個bean。第二個bean配置了我們所寫的邏輯處理類注入到BlogicAction類的信息,<property>中的ref屬性與第三個bean裏的id相一致。在第三個bean中我們配置了具體的業務邏輯類地址。
在struts-logon-struts.xml中,配置了form-bean的具體位置,action的請求映射路徑,以及成功跳轉的頁面。
- <struts-config>
- <!-- ======================================== フォームビーン定義 -->
- <form-beans>
- <!-- ログオン用アクションフォーム -->
- <form-bean name="_logonForm"
- type="com.form.logonForm" />
- </form-beans>
- <!-- ======================================== アクションマッピング定義 -->
- <action-mappings type="jp.terasoluna.fw.web.struts.action.ActionMappingEx">
- <action path="/userBL/userBL"
- name="_logonForm" scope="request"
- validate="false">
- <forward name="success" path="/success.jsp" />
- </action>
- </action-mappings>
- </struts-config>
而這三個xml文件都需要在主模塊的web.xml和struts-xml文件中聲明加載。如下所示:
web.xml:
- <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,/WEB-INF/logon/struts-logon-config.xml</param-value>
- </init-param>
- <init-param>
struts-config.xml
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation" value="/WEB-INF/moduleContext.xml,/WEB-INF/logon/logonContext.xml"/>
- </plug-in>
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator-rules-ex.xml,/WEB-INF/validation.xml"/>
- <set-property property="stopOnFirstError" value="false"/>
- </plug-in>
- <plug-in className="jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn">
- <set-property property="digesterRules" value="/WEB-INF/blogic-io-rules.xml"/>
- <set-property property="mapperClass" value="jp.terasoluna.fw.service.thin.BLogicMapper"/>
- <set-property property="resources" value="/WEB-INF/blogic-io.xml,/WEB-INF/logon/blogic-logon-io.xml"/>
- </plug-in>
配置的東西就完了。
下面是包com.blogic下的業務處理類UserMessageBLogic:
- package com.blogic;
- import jp.terasoluna.fw.service.thin.BLogic;
- import jp.terasoluna.fw.service.thin.BLogicResult;
- import com.dto.UserMessageInput;
- import com.dto.UserMessageOutput;
- public class UserMessageBLogic implements BLogic<UserMessageInput>{
- public BLogicResult execute(UserMessageInput input){
- String method = input.getUserName();
- BLogicResult result = new BLogicResult();
- UserMessageOutput output = new UserMessageOutput();
- output.setUserName(method);
- result.setResultObject(output);
- result.setResultString("success");
- return result;
- }
- }
包com.dto下的JavaBean:
- package com.dto;
- public class UserMessageInput {
- private String userName;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
- package com.dto;
- public class UserMessageOutput {
- private String userName = null;
- public String getUserName(){
- return this.userName;
- }
- public void setUserName(String userName){
- this.userName = userName;
- }
- }
包com.form裏的formbean:
- package com.form;
- import org.apache.struts.action.ActionForm;
- public class logonForm extends ActionForm{
- private static final long serialVersionUID = 1L;
- private String userName = null;
- public String getUserName(){
- return (this.userName);
- }
- public void setUserName(String userName){
- this.userName = userName;
- }
- }
啓動工程的初始畫面welcome.jsp:
- <%@ page contentType="text/html; charset=Windows-31J"%>
- <%@ taglib uri="/struts-html" prefix="html" %>
- <%@ taglib uri="/struts-bean" prefix="bean" %>
- <%@ taglib uri="/struts-logic" prefix="logic" %>
- <%@ taglib uri="/terasoluna-struts" prefix="ts" %>
- <%@ taglib uri="/terasoluna" prefix="t" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html:html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
- <title>-</title>
- </head>
- <body>
- <div style="text-align: center" mce_style="text-align: center">
- -- ようこそTERASOLUNAへ --
- <br>
- <html:form action="/userBL/userBL.do" focus="useName">
- <html:text property="userName" size="16" maxlength="16"/><br>
- <html:submit property = "submit" value="Submit"/>
- <html:reset/>
- </html:form>
- </div>
- </body>
- </html:html>
跳轉畫面success.jsp:
- <%@ page contentType="text/html; charset=Windows-31J"%>
- <%@ taglib uri="/struts-html" prefix="html" %>
- <%@ taglib uri="/struts-bean" prefix="bean" %>
- <%@ taglib uri="/struts-logic" prefix="logic" %>
- <%@ taglib uri="/terasoluna-struts" prefix="ts" %>
- <%@ taglib uri="/terasoluna" prefix="t" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html:html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
- <title>-</title>
- </head>
- <body bgcolor="pink">
- <bean:write name="_logonForm" property="userName"/>
- </body>
- </html:html>
以上就是所有所需要的文件。
關於JavaBean和FomBean呢,是這樣,多個請求可能用到1個FormBean,但是可以用多個JavaBean,所以在FormBean中必須聲明所有的JavaBean中所需要的屬性,因爲在blogic-logon-io.xml中配置的請求和響應的數據都是從FormBean中得到的。
然後說說業務處理類,該類實現了BLogic<P>接口,P是請求的JavaBean對象,重寫execute方法,在該方法體內寫我們的業務處理,通過input請求數據的JavaBean得到數據,實例1個result對象,output是響應數據的JavaBean,把要響應的數據存放到該JavaBean裏,把output對象用result.setResultObject存放在result對象裏,這一步就是在blogic-logon-io.xml文件<blogic-result>標籤體裏配置的信息相關聯,最後通過result對象的setResultString(“success”); 方法請求跳轉到呈現頁面,”success”是指struts-logon-config.xml文件裏該action請求信息裏配置的forword的name屬性值,根據該信息跳轉到了success.jsp頁面。