最近接了个项目,是java web项目,结构上不算复杂值得学习,不能透露,梳理一下原理。
1.spring主要用于aop用法,配置applicationContext里面的bean
2.struts2是项目请求的主要方式
3.ibatis用于sql请求
4.shiro用于用户验证
1.基本结构(已改,更好理解)
a.action 进行请求
b.util 公共类,公共变量等配置
c.xml 数据库和action等xml层配置
d.dao 数据库操作层,直接对xml的xxmap进行控制
e.service 业务层,从dao层取出数据,进行一定的验证
f.shiro 进行用户数据验证,过滤,缓存,包括XXRealm,XXCache等
e.other token过滤,xss过滤等
g.api 微信端前端app端的请求接口
请求流程:
jsp页面进行请求->XXFilter(fe)->进入xml的相应action(c)->找到相应的XXAction.java(a)->进入service业务层取数据(e)->从dao层取原始数据(d)->进入数据库层直接取数据(c)->返回一直到XXAction.java(a)->进入xml的相应action(c)找到跳转或ajax请求直接返回map
b的部分可能出现在任何位置,f的部分用于登录时(包括权限角色获取),过滤时,缓存时(用于jsp的shiro相关缓存)
这种方式是非maven的,如果是用maven,就把所有xml文件都放在resources目录下。
名词解释:
xss过滤:防止网站被钓鱼网站利用数据,挂马等
ibatis的xml结构:
<sqlMap namespace="命名空间,通常此处使用表名">
<typeAlias alias="AAA" type="全名包括包名"/>
<!--此处class填入上方起的相应别名-->
<resultMap id="abc" class="AAA">
<!--所有表列名到字段名映射-->
<result property="bean属性名" column="数据表列名" />
</resultMap>
<!--公共 select部分-->
<sql id="selectColumn">
<![CDATA[
select a,b,c from xx
]]>
</sql>
<!--公共where-->
<sql id="whereCondition">
<dynamic prepend=" where 1=1 and">
<!--kkk对应bean的属性名-->
<isNotNull prepend="and" property="kkk"><![CDATA[ id=#kkk# ]]></isNotNull>
</dynamic>
</sql>
<!--公共排序-->
<sql id="orderByPart">
<isNotEmpty property="orderByName"><![CDATA[ order by $orderByName$ ]]><isNotEmpty property="descAsc"><![CDATA[ $descAsc$ ]]></isNotEmpty></isNotEmpty>
<isEmpty property="orderBy">
<![CDATA[ order by
ID
asc ]]>
</isEmpty>
</sql>
<!--此处resultMap对应上方resultMap的id-->
<select id="select2Map" resultMap="abc" parameterClass="java.util.Map">
<include refid="selectColumn" />
<include refid="whereCondition" />
<include refid="orderByPart" />
</select>
</sqlMap>
使用include分割部分sql能够有效减少代码量