去年的这个时候在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
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
extends AbstractBLogicAction
{
public BLogicResult doExecuteBLogic(P param){
BLogicResult result = businessLogic.execute(param);
}
}
5.interface BLogic
{
BLogicResult execute(P params);
}
//自己寫的業務類
6.businessLogic
implements BLogic
{
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中配置了相应和请求时的数据信息,需要设置如下:
-
-
- "/userBL/userBL">
- "com.dto.UserMessageInput">
- "userName" blogic-property="userName" source="form" />
-
-
- "userName" blogic-property="userName" dest="form" />
-
-
-
其中,是从页面jsp中发出的请求,中的bean-name指定了存放请求数据的JavaBean,中的property属性是form里声明的属性,blogic-property属性是JavaBean里声明的属性,source是说数据是从form里得到,因为数据和之前的struts一样,是先存放到form里的。是所要相应的数据,在这里可以是属性,集合,对象。
在logonContext.xml中,配置了所要让spring托管的信息,与spring.xml有些类似。
- !-- ログオン業務のBean定義 -->
- "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">
-
-
-
- "/userBL/userBL" scope="singleton"
- class="jp.terasoluna.fw.web.struts.actions.BLogicAction" >
- "businessLogic" ref="UserMessageBLogic" />
-
-
-
-
- "UserMessageBLogic" scope="singleton"
- class="com.blogic.UserMessageBLogic" />
-
我们需要配置第二个bean和第三个bean。第二个bean配置了我们所写的逻辑处理类注入到BlogicAction类的信息,中的ref属性与第三个bean里的id相一致。在第三个bean中我们配置了具体的业务逻辑类地址。
在struts-logon-struts.xml中,配置了form-bean的具体位置,action的请求映射路径,以及成功跳转的页面。
-
-
-
-
-
-
- "_logonForm"
- type="com.form.logonForm" />
-
-
-
-
- "jp.terasoluna.fw.web.struts.action.ActionMappingEx">
- "/userBL/userBL"
- name="_logonForm" scope="request"
- validate="false">
- "success" path="/success.jsp" />
-
-
-
而这三个xml文件都需要在主模块的web.xml和struts-xml文件中声明加载。如下所示:
web.xml:
-
- action
- class>org.apache.struts.action.ActionServletclass>
-
- config
- /WEB-INF/struts-config.xml,/WEB-INF/logon/struts-logon-config.xml
-
-
struts-config.xml
- "org.springframework.web.struts.ContextLoaderPlugIn">
- "contextConfigLocation" value="/WEB-INF/moduleContext.xml,/WEB-INF/logon/logonContext.xml"/>
-
- "org.apache.struts.validator.ValidatorPlugIn">
- "pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator-rules-ex.xml,/WEB-INF/validation.xml"/>
- "stopOnFirstError" value="false"/>
-
- "jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn">
- "digesterRules" value="/WEB-INF/blogic-io-rules.xml"/>
- "mapperClass" value="jp.terasoluna.fw.service.thin.BLogicMapper"/>
- "resources" value="/WEB-INF/blogic-io.xml,/WEB-INF/logon/blogic-logon-io.xml"/>
-
配置的东西就完了。
下面是包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{
-
- 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" %>
-
- >
-
- <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" %>
-
- >
-
- <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是请求的JavaBean对象,重写execute方法,在该方法体内写我们的业务处理,通过input请求数据的JavaBean得到数据,实例1个result对象,output是响应数据的JavaBean,把要响应的数据存放到该JavaBean里,把output对象用result.setResultObject存放在result对象里,这一步就是在blogic-logon-io.xml文件标签体里配置的信息相关联,最后通过result对象的setResultString(“success”); 方法请求跳转到呈现页面,”success”是指struts-logon-config.xml文件里该action请求信息里配置的forword的name属性值,根据该信息跳转到了success.jsp页面。