BONC实习

我所理解的框架:为了让编码结构更加清晰,牛人总结出了MVC架构(可以理解为一种思想),又有一批牛人写了一些java代码,封装成jar包,可以理解为对MVC架构的具体实现,我们在编程时,通过引入这些jar包,再添加一些配置文件,就搭建起我们自己工程的框架,然后按照每一层的任务,编写相应层的代码即可。

1、框架介绍
公司所用框架为ssi框架,即:struts2,spring,ibatis。他们负责各层之间的交互与协作,从而实现整个web端的功能实现与整合。
struts:主要负责数据传递与控制,最形象的页面跳转就是由struts控制的。例如Action中return “success”跳转到哪个页面,return “list”跳转到哪个页面。这些是在struts中配置。
spring:主要负责依赖注入。初步理解:把特定的类根据条件注入到相应类中。公司主要把DaoHelper注入到Action类中。
ibitas:主要对工程要连接的数据库进行了一些参数配置,sql语句编写等。

2、5层类
公司写页面,主要用5层,action,busi,bo,po,dao。
bo:页面里的参数全部存储在bo类里,传到后台进行计算。
po:查询结果存储类,例如:从数据库里查询一条记录,则记录的相应字段存储在po类的成员变量里。
Action:action 里的每个方法,针对页面的一个功能,可以理解为action主要是与页面进行数据交互和spring的依赖注入也是注入到action。
busi:都说busi叫业务逻辑层,我理解主要是对action和dao传过来的数据进行加工和处理。
dao:与数据库进行交互,对数据库实现增删改查等操作。

3、具体框架配置
struts 配置:

<struts>  
    <!--每个package代表一个独立的模块,后面的namespace代表这个package模块,应用于工程中的什么位置,或者哪个文件夹下面,可以根据需要进行配置,name也可以根据需要填写,extends是继承的意思,extends=“default”表示继承了一批默认的拦截器,是struts预先封装好的-->

    <package name="beaf-secdev_datamonitor" extends="default" namespace="/secdev/datamonitor">

    <!--action就是针对package里namespace下面的某个Action类进行配置,class是制定针对哪个Action进行配置(根据具体路径进行填写),name是对这个class进行重命名-->

     <action name="downDetail" class="DownDetailAction">

     <!--下面两个interceptor-ref是配置了两个拦截器-->
            <interceptor-ref name="fileUploadStack"/>                               
            <interceptor-ref name="crudStack"/>

<!--result中的name表示针对上面的Action中的某个方法return的结果,如果和某个方法 return “success”,则跳转到DownDetail.jsp页面和数据传递(jsp的路径根据具体情况填写)。dispatcher 是一种默认的结果类型,也是最常用的结果类型-->
             <result name="success" type="dispatcher">
                     <param name="location">DownDetail.jsp</param>
             </result>
             <result name="list" type="dispatcher">
                     <param name="location">DownDetail-list.jsp</param>
             </result>             
        </action>

    </package>
</struts>

ibitas配置:
ibitas配置包括数据库的参数信息(应该是一个XXX.properties文件),sqlmap-config.xml,sqlmap-XXXX.xml。
数据库参数信息(XXX.properties),在工程新建时就被配置,而且只需配置一次,所以初期工作可以直接忽略。

sqlmap-config.xml文件主要配置了我们所写的sql语句的位置。
示例:

<!--  下发明细页面,resource为相应sql语句的位置(根据需求修改) -->
    <sqlMap resource="sqlmap-DownDetail.xml"/>

sqlmap-XXX.xml中为我们所写的sql语句。
示例:

<!--namespace为改sqlmap的名字空间,编程时会用到namespace来查找具体sql-->
<sqlMap namespace="downDetail">

<!--id会在编程时和namespace结合使用,来确定所执行的sql,parameterClass为往sql语句中传的参数的类型, resultClass为sql执行后结果类型-->
   <select id="downDetail" parameterClass="DownDetailBo" resultClass="DownDetailPo" >

     <!--此处填写具体的select语句,如果sql需要根据参数进行判断,则会用到一些ibitas动态标签-->

   </select>
 </sqlMap>

spring配置:
把daoHelper类注入到Action中。

<bean id="downDetail" class="DownDetailAction">
        <!--daoHelper是公司自己封装的一个类,我理解类似于SqlMapClient类,主要是用来对数据库进行操作的类。-->
        <property name="daoHelper" ref="daoHelper" />
    </bean>

在公司的工程中,web.xml文件中,配置了一些过滤器和监听器,也属于ssi框架的配置,如果只为工作,这里不多做讨论,以后可以细细学习。

4、页面加载流程
某个页面的链接应该为XXXX.action,点开这个链接后,程序会根据链接找到相应的action(程序首先进入的是action,而不是jsp),进入action后,程序会自动找到execute( )函数并开始执行,执行完后,根据最后的return跳转到相应页面,这里跳转是struts中配置的,例如,如果return “success”,根据上面的struts配置,会跳转到DownDetai.jsp页面,页面被加载出来后,再根据jsp中的js代码,执行jQuery()里面包含的函数。
所以,如果要想在页面被加载后默认执行某些方法,可以再Action函数中的execute( )方法中编写,或者在js的jQuery()中编写。

5、代码流程

这里写图片描述

上图描述了Action,busi,dao三个类中的成员变量关系,我们会在action类中实例化bo,dao,busi三个类,而busi中就不用实例化bo和dao,只需要声明即可,然后使用busi.setBo(bo),busi.setDao(dao) 使busi中声明的bo,dao分别指向action中的bo,dao对象,这样,在后续的busi中对bo的操作,在action中也会有变化,因为他们两个指向的是同一个对象实体。

dao中没有数据,也要进行传递,是因为daoHelper在spring的配置里是注入到action中的,所以要通过action将dao传递过去。(是不是可以在bean的配置中,直接将daoHelper配置在Dao类中,有待验证。)

6、部分代码

action:

public void init(){
if(bo==null){
    bo=new DownDetailBo();
}
if(dao==null){
    dao=new DownDetailDao();
}
if(busi==null){
    busi = new DownDetailBusi();
}
  dao.setDaoHelper(getDaoHelper()); 
        busi.setBo(bo);
        busi.setDao(dao);
}

public String execute() {
        init();  //init()方法单独写出来,是因为在每个action的方法中,都要执行初始化操作。所以单独写出来。
        return "success";  //根据struts配置,跳转到相应页面
}

busi:

public void getDownDetail(){
//在bo中设置了List<Po> result用来存储查询结果
        bo.setResult(dao.getList(bo));
    }

dao:

public List<Po> getList(bo){
//"downDetail.downDetail"找到制定的sql,bo为参数
//daoHelper为公司封装,但应该是继承了一些别的类,queryForList是可以再网上查到的,还有很多类似的方法如queryForMap,可以根据需要学习调用。
    Lsit<Po> list=daoHelper.queryForList("downDetail.downDetail",bo);
    return list;
}

bo的result中已经存储了操作结果,在函数return“list“后,我们在downDetail-list.jsp页面中可以直接使用。

声明:以上所有言论,皆为本人自己的认知理解,很多东西理解的不是很深刻,如果错误之处,希望批评指正,交流学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值