一、Hibernate
1、 主键生成策略
1.1<!-- 数值类型 -->
<!-- assigned手工生成 -->
<!--
<id name="tid" column="tid">
<generator class="assigned"></generator>
</id>
-->
<!-- native通用(如果是mysql或sqlserver自动查找自增长列,如果是oralce或则db2会找hibernate_sequence的序列,hibernate_sequence需要在数据库里创建) -->
<!--
<id name="tid" column="tid">
<generator class="native"></generator>
</id>
-->
<!-- identity 只针对sqlserver使用,oralce不能用 -->
<!--
<id name="tid" column="tid">
<generator class="identity"></generator>
</id>
-->
<!-- increment 查询数据字段中最大致加1方式生成主键(并发操作有问题) -->
<!--
<id name="tid" column="tid">
<generator class="increment"></generator>
</id>
-->
<!-- sequence 使用序列,只有Oracle可以用 -->
<!--
<id name="tid" column="tid">
<generator class="sequence">
<param name="sequence">seq_temp_tid</param>
</generator>
</id>
-->
1.2<!-- 字符类型 -->
<!-- assigned手工生成 -->
<!--
<id name="tid" column="tid">
<generator class="assigned"></generator>
</id>
-->
<!-- uuid 主键为随机生成的32位伪列-->
<id name="tid" column="tid">
<generator class="uuid"></generator>
</id>
二、DWR使用(在dwrpro项目中)
2.1什么是DWR
DWR – Direct Web Remoting
开源,免费的Ajax框架
将Java类发布为JavaScript可调用的脚本对象
提供JavaScript工具类,简化页面编码
2.2为什么要使用DWR
DWR其功能的强大在于它可以用一种前所未有的便利方式将前端页面中的js与后端服务器中的java程序进行直接的转换。比如,它可以将java程序中的某个类在js中生成一个相应的对象,并可以调用发布的方法
2.3实现的3个步骤:
1、安装DWRJAR文件
把dwr.jar放置在应用程序的WEB-INF/lib 下;
从DWR2.0开始需要commons-logging.jar类库。
2、编辑DWR配置文件
修改WEB-INF/web.xml 加入DWR servlet
在WEB-INF 下创建dwr.xml 文件
<!-- dwr配置根标签 -->
<dwr>
<!--
allow标签 java类和js脚本关系
-->
<allow>
<!-- 下面为测试环境使用(正式开发时不需要写) -->
<!--
create标签 创建DWR对象
creator属性 默认为new
javascript属性 前台js调用对象的名称
-->
<create creator="new" javascript="JDate">
<!--
param标签 参数设置
name属性 默认为class
value属性 后台java类的名称
-->
<param name="class" value="java.util.Date" />
</create>
<create javascript="Test" creator="new">
<param name="class" value="com.web.dwr.TestDwr"></param>
</create>
<!-- 如果参数或者返回值中包含对象 -->
<convert converter="bean" match="com.web.vo.User" />
</allow>
</dwr>
3、测试DWR是否配置成功
在浏览器地址栏中输入:
http://localhost:8080/dwrme/dwr/index.html
其中:dwrme表示项目工程名
/dwr/index.html是固定的路径
4、运用在相应的Jsp页面
<!-- DWR中在Jsp页面必须添加此三行代码,/dwr/interface/Test.js中Test.js表示在dwr.xml中定义的js对象(javascript属性内容) -->
<script type="text/javascript" src="<%=path %>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/util.js"></script>
<script type="text/javascript" src="<%=path %>/dwr/interface/Test.js"></script>
<script type="text/javascript">
function fun1(){
//getString是在TestDwr类中定义的方法,Test.getString表示对象名.属性名
//Test为javascript对象
Test.getString(function(data){//此处的function是回调函数
alert(data);
});
}
</script>
<input type="button" value="返回值是字符串" οnclick="fun1()"/>
Map集合参数赋值:(键值对)
var map = {"110":"lifan","111":"zhangsan","112":"lisi"};
对象参数赋值:(键值对)
var user = {"usercode":"lifan","password":"123456"};
List集合参数:
var list = ["呵呵","哈哈","哦哦"];
function fun9(){
var list = ["呵呵","哈哈","哦哦"];
Test.paramList(list,function(data){
alert(data);
});
}
function fun10(){
var map = {"110":"lifan","111":"zhangsan","112":"lisi"};
Test.paramMap(map,function(data){
alert(data);
});
}
function fun11(){
var user = {"usercode":"lifan","password":"123456"};
Test.paramUser(user,function(data){
alert(data);
});
}
<input type="button" value="Map集合参数" οnclick="fun10()"/>
<input type="button" value="对象参数" οnclick="fun11()"/>
<input type="button" value="List集合参数" οnclick="fun9()"/>
三、Struts2
3.1在Struts2中配置控制类
<!-- struts根标签 -->
<struts>
<!--
package标签 配置包(可以有多个)
name属性 随便写(不能重名)
extends属性 继承struts框架核心功能 固定:struts-default
namespace属性 命名空间(url访问的前缀)
-->
<package name="hellopack" extends="struts-default" namespace="/">
<!--
action标签 配置具体action实现 (action可以有多个)
name属性 请求地址字符串;必须与前台的表单或者链接请求到struts后台输入的地址一样(URL)
class属性 接受前台请求,并处理要前台数据的相应的完整类名
-->
<action name="hello" class="com.web.action.HelloAction">
<!--
result标签 配置请求处理后页面跳转(result可以有多个)
name属性 Action返回字符串(默认:success)
标签主体部分 配置资源文件(jsp);根据不同的name属性值返回到对应的jsp页面
-->
<result name="success">/index.jsp</result>
</action>
</package>
<package name="userpack" extends="struts-default" namespace="/">
<!--
method属性 配置处理请求方法名称 (默认:execute)
其值要与对应的类名中的方法名一样
-->
<action name="login" class="com.web.action.UserAction" method="login">
<result>/success.jsp</result>
<result name="login">/login.jsp</result>
</action>
<action name="reg" class="com.web.action.UserAction" method="reg">
<result>/login.jsp</result>
</action>
</package>
<package name="mypack" extends="struts-default" namespace="/">
<action name="hello" class="com.web.action.HelloAction">
<!--
type属性 设置控制跳转模式
dispatcher转发到其他资源文件(jsp)
chain转发到其他Action
redirect重定向到其他资源文件(jsp)
redirectAction重定向到其他Action
-->
<result type="redirectAction">list</result>
</action>
<action name="list" class="com.web.action.HelloAction" method="list">
<result >/index.jsp</result>
</action>
<!-- 如果在地址栏中输入http://localhost:8080/struts03/hello,最后地址栏会跳转到http://localhost:8080/struts03/list.action-->
</package>
</struts>
四、OGNL标签
字符串解析标签:
<s:generator separator="," val="'11111,22222,333333'">
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:generator>
<c:forTokens items="aaaa,bbbb,cccc" delims="," var="s">
${s }<br/>
</c:forTokens>
动作标签:
<s:action name="list" namespace="/" executeResult="true"></s:action>
executeResult="true"必须为true
五、配置拦截器
<struts>
<!-- 使用国际化配置此内容 -->
<constant name="struts.custom.i18n.resources" value="res"></constant>
<package name="testpack" extends="struts-default" namespace="/">
<!-- 定义一组拦截器 -->
<interceptors>
<!--
interceptor标签 配置拦截器(可以有多个)
name属性 拦截器的名称(随便写)
class属性 拦截器的类名称
-->
<interceptor name=”iner1” class="com.web.interceptor.MyInterceptor1"></interceptor>
<interceptor name=”iner2” class="com.web.interceptor.MyInterceptor2"></interceptor>
<!--
interceptor-stack标签 定义拦截器栈
name属性 随便写
-->
<interceptor-stack name="mystack">
<!-- 指定拦截器栈中的拦截器 -->
<interceptor-ref name="inter1"></interceptor-ref>
<interceptor-ref name="inter2"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="test" class="com.web.action.TestAction">
<result>/index.jsp</result>
<!-- 如果一旦编写自定义拦截器,默认的拦截器需要显示的编写 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 为action添加指定拦截器 -->
<!--
<interceptor-ref name="inter1"></interceptor-ref>
<interceptor-ref name="inter2"></interceptor-ref>
-->
<!-- 为action添加执行拦截器栈 -->
<interceptor-ref name="mystack"></interceptor-ref>
</action>
<action name="add" class="com.web.action.AddAction">
<result>/index.jsp</result>
<!-- 配置如果拦截到重复提交的错误时跳转页面 -->
<result name="invalid.token">/add.jsp</result>
<!-- 配置防止重复提交的拦截器 -->
<interceptor-ref name="token"></interceptor-ref>
<!-- 自带默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 显示action执行时间,用于性能瓶颈测试 -->
<interceptor-ref name="timer"></interceptor-ref>
</action>
</package>
</struts>
改善输出界面:
配置资源文件
六、Spring
6.1spring模块
1)Spring核心模块(Spring Core)
Spring的核心容器模块,它提供IOC的支持。该模块中包含BeanFactory,它采用工厂模式来实现IOC,负责对bean的生命周期的管理。
2)Application Context(上下文模块)
该模块扩展了BeanFactory的功能,例如提供了i18n,系统生命周期以及验证的支持Spring的AOP模块
该模块为应用系统的AOP开发提供了支持。
3)JDBC和DAO模块
提供了JDBC封装的模板代码,使得使用JDBC开发更加简洁。
4)ORM映射模块
该模块提供了对许多流行的ORM框架的支持,其中包括Hibernate,JDO和iBATIS SQL的支持Spring Web模块
该模块中Spring提供了对其它的WEB框架的支持,包知Struts,JSF,WEBWORK等
5)Spring MVC框架
Spring提供的用于开发WEB应用的MVC框架
6.2spring核心应用
IOC(控制反转)
程序中各个组件之间的关系,不由程序代码直接操控,而由容器控制。控制权由应用代码中转到了外部容器,即所谓的反转。 (把自己new的东西改为由容器提供)
更通俗的名称:DI(依赖注入)
各个组件之间的依赖关系不是在程序中写死,而是写在外部的配置文件中,然后运行时通过容器动态注入。
Spring核心容器提供了IOC的具体实现,所有的其它模块都是建立在它的基础之上。
6.3自己总结
每次新增一个功能需要在com.web.dao.impl下新增一个类去实现接口(UserDAO.java),在配置文件中添加<bean name="userDAOImpl4"class="com.web.dao.impl.UserDAOImpl4"></bean>
并更改<property name="userDAO" ref="userDAOImpl4"></property>中ref的属性值
----------
后续将不断更新