﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-JAVA学习</title><link>http://www.blogjava.net/okjie/</link><description>JAVA学习</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:46:39 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:46:39 GMT</pubDate><ttl>60</ttl><item><title>Struts2与Struts1的对比</title><link>http://www.blogjava.net/okjie/archive/2007/12/24/169976.html</link><dc:creator>痞子杰</dc:creator><author>痞子杰</author><pubDate>Mon, 24 Dec 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/okjie/archive/2007/12/24/169976.html</guid><wfw:comment>http://www.blogjava.net/okjie/comments/169976.html</wfw:comment><comments>http://www.blogjava.net/okjie/archive/2007/12/24/169976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/okjie/comments/commentRss/169976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/okjie/services/trackbacks/169976.html</trackback:ping><description><![CDATA[<p><strong>Struts2与Struts1的对比</strong></p>
<p>来源：struts2开发组</p>
<p><strong>Action 类:</strong><br />
" Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。<br />
" Struts 2 Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的，任何有execute标识的POJO对象都可以用作Struts2的Action对象。<br />
<br />
<strong>线程模式:</strong><br />
" Struts1 Action是单例模式并且必须是线程安全的，因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事，并且要在开发时特别小心。Action资源必须是线程安全的或同步的。<br />
" Struts2 Action对象为每一个请求产生一个实例，因此没有线程安全问题。（实际上，servlet容器给每个请求产生许多可丢弃的对象，并且不会导致性能和垃圾回收问题）</p>
<p><strong>Servlet 依赖:</strong><br />
" Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。<br />
" Struts 2 Action不依赖于容器，允许Action脱离容器单独被测试。如果需要，Struts2 Action仍然可以访问初始的request和response。但是，其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。</p>
<p><strong>可测性:</strong><br />
" 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API（这使得测试要依赖于容器）。一个第三方扩展－－Struts TestCase－－提供了一套Struts1的模拟对象（来进行测试）。<br />
" Struts 2 Action可以通过初始化、设置属性、调用方法来测试，&#8220;依赖注入&#8221;支持也使测试更容易。</p>
<p><strong>捕获输入:</strong><br />
" Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm，开发者经常创建多余的类捕获输入。动态Bean（DynaBeans）可以作为创建传统ActionForm的选择，但是，开发者可能是在重新描述(创建)已经存在的JavaBean（仍然会导致有冗余的javabean）。<br />
" Struts 2直接使用Action属性作为输入属性，消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型，包括业务对象，能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。</p>
<p><strong>表达式语言：</strong><br />
" Struts1 整合了JSTL，因此使用JSTL EL。这种EL有基本对象图遍历，但是对集合和索引属性的支持很弱。<br />
" Struts2可以使用JSTL，但是也支持一个更强大和灵活的表达式语言－－"Object Graph Notation Language" (OGNL).</p>
<p><strong>绑定值到页面（view）:</strong><br />
" Struts 1使用标准JSP机制把对象绑定到页面中来访问。<br />
" Struts 2 使用 "ValueStack"技术，使taglib能够访问值而不需要把你的页面（view）和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面（view）。<br />
　<br />
<strong>类型转换：</strong><br />
" Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器，对每一个实例来说是不可配置的。<br />
" Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。</p>
<p><strong>校验：</strong><br />
" Struts 1支持在ActionForm的validate方法中手动校验，或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容，但不能校验子对象。<br />
" Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验，来支持chain校验子属性</p>
<p><strong>Action执行的控制：</strong><br />
" Struts1支持每一个模块有单独的Request Processors（生命周期），但是模块中的所有Action必须共享相同的生命周期。<br />
" Struts2支持通过拦截器堆栈（Interceptor Stacks）为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。</p>
<img src ="http://www.blogjava.net/okjie/aggbug/169976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/okjie/" target="_blank">痞子杰</a> 2007-12-24 11:02 <a href="http://www.blogjava.net/okjie/archive/2007/12/24/169976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 5.5 开发 Spring + Struts + Hibernate 的详解视频</title><link>http://www.blogjava.net/okjie/archive/2007/11/05/158219.html</link><dc:creator>痞子杰</dc:creator><author>痞子杰</author><pubDate>Mon, 05 Nov 2007 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/okjie/archive/2007/11/05/158219.html</guid><wfw:comment>http://www.blogjava.net/okjie/comments/158219.html</wfw:comment><comments>http://www.blogjava.net/okjie/archive/2007/11/05/158219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/okjie/comments/commentRss/158219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/okjie/services/trackbacks/158219.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <div class="postTitle"><a class="postTitle2" href="http://www.blogjava.net/beansoft/archive/2007/10/07/150877.html"><span style="font-size: 10pt">MyEclipse 5.5 开发 Spring + Struts + Hibernate 的详解视频</span></a></div>
            <p><span style="font-size: 10pt">第一部分: Struts 开发 6.83MB 22分36秒 </span><a href="http://beansoft.java-cn.org/download/ssh_1_struts.exe"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/ssh_1_struts.exe</span></a></p>
            <p><span style="font-size: 10pt">第二部分: Hibernate + Spring 11.5MB 38分59秒 </span><a href="http://beansoft.java-cn.org/download/ssh_2_hibernate_spring.exe"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/ssh_2_hibernate_spring.exe</span></a></p>
            <p><span style="font-size: 10pt">第三部分: 自己实现 SpringProxyAction 5.05MB 14分25秒 </span><a href="http://beansoft.java-cn.org/download/ssh_3_struts_proxy_asm.exe"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/ssh_3_struts_proxy_asm.exe</span></a></p>
            <p><span style="font-size: 10pt">第四部分: ASM 错误解决及用 Spring 的代理实现整合 9.95MB 23分49秒 </span><a href="http://beansoft.java-cn.org/download/ssh_4_spring_struts.exe"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/ssh_4_spring_struts.exe</span></a></p>
            <p><span style="font-size: 10pt">大纲 PDF 下载: </span><a href="http://beansoft.java-cn.org/download/spring_struts_hibernate.pdf"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/spring_struts_hibernate.pdf</span></a><span style="font-size: 10pt"> 427KB</span></p>
            <p><span style="font-size: 10pt">代码下载(不带类库): </span><a href="http://beansoft.java-cn.org/download/myssh.rar"><span style="font-size: 10pt">http://beansoft.java-cn.org/download/myssh.rar</span></a><span style="font-size: 10pt"> 45KB</span></p>
            <p><span style="font-size: 10pt">&nbsp;</span></p>
            <p><strong><span style="font-size: 10pt">视频大纲:</span></strong></p>
            <h3><span style="font-size: 10pt">Java EE 讲座</span></h3>
            <p><span style="font-size: 10pt">MyEclipse 5.5 开发 Spring 整合 Struts, Hibernate 的应用</span></p>
            <p><span style="font-size: 10pt">刘长炯</span></p>
            <p><span style="font-size: 10pt">2007.10</span></p>
            <h3><strong><span style="font-size: 10pt">本章要点</span></strong></h3>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001.jpg" />创建数据库</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_1.jpg" />快速开发 Struts 应用</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001%5B2%5D.jpg" border="0" />添加 Hibernate 功能</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_3.jpg" />添加 Spring 功能</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_4.jpg" />Spring 整合 Hibernate</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_5.jpg" />模拟 Action 代理类实现 Struts + Spring</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_6.jpg" />Spring 整合 Struts</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_7.jpg" />Asm 出错和 log4j.properties 文件</span></p>
            <p><span style="font-size: 10pt"><img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_8.jpg" />测试运行</span></p>
            <h3><span style="font-size: 10pt">创建数据库</span></h3>
            <h4><span style="font-size: 10pt">&#8226; 创建数据库</span></h4>
            <h5><span style="font-size: 10pt">&#216; 用 MyEclipse Derby 或者其它数据库</span></h5>
            <h5><span style="font-size: 10pt">&#216; 用 MyEclipse Database Explorer 管理数据库</span></h5>
            <h5><span style="font-size: 10pt">&#216; 执行 SQL:</span></h5>
            <h6><span style="font-size: 10pt">&#8226; CREATE TABLE bbsuser (</span></h6>
            <h6><span style="font-size: 10pt">&#8226; id int(11) NOT NULL,</span></h6>
            <h6><span style="font-size: 10pt">&#8226; username varchar(200) NOT NULL,</span></h6>
            <h6><span style="font-size: 10pt">&#8226; password varchar(20) NOT NULL,</span></h6>
            <h6><span style="font-size: 10pt">&#8226; age int,</span></h6>
            <h6><span style="font-size: 10pt">&#8226; PRIMARY KEY (id)</span></h6>
            <h6><span style="font-size: 10pt">&#8226; )</span></h6>
            <h6><span style="font-size: 10pt">&#8226; ENGINE=MyISAM DEFAULT CHARSET=GBK;</span></h6>
            <h3><span style="font-size: 10pt">快速开发 Struts 应用</span></h3>
            <h3><span style="font-size: 10pt">添加 Hibernate 功能</span></h3>
            <h3><span style="font-size: 10pt">添加 Spring 功能</span></h3>
            <h3><span style="font-size: 10pt">Spring 整合 Hibernate</span></h3>
            <h3><span style="font-size: 10pt">Spring 整合 Hibernate(续)</span></h3>
            <h3><span style="font-size: 10pt">模拟 Action 代理类实现 Struts + Spring</span></h3>
            <h3><span style="font-size: 10pt">Spring 整合 Struts</span></h3>
            <h4><span style="font-size: 10pt">&#8226; 添加 Spring Plug in</span></h4>
            <h5><span style="font-size: 10pt">&#216; &lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;</span></h5>
            <h5><span style="font-size: 10pt">&#216; &lt;set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" /&gt;</span></h5>
            <h5><span style="font-size: 10pt">&#216; &lt;/plug-in&gt;</span></h5>
            <h4><span style="font-size: 10pt">&#8226; 替换 Action 的 Type</span></h4>
            <h5><span style="font-size: 10pt">&#216; &lt;action path="/login&#8220; &#8230;</span></h5>
            <h5><span style="font-size: 10pt">&#216; type="org.springframework.web.struts.DelegatingActionProxy" /&gt;</span></h5>
            <h4><span style="font-size: 10pt">&#8226; 在 Spring 配置文件中配置 Bean</span></h4>
            <h5><span style="font-size: 10pt">&#216; 要点: 通过 path 和 bean 的 name 进行匹配, 这两个值必须一样</span></h5>
            <h5><span style="font-size: 10pt">&#216; &lt;bean name="/login" class="com.test.struts.action.LoginAction"&gt;&lt;/bean&gt;</span></h5>
            <h4><span style="font-size: 10pt">&#8226; 注入 DAO 的代理 bean</span></h4>
            <h4><span style="font-size: 10pt">&#8226; 详细步骤参考文档</span></h4>
            <h4></h4>
            <h3><span style="font-size: 10pt">Spring 整合 Struts 的两种方式</span></h3>
            <h4><span style="font-size: 10pt">&#8226; struts1加载spring的两种方式：<br />
            第一种：通过web.xml配置加载spring上下文环境，其配置方式如下：<br />
            web.xml<br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;context-param&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/context-param&gt;<br />
            通过listener加载<br />
            &lt;listener&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/listener&gt;<br />
            或者利用severlet类加载<br />
            &lt;servlet&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;context&lt;/servlet-name&gt; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; <br />
            第二种方式：<br />
            使用Struts插件<br />
            在struts-config.xml中<br />
            &lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-property property="contextConfigLocation" <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="/WEB-INF/applicationContext.xml"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/plug-in&gt;</span></h4>
            <h4><span style="font-size: 10pt">&#8226; 这两种配置的明显区别就是，第一种方式可以配置多个spring配置文件。</span></h4>
            <h3><span style="font-size: 10pt">Asm 出错和 log4j.properties 文件</span></h3>
            <h4><span style="font-size: 10pt">&#8226; Log4j.properties</span></h4>
            <h5><span style="font-size: 10pt">&#216; # Configure logging for testing: optionally with log file</span></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.rootLogger=WARN, stdout</span></h5>
            <h5><span style="font-size: 10pt">&#216; # log4j.rootLogger=WARN, stdout, logfile</span></h5>
            <h5></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.stdout=org.apache.log4j.ConsoleAppender</span></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</span></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n</span></h5>
            <h5></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.logfile=org.apache.log4j.FileAppender</span></h5>
            <h5><span style="font-size: 10pt">&#216; <u>log4j.appender.logfile.File</u>=target/spring.log</span></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.logfile.layout=org.apache.log4j.PatternLayout</span></h5>
            <h5><span style="font-size: 10pt">&#216; log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n</span></h5>
            <h4><span style="font-size: 10pt">&#8226; 删除 asm-2.2.3.jar</span></h4>
            <h3><span style="font-size: 10pt">测试运行</span></h3>
            <h4><span style="font-size: 10pt">&#8226; 测试运行</span></h4>
            <h5><span style="font-size: 10pt">&#216; 用 MyEclipse 发布到 Tomcat</span></h5>
            <h5><span style="font-size: 10pt">&#216; 运行</span></h5>
            <h5><span style="font-size: 10pt">&#216; 打开浏览器测试</span></h5>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/okjie/aggbug/158219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/okjie/" target="_blank">痞子杰</a> 2007-11-05 11:58 <a href="http://www.blogjava.net/okjie/archive/2007/11/05/158219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>