Struts1.2/2.1、spring、hibernate整合笔记
来源:互联网 发布:淘宝客服消息发不出去 编辑:程序博客网 时间:2024/05/21 09:21
struts 1.x + hibernate +spring
1.jar包
2.1 struts MVC中央控制器,所有请求都交给前端控制器(ActionServlet)
2.2 hibernate
2.3 spring---对象的装配(IOC),AOP:把B的代码动态的加入A的代码中,B是一段公共的代码,有通用功能,可以加入A,也可以加入A1,A2,A3…………(!通用) ---AOP:通过动态代理把一段
主要只用spring的事务功能
spring的事务:
action
service
validateUser
validateUserName 这些方法是根据业务来定的(业务方法)
在业务方法中加入事务(事物管理的advice加入service中,只需写pointcut)
dao----->增删改查
applicationContext.xml
dao_hibernate.xml
dataSource
SessionFactory
dao
service.xml
service
transactionManager
tx:advice
<tx:advice id="txAdivce" transacton-manager="tx"(注入事物管理器)>
<tx:attributes>
<tx:method name="get*" read-only="true"/>
注:read-only="true"如果insert-->如果实现是hibernate,则抛异常;实现如果是JDBC,则能insert
<tx:method name="add*" parpaon="required">
required:一个方法开启一个事物,方法完后关闭事物,如果抛出RuntimeException就回滚,可自定义异常回滚
f1(){}
f2(){}
f3(f1,f2){}
</tx:attributes>
</tx:advice>
aop:config
action.xml
action
______________________________________________
web.xml
<listener>
<listener-class>org.springframework.web.struts.ContextLoaderListener</listener-class>-->通用性强(spring为web应用而写的)
</listener>//new applicationContext()
struts-config.xml
<action path="/"
type="DelegationActionProxy">
</action>
<plug-in name="ContextLoaderPlugIn">---->只为struts1.X而写
<set-property property="" value="/WEB-INF/action.xml">
</plug-in>
*************************************************************
struts2.x+hibernate+spring
applicateionContext.xml
标注:
action里只需定义就可以
struts2.x核心
Struts 1.x
WebWork--->IOC/拦截器 XWork jar包
Struts 2 XWork jar包
1.jar包:核心包没有几个
struts2-core-2.1.6.jar
xwork-2.1.2.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar写页面模板(像JSP)
commons包
jsonplugin-0.33.jar
一共有三个过滤器
不加自己的过滤器
StrutsPrepareAndExecuteFilter
要加自己的过滤器
PrepareFilter struts2初始化工作
MyFilter 我的过滤器
ExecuteFilter struts2的请求控制器
src/struts.xml 实际上是在classes/struts.xml
<struts>
<package name="hello" extends="struts-default" namespace="/one"> ---一个模块
注:name:唯一模块名
extends:继承(另一个模块)
namespace:地址栏上的地址,模块的命名空间
<action name="test" class="action.TestAction" method="go">
<reslut name="success" type="dispatcher">/jsp/test_view.jsp</result>
</action>
</package>
</struts>
struts-default.xml
1.默认加载
2.<result-type> 返回类型(默认有十种chain/dispatcher/freemarker/httpheader/redirect/rediectAction/stream/velocity/xslt/plainText)
<interceptor> 可民扩展功能
3.action extends ActionSupport 也可以不继承
如:
public class TestAction extends ActionSupport{
public String go(){
}
}
或:
public class TestAciton{
public String go(){//名字可以任意取,默认为execute()
System.out.println(this+".go()");
return "success";
}
}
4.访问:http://localhost:8080/netstone/one/test.action
----->访问一次,创建一个action对象,
而struts1.x的Servlet只创建一次,有多线程并发的访问题
重点:ValueStack ----存放数据(一个请求一个ValueStack)
先了解Ognl:ognl-2.6.11.jar
EL表达式 :通过一段字符串的方式来表示对 对象属性的访问:如${emp.name}
Ognl和EL做的事情是一样的
什么叫Ognl?
Object value = Ognl.getValue("name",emp);//获取emp对象的name属性的值
Object value = Ognl.getValue("dept.description + '_' + name",emp);
Object value = Ognl.getValue("dept.props[1]",emp);//数组或集合
ValueStack是一个对象,内部是用Ognl来实现。
ValueStack是对Ognl的再次封装
Root根:表达式是相对谁来做计算的
对于ValueStack来说:
class ValueStack{
private CompondRoot root;//是一个栈
public Object findValue(String str){
。。。//在root栈顶开始从上往下找,看哪一个对象能匹配上这个Ognl表达式---str
!!!!!!!!action里root栈的栈顶就是action自己
}
}
ActionContext ctx = ActionContext.getContext();
ValueStack vs = ctx.getValueStack();
vs.findValue("Ognl的表达式");
org.apache.struts2.dispatcher.StrutsRequestWrapper--->包装Request
Servlet中的HttpServletRequestWrapper:
HttpServletRequestWrapper implements HttpServletRequest{
private HttpServletRequest request;
public HttpServletRequestWrapper(HttpServletRequest request){
this.request = request;
}
public String getParameter(String param){
return request.getParameter();
}
}
自己写的RequestWrapper:
public class MyRequestWrapper extends HttpServletRequestWrapper{
public MyRequestWrapper(HttpServletRequest request){
supper(request);
}
public Object getAttribute(){
return "hahah";
}
}
过滤器:
………………
doFile(request,response,chain){
return chain(new MyRequest(request),response);
}
………………
//一种设计模式:这样改变了Request的部分功能,其它功能不变
*
${emp.name} //先到request里面去找,如果为NULL,则到ValueStack里去取
也可以用标记:
<s:property value="emp.name"/> 直接从ValueStack里面去取
*
action里的数据,一半是表单数据,一半是把结果返回页面的数据
在struts2里,action和form是合在一起的,是Action的属性
- Struts1.2/2.1、spring、hibernate整合笔记
- struts1+spring+hibernate整合
- Struts1+Spring+Hibernate整合
- spring+hibernate+struts1整合常见问题
- Hibernate+spring+struts1的整合
- 【原创】Spring、Hibernate、Struts1整合的方式
- struts1+hibernate+spring整合配置文件写法
- struts1、spring、hibernate整合配置要点
- Struts1+Hibernate+Spring整合实例(一)
- Struts1+Hibernate+Spring整合(二)
- Struts1+Hibernate+Spring整合(一)
- struts1.x+spring+hibernate的整合
- struts1 hibernate spring BasicDataSouce ContextLoaderListener S1SH整合
- Spring 整合 Hibernate 与 Spring 整合 Struts1.x
- Struts1+Spring+Hibernate3.3整合笔记
- Struts 2 + Spring 3 + Hibernate 整合笔记
- Spring+hibernate整合学习笔记-2
- Struts1+spring+hibernate整合时几个关键的类
- C# 设计模式学习三 Abstract Factory 抽象工厂(实例)
- reactos操作系统实现(177)
- 【HIbernate】hibernate 最简单的例子
- 电子商务网站分析的内容指标和商业指标
- 服务器网页缓存的深入分析
- Struts1.2/2.1、spring、hibernate整合笔记
- js修改css样式表解析(转)
- 用Windows Live Writer写CSDN博客的步骤
- w3c
- Iterator adapter
- Ireport调用游标
- 走路
- poj 2532 stars解题报告
- 问个关于getchar与putchar的问题!(转载)