﻿<?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-&lt;font color='blue'&gt;好·色之徒&lt;/font&gt;--&lt;a href="http://www.hao-se.cn/" target="_blank"&gt;好·色之徒&lt;/a&gt;</title><link>http://www.blogjava.net/iask/</link><description>&lt;font color='blue'&gt;菩提本无树，明镜亦非台,本来无一物，何处惹尘埃&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 21:28:35 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 21:28:35 GMT</pubDate><ttl>60</ttl><item><title>采用struts spring hibernate开发的一个web系统 重新发布</title><link>http://www.blogjava.net/iask/archive/2008/09/27/231416.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Sat, 27 Sep 2008 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/09/27/231416.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/231416.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/09/27/231416.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/231416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/231416.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本着学习的目的，接下来的一段时间内，会采用流行的struts+hibernate+spring组合，开发一个web系统（订单管理），为了便于学习和下载即可使用的目的，数据库采用内置的hsqldb 在WEB开发板块中有：整合Struts 与Spring，可以了解一下有关Struts 与Spring的结合方式 同时在开源软件板块有：关于采用hsqldb的一些说明，jexcelapi java对excel的操作 这些会在后续内容中涉及到，可以先参考一下 最终的代码可下载学习之用，希望有所帮助！&nbsp;&nbsp;<a href='http://www.blogjava.net/iask/archive/2008/09/27/231416.html'>阅读全文</a><img src ="http://www.blogjava.net/iask/aggbug/231416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-09-27 09:36 <a href="http://www.blogjava.net/iask/archive/2008/09/27/231416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts简单案例-适合初学者(三)  </title><link>http://www.blogjava.net/iask/archive/2008/08/07/220627.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Thu, 07 Aug 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/08/07/220627.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/220627.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/08/07/220627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/220627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/220627.html</trackback:ping><description><![CDATA[
		<p align="center">
				<strong>StrutsSample</strong>
				<strong>概要分析</strong>
		</p>
		<p align="left">
				<strong>更多详情请参见：<a target="_blank" href="http://www.hao-se.cn">我的博客 我的生活</a><br /></strong>
		</p>
		<p>
				<strong>说明：</strong>具体案例的分析，详细的分析在讲解的过程中再阐述（这份案例大约在04年已经完成，所以现在看起来难免有些不符合时代潮流，领会精神即可）</p>
		<p>
				<strong>概要</strong>
		</p>
		<p>主要针对表department操作，创建、更新、删除、选择</p>
		<p>
				<strong>层次结构说明</strong>
		</p>
		<p>共分为四层:mid、midimpl、application、presentation</p>
		<p>一般开发基于MVC结构的应用来说，层次的划分是很重要的，三层结构、于至于多层结构的演变有其一定的道理。MVC本身就是模型、视图、控制的层次划分，这样有助于职能的明确，加快开发效率，最重要的是系统的把握度和可扩展的能力。</p>
		<p>当然这里的四层划分，不是绝对的，根据不同的项目可以有不同的调整，只是作为一个参考，这是一个实际项目中保留下来的，有其一定的科学性。</p>
		<p>mid：接口和抽象类部分，是相对系统底层的功能的集中体现，相对共通性部分</p>
		<p>midimpl：是对mid层的具体现实</p>
		<p>application：具体业务逻辑、模型</p>
		<p>presentation：表述层，struts的具体实现部分</p>
		<p>具体为何如此划分层次，会具体讲解，也请大家考虑一下。</p>
		<p>
				<strong>下面具体讲解StrutsSample的各个组成</strong>
		</p>
		<p>
				<strong>类</strong>
		</p>
		<p>
				<strong>mid</strong>
		</p>
		<p>DAOFactory：是采用了工厂模式来实现的，其间又有DAO模式。</p>
		<p>功能：得到DAOFactoryImpl（DAOFactory的具体实现）实例，并提供了两个<strong>abstract</strong><strong></strong></p>
		<p>方法，在DAOFactoryImpl必须得以实现。</p>
		<p>DepartmentDAO：操作表department的接口，定义了一些对表的基本操作</p>
		<p>
				<strong>midimpl</strong>
		</p>
		<p>
				<strong>
				</strong>DAOFactoryImpl: DAOFactory的具体实现，在DAOFactory中的两个abstract方法也得以实</p>
		<p>现：init（）方法，取得数据源。getDepartmentDAO（）方法，得到接口DepartmentDAO的具体实例DepartmentDAOImpl。除了要必须实现的方法外，还定义了getConnection（）方法，以取得对数据源的连接。</p>
		<p>DepartmentDAOImpl：接口DepartmentDAO的具体实现，表的操作具体实现。</p>
		<p>
				<strong>application</strong>
		</p>
		<p>Department：定义了一个数据bean，可以对照数据表department，发现是对应它的一个对</p>
		<p>象的实现。</p>
		<p>DepartmentBO：定义了这个应用程序中所需要的业务逻辑，比如selectDepartment（String
depid）方法，根据一个部门的ID来获得该部门的详细数据、createDepartment（）、updateDepartment（）、
deleteDepartment（）分别对应创建、更新、删除</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>presentation</strong>
		</p>
		<p>
				<strong>
				</strong>DepartmentForm:Form
Bean表单，收集JSP页面上的元素。可以发现它和application层的Department类是类似的，因为Form表单所收集的数据真好是对
应数据库中的字段的。（这只是个比较特殊的例子而已，开发中不一定都是这样的，这里同时引申出一个问题，居然两个类是类似的，为什么不合并一下，就用其中
的一个类的，这样不是还可以节省一个类吗？）</p>
		<p>CreateDepartmentAction：创建部门的Action类</p>
		<p>DeleteDepartmentAction：删除部门的Action类</p>
		<p>ListDepartmentAction：所有部门的一个列表</p>
		<p>SelectDepartmentAction：选择一个部门</p>
		<p>UpdateDepartmentAction：更新部门的Action类</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>资源文件</strong>
				<strong>
				</strong>
		</p>
		<p>ApplicationResources.properties</p>
		<p>
				<strong>JSP</strong>
				<strong>
				</strong>
		</p>
		<p>
				<strong> index.jsp</strong>
		</p>
		<p>
				<strong> Create</strong>
		</p>
		<p>
				<strong> –register.jsp</strong>
		</p>
		<p>
				<strong> –success.jsp</strong>
		</p>
		<p>
				<strong> –failure.jsp</strong>
		</p>
		<p>
				<strong> list</strong>
		</p>
		<p>
				<strong> –departmentList.jsp</strong>
		</p>
		<p>
				<strong> –failure.jsp</strong>
		</p>
		<p>
				<strong> update</strong>
		</p>
		<p>
				<strong> –update.jsp</strong>
		</p>
		<p>
				<strong> –failure.jsp</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>struts-config.xml</strong>
		</p>
		<p align="left">&lt;?xml version=”1.0″ encoding=”ISO-8859-1″ ?&gt;</p>
		<p align="left">&lt;!DOCTYPE struts-config PUBLIC</p>
		<p align="left">“-//Apache Software Foundation//DTD Struts Configuration 1.1//EN”</p>
		<p align="left">“http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd”&gt;</p>
		<p align="left">
				<strong>&lt;struts-config&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;!– ========== Form Bean Definitions =================================== –&gt;</p>
		<p align="left">
				<strong>&lt;form-beans&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;!– Logon form bean –&gt;</p>
		<p align="left">&lt;form-bean   name=”departmentForm”</p>
		<p align="left">type=”cn.haose.struts.presentation.DepartmentForm”&gt;</p>
		<p align="left">&lt;/form-bean&gt;</p>
		<p align="left">
				<strong>&lt;/form-beans&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">&lt;!– ========== Action Mapping Definitions ============================== –&gt;</p>
		<p align="left">
				<strong>&lt;action-mappings&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;action  path=”/create”</p>
		<p align="left">type=”cn.haose.struts.presentation.CreateDepartmentAction”</p>
		<p align="left">name=”departmentForm”</p>
		<p align="left">scope=”request”</p>
		<p align="left">input=”/create/register.jsp”&gt;</p>
		<p align="left">&lt;forward name=”success”   path=”/create/success.jsp”/&gt;</p>
		<p align="left">&lt;forward name=”failure”   path=”/create/failure.jsp”/&gt;</p>
		<p align="left">&lt;/action&gt;</p>
		<p align="left">
		</p>
		<p align="left">&lt;action  path=”/list”</p>
		<p align="left">type=”cn.haose.struts.presentation.ListDepartmentAction”</p>
		<p align="left">&gt;</p>
		<p align="left">&lt;forward name=”success”   path=”/list/departmentList.jsp”/&gt;</p>
		<p align="left">&lt;forward name=”failure”   path=”/list/failure.jsp”/&gt;</p>
		<p align="left">&lt;/action&gt;</p>
		<p align="left">
		</p>
		<p align="left">&lt;action  path=”/select”</p>
		<p align="left">type=”cn.haose.struts.presentation.SelectDepartmentAction”</p>
		<p align="left">&gt;</p>
		<p align="left">&lt;forward name=”success”   path=”/update/update.jsp”/&gt;</p>
		<p align="left">&lt;forward name=”failure”   path=”/update/failure.jsp”/&gt;</p>
		<p align="left">&lt;/action&gt;</p>
		<p align="left">
		</p>
		<p align="left">&lt;action  path=”/delete”</p>
		<p align="left">type=”cn.haose.struts.presentation.DeleteDepartmentAction”</p>
		<p align="left">&gt;</p>
		<p align="left">&lt;forward name=”success”   path=”/list.do”/&gt;</p>
		<p align="left">&lt;forward name=”failure”   path=”/update/failure.jsp”/&gt;</p>
		<p align="left">&lt;/action&gt;</p>
		<p align="left">
		</p>
		<p align="left">&lt;action  path=”/update”</p>
		<p align="left">type=”cn.haose.struts.presentation.UpdateDepartmentAction”</p>
		<p align="left">name=”departmentForm”</p>
		<p align="left">scope=”request”</p>
		<p align="left">input=”/update/update.jsp”&gt;</p>
		<p align="left">&lt;forward name=”success”   path=”/list.do”/&gt;</p>
		<p align="left">&lt;forward name=”failure”   path=”/update/failure.jsp”/&gt;</p>
		<p align="left">&lt;/action&gt;</p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;/action-mappings&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">&lt;!– ========== Message Resources Definitions =========================== –&gt;</p>
		<p align="left">
				<strong>&lt;message-resources</strong> parameter=”ApplicationResources”<strong>/&gt;</strong></p>
		<p align="left">&lt;/struts-config&gt;</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>web.xml.</strong>
		</p>
		<p align="left">&lt;?xml version=”1.0″ encoding=”UTF-8″?&gt;</p>
		<p align="left">&lt;!DOCTYPE web-app PUBLIC “-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd”&gt;</p>
		<p align="left">&lt;web-app id=”WebApp”&gt;</p>
		<p align="left">
				<strong>&lt;display-name&gt;</strong>sample<strong>&lt;/display-name&gt;</strong><strong></strong></p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;servlet&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;servlet-name&gt;action&lt;/servlet-name&gt;</p>
		<p align="left">&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;</p>
		<p align="left">&lt;init-param&gt;</p>
		<p align="left">&lt;param-name&gt;config&lt;/param-name&gt;</p>
		<p align="left">&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;</p>
		<p align="left">&lt;/init-param&gt;</p>
		<p align="left">&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
		<p align="left">
				<strong>&lt;/servlet&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">&lt;!– Action Servlet Mapping –&gt;</p>
		<p align="left">
				<strong>&lt;servlet-mapping&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;servlet-name&gt;action&lt;/servlet-name&gt;</p>
		<p align="left">&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;</p>
		<p align="left">
				<strong>&lt;/servlet-mapping&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;welcome-file-list&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;</p>
		<p align="left">
				<strong>&lt;/welcome-file-list&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">&lt;!– Struts Tag Library Descriptors –&gt;</p>
		<p align="left">
				<strong>&lt;taglib&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;taglib-uri&gt;/WEB-INF/struts-bean.tld&lt;/taglib-uri&gt;</p>
		<p align="left">&lt;taglib-location&gt;/WEB-INF/struts-bean.tld&lt;/taglib-location&gt;</p>
		<p align="left">
				<strong>&lt;/taglib&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;taglib&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;taglib-uri&gt;/WEB-INF/struts-html.tld&lt;/taglib-uri&gt;</p>
		<p align="left">&lt;taglib-location&gt;/WEB-INF/struts-html.tld&lt;/taglib-location&gt;</p>
		<p align="left">
				<strong>&lt;/taglib&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;taglib&gt;</strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;taglib-uri&gt;/WEB-INF/struts-logic.tld&lt;/taglib-uri&gt;</p>
		<p align="left">&lt;taglib-location&gt;/WEB-INF/struts-logic.tld&lt;/taglib-location&gt;</p>
		<p align="left">
				<strong>&lt;/taglib&gt; </strong>
				<strong>
				</strong>
		</p>
		<p align="left">
		</p>
		<p align="left">
				<strong>&lt;resource-ref</strong>&gt;</p>
		<p align="left">&lt;description&gt;DB Connection&lt;/description&gt;</p>
		<p align="left">&lt;res-ref-name&gt;jdbc/SAMPLE&lt;/res-ref-name&gt;</p>
		<p align="left">&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;</p>
		<p align="left">&lt;res-auth&gt;Container&lt;/res-auth&gt;</p>
		<p align="left">
				<strong>&lt;/resource-ref&gt; </strong>
				<strong>
				</strong>
		</p>
		<p align="left">&lt;/web-app&gt;</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>数据源</strong>
				<strong>
				</strong>
		</p>
		<p>
				<strong>Tomcat</strong>
				<strong>中的</strong>
				<strong>server.xml</strong>
		</p>
		<p>
				<strong>&lt;Context path=”/sample” docBase=”sample” debug=”0″</strong>
		</p>
		<p>
				<strong> reloadable=”true” crossContext=”true”&gt;</strong>
		</p>
		<p>
				<strong>&lt;Resource name=”jdbc/SAMPLE”</strong>
		</p>
		<p>
				<strong>auth=”Container”</strong>
		</p>
		<p>
				<strong> type=”javax.sql.DataSource”/&gt;</strong>
		</p>
		<p>
				<strong>&lt;ResourceParams name=”jdbc/SAMPLE”&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt; </strong>
		</p>
		<p>
				<strong>&lt;name&gt;factory&lt;/name&gt;</strong>
		</p>
		<p>
				<strong>&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;driverClassName&lt;/name&gt; </strong>
		</p>
		<p>
				<strong>&lt;value&gt;oracle.jdbc.OracleDriver&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;url&lt;/name&gt; </strong>
		</p>
		<p>
				<strong>&lt;value&gt;jdbc:oracle:thin:@hao-se:1521:haose&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;username&lt;/name&gt;</strong>
		</p>
		<p>
				<strong> &lt;value&gt;test1&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;password&lt;/name&gt;</strong>
		</p>
		<p>
				<strong> &lt;value&gt;test1&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;maxActive&lt;/name&gt;</strong>
		</p>
		<p>
				<strong> &lt;value&gt;10&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;maxIdle&lt;/name&gt;</strong>
		</p>
		<p>
				<strong> &lt;value&gt;1&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;parameter&gt;</strong>
		</p>
		<p>
				<strong> &lt;name&gt;maxWait&lt;/name&gt;</strong>
		</p>
		<p>
				<strong> &lt;value&gt;-1&lt;/value&gt;</strong>
		</p>
		<p>
				<strong> &lt;/parameter&gt;</strong>
		</p>
		<p>
				<strong>&lt;/ResourceParams&gt;</strong>
		</p>
		<p>
				<strong>&lt;/Context&gt;</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>
				</strong>
		</p>
		<p>
				<strong>最后附上运行画面</strong>
		</p>
		<p>
				<strong>Index.jsp</strong>
		</p>
		<p>
				<strong>
						<!--[if gte vml 1]> <![endif]-->
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts1.png" title="" class="thickbox" rel="singlepic17">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=17&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts1.png" title="20080726-struts1.png" />
						</a>
						<br />
				</strong>
		</p>
		<p>
				<strong>Create   register.jsp</strong>
		</p>
		<p>
				<strong>
						<!--[if gte vml 1]> <![endif]-->
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts2.png" title="" class="thickbox" rel="singlepic18">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=18&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts2.png" title="20080726-struts2.png" />
						</a>
						<br />
				</strong>
		</p>
		<p>
				<strong>Create   success.jsp</strong>
		</p>
		<p>
				<strong>
						<!--[if gte vml 1]> <![endif]-->
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts3.png" title="" class="thickbox" rel="singlepic19">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=19&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts3.png" title="20080726-struts3.png" />
						</a>
						<br />
				</strong>
		</p>
		<p>
				<strong>Create   failure.jsp</strong>
		</p>
		<p>
				<strong>
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts4.png" title="" class="thickbox" rel="singlepic20">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=20&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts4.png" title="20080726-struts4.png" />
						</a>
				</strong>
		</p>
		<p>
				<strong>list    departmentList.jsp</strong>
		</p>
		<p>
				<strong>
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts5.png" title="" class="thickbox" rel="singlepic21">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=21&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts5.png" title="20080726-struts5.png" />
						</a>
				</strong>
		</p>
		<p>
				<strong>list    failure.jsp</strong>
		</p>
		<p>
				<strong>
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts6.png" title="" class="thickbox" rel="singlepic22">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=22&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts6.png" title="20080726-struts6.png" />
						</a>
				</strong>
		</p>
		<p>
				<strong>update     update.jsp</strong>
		</p>
		<p>
				<strong>
						<a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-struts7.png" title="" class="thickbox" rel="singlepic23">
								<img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=23&amp;width=320&amp;height=240&amp;mode=" alt="20080726-struts7.png" title="20080726-struts7.png" />
						</a>
				</strong>
		</p>
<img src ="http://www.blogjava.net/iask/aggbug/220627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-08-07 12:48 <a href="http://www.blogjava.net/iask/archive/2008/08/07/220627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts简单案例-适合初学者(二)</title><link>http://www.blogjava.net/iask/archive/2008/07/31/219132.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Thu, 31 Jul 2008 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/31/219132.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/219132.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/31/219132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/219132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/219132.html</trackback:ping><description><![CDATA[
		<p>说明一下这个系列的总体规划：</p>
		<p>一、    为了更好的理解struts，首先讲解FrontController模式<br />
1、    阅读并尽可能的理解FrontController.doc这份文档<br />
2、    提问关于前一阶段有关MVC的学习情况<br />
3、    结合MVC的学习，谈谈FrontController在这里起到什么样的作用<br />
4、    文档中关于请求类型的通信，映射的理解<br />
5、    文档中关于映射，只是做了一个简单的封装，如果采用映射外部化（如XML）,那么具体如何现实，请说出大体方案（不要求具体代码的实现）<br />
6、    有关文档中提及的几个问题，你是如何理解的</p>
		<p>二、    struts实例讲解<br />
1、    在集成开发环境中，创建新的工程<br />
2、    一般应用的层次结构<br />
3、    重点说明在这个实例中接口和抽象的重要性<br />
4、    接上一话题，mid和midimpl层的具体实现<br />
5、    有关application的一般概念，具体在这个实例中的实现<br />
6、    presentation层（struts的集中实现部分）的讲解<br />
7、    有关实例中用到的资源文件的说明<br />
8、    struts-config.xml文件的配置<br />
9、    web.xml文件的配置<br />
10、jsp的制作，三种常标签库的应用<br />
11、有关数据源的一般介绍<br />
12、如何在集成开发环境中运行这个实例（需掌握前一阶段有关IDE的学习）</p>
		<p>三、发布实例到应用服务器中去（Tomcat）<br />
1、    Tomcat相关基础<br />
2、    Tomcat安装、配置<br />
3、    web.xml<br />
4、    server.xml<br />
5、    如何发布一个具体的实例</p>
		<p>更多详情请参见：<a target="_blank" href="http://www.hao-se.cn">我的博客 我的生活</a></p>
<img src ="http://www.blogjava.net/iask/aggbug/219132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-31 18:13 <a href="http://www.blogjava.net/iask/archive/2008/07/31/219132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts简单案例-适合初学者(一)</title><link>http://www.blogjava.net/iask/archive/2008/07/30/218687.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Wed, 30 Jul 2008 04:55:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/30/218687.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/218687.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/30/218687.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/218687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/218687.html</trackback:ping><description><![CDATA[
		<p>前言：<br />
虽然现在ssh开发满天飞，但是对于初学者来说，未必是好事，从基础学起，一步一个脚印，也许对他们来说更好。更多详情请参见：<a target="_blank" href="http://www.hao-se.cn">我的博客 我的生活</a><br /></p>
		<hr />接下来的时间里，讲解一个struts的简单案例，从基础学起，有兴趣的朋友可以慢慢看来。
<p><strong>概要：Front Controller（模式）</strong></p><p>说明：<br />
讲解struts具体例子之前，先说明一下Front Controller模式(前端控制器模式)。struts就是它的具体实现，得以扩展，并且是Model2结构的完整实现。</p><p>Model2结构通过一个控制组件来接受请求，这个控制组件本身可以为请求提供服务，也可以把这项任务分配给其他一些组件。生成响应信息的任务接着被分配给适当的视图组件。实现这种要求的方式很多，Front Controller就是其中一种。<br /><a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-1.gif" title="" class="thickbox" rel="singlepic15"><img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=15&amp;width=320&amp;height=240&amp;mode=" alt="20080726-1.gif" title="20080726-1.gif" /></a><br />
实现前端控制器可以采取不同的策略，一种典型的策略是使用一个servlet<br /><strong>问题：</strong>如果把所有的功能集中起来会出现一个大而臃肿的控制器组件，它将负责整个Web的<br />
相关处理。<br /><strong>解决：</strong>办法之一是使用多个前端控制器，分别负责某一方面的处理任务<br />
另一种解决方案是使用Command and Controller（命令与控制器）（稍候介绍）</p><p>下面是这种Front Controller模式示例程序框架实现：<br />
public class FrontController extends HttpServlet {<br />
protected void processRequest(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {<br />
RequestDispatcher dispatcher =<br />
getServletContext().getRequestDispatcher(nextView);<br />
dispatcher.forward(req, res);<br />
}</p><p>protected void doGet(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {<br />
processRequest(req, res);<br />
}</p><p>protected void doPost(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {<br />
processRequest(req, res);<br />
}<br />
}</p><p>在这里，它只是HttpServlet一个简单的扩充，默认实现了doGet()和doPost()方法，这两个方法负责把请求分配给另一个叫processRequest()的方法。这是为了保证不论发出什么请求，前端控制器都能为之提供服务。<br />
在processRequest()的方法中我们省去主要部分，但实际上前端控制器将先执行与请求关联的处理，然后再把它分配给一个视图组件来生成相关的
响应信息。视图组件一般是JSP页面。控制器完成了自己的业务逻辑之后，它就可以通过RequestDispatcher把处理分配给一个JSP。<br />
到此你可能会提出一个问题。如果控制器要负责处理所有的请求，那么它怎么知道各请求都是什么以及如何处理呢？（Command and Controller，上面问题所提到的，现在开始讲解）</p><p><strong>Command and Controller策略</strong><br />
在Command and Controller策略中，处理每个具体请求的逻辑被转移到了一个单独的组件中。<br /><a href="http://www.hao-se.cn/wp-content/gallery/blog/20080726-2.gif" title="" class="thickbox" rel="singlepic16"><img class="ngg-singlepic ngg-center" src="http://www.hao-se.cn/wp-content/plugins/nextgen-gallery/nggshow.php?pid=16&amp;width=320&amp;height=240&amp;mode=" alt="20080726-2.gif" title="20080726-2.gif" /></a><br />
这些额外组件各表示一个具体的命令（或操作，既action），并且组件中封装着执行相关操作的逻辑。<br />
前端控制器把对请求的处理分配给适当的命令组件。<br /><strong>操作类</strong><br />
为了实现Command and Controller策略，首先需要定义位于控制器和操作组件之间的接口。<br />
public abstract class Action {<br />
public abstract String process(HttpServletRequest req, HttpServletResponse res);<br />
}</p><p><strong>关于请求类型的通信</strong><br />
这里的处理如下：FrontController Servlet和URI/controller/*之间定义了一个映射<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;FrontController&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;com.wxhx.controller.FrontController&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;FrontController&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/controller/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</p><p>为了从附加路径信息中获得的字符串映射到一个特定的操作实例上，当然，同样有很多策略可供选择，其中最灵活的就是把这种映射外部化，例如可以通过一个XML文件。<br />
为了简单起见，我们在这里建立一个单独的组件，用于封装这种映射。<br />
public class ActionHelper {<br />
private static HashMap actions = new HashMap();<br />
static {<br />
actions.put(”Login”, “com.sample.LoginAction”);<br />
}<br />
public static Action getAction(String name) {<br />
Action action = null;<br />
try {<br />
Class c = Class.forName((String) actions.get(name));<br />
action = (Action) c.newInstance();<br />
} catch (Exception e) {<br />
e.printStackTrace();<br />
}<br />
return action;<br />
}<br />
}<br />
好了，以上就是要实现的一个简单的框架类FrontController，Action以及辅助的ActionHelper类</p><p>下一步是把所有这些处理插入到FrontController的processRequest方法中，这将是Web应用程序中所有请求的单一入口：<br />
public class FrontController extends HttpServlet {<br />
protected void processRequest(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {</p><p>String actionName =req.getPathInfo().substring(1);<br />
Action action =ActionHelper.getAction(actionName);</p><p>String nextView =action.process(req, res);</p><p>RequestDispatcher dispatcher =<br />
getServletContext().getRequestDispatcher(nextView);<br />
dispatcher.forward(req, res);<br />
}</p><p>protected void doGet(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {<br />
processRequest(req, res);<br />
}</p><p>protected void doPost(HttpServletRequest req, HttpServletResponse res)<br />
throws ServletException, IOException {<br />
processRequest(req, res);<br />
}<br />
}</p><p>具体相关内容可参见实例！</p><img src ="http://www.blogjava.net/iask/aggbug/218687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-30 12:55 <a href="http://www.blogjava.net/iask/archive/2008/07/30/218687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>首页的一个特效</title><link>http://www.blogjava.net/iask/archive/2008/07/23/216832.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Wed, 23 Jul 2008 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/23/216832.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/216832.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/23/216832.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/216832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/216832.html</trackback:ping><description><![CDATA[
		<p>个人网站常常需要有吸引眼球的东西，比如说首页，一个好的奇特的首页效果往往给浏览者留下好的记忆，促使他下来还来光临，这里介绍一个首页特效，在
很早之前在一个知名的blog中看到的，时间隔得有些久远了，所以也忘记具体地址是什么了，等以后记起来的话再补上，这里先把这个介绍给大家，是用
jquery来实现的，其它的就是图片和静态html了，所以可以应用于绝大部分的空间，这里给你示例看看  <a href="http://www.hao-se.cn/res/index.html" target="_blank">演示页面</a> 具体代码可以下载分析了</p>
		<p>
				<span style="color: rgb(255, 0, 0); font-size: small;">源码下载(index.rar)：</span>
				<a id="r_l_0" href="http://www.hao-se.cn/down/" target="_blank">
						<span style="color: rgb(255, 0, 0); font-size: small;">资源下载中心</span>
				</a>
		</p>
		<p>更多详情请参见 <a target="_blank" href="http://www.hao-se.cn">我的博客 我的生活</a><br /><a id="r_l_0" href="http://www.hao-se.cn/down/" target="_blank"><span style="color: rgb(255, 0, 0); font-size: small;"></span></a></p>
<img src ="http://www.blogjava.net/iask/aggbug/216832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-23 12:10 <a href="http://www.blogjava.net/iask/archive/2008/07/23/216832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用velocity and spring发送邮件完整示例</title><link>http://www.blogjava.net/iask/archive/2008/07/21/216360.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Mon, 21 Jul 2008 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/21/216360.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/216360.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/21/216360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/216360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/216360.html</trackback:ping><description><![CDATA[
		<p>在上一篇文章中<a title="Permanent Link to              ActiveMQ 与 Spring 演示系统，提供演示程序下载" rel="bookmark" href="http://www.hao-se.cn/?p=24">ActiveMQ 与 Spring 演示系统，提供演示程序下载<br /></a> 通过JMS实现邮件发送系统，这里演示一个通过线程发送邮件的示例，使用到了spring2.5和velocity1.4，上一篇文章是是采用了freemarker模板技术，这里改用velocity模板技术，可以参考一下两者之间的不同之处。</p>
		<p>说明：代码的结构和风格延续上一篇，更好的读懂代码</p>
		<p>action：SendMailAction 和ActiveMQ那份代码基本相同，简单的用于控制邮件的发送</p>
		<p>util：还是Constants常量数据</p>
		<p>service：MailService结合Spring的配置文件mail.xml，注入了JavaMail和velocity模板引擎，在内部类MailThread（线程类）中来发送邮件</p>
		<p>就三个类，其它的配置信息mail.properties、mailtemplate、action.xml、struts-config.xml、web.xml和ActiveMQ发送邮件中的是类似的，可以参考一下。</p>
		<p>备注：考虑到包的大小，把lib中spring的架包去除了，自己去下载一份2.5的即可</p>
		<p>
				<span style="color: rgb(255, 0, 0); font-size: small;">更多详情请参见：<a target="_blank" href="http://www.hao-se.cn">我的博客 我的生活</a><br /></span>
				<a id="r_l_0" href="http://www.hao-se.cn/down/" target="_blank">
						<span style="color: rgb(255, 0, 0); font-size: small;">
						</span>
				</a>
		</p>
<img src ="http://www.blogjava.net/iask/aggbug/216360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-21 15:23 <a href="http://www.blogjava.net/iask/archive/2008/07/21/216360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈DAO模式</title><link>http://www.blogjava.net/iask/archive/2008/07/19/216014.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Sat, 19 Jul 2008 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/19/216014.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/216014.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/19/216014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/216014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/216014.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: DAO模式在现在的开发中应用非常的广泛，它可以帮助我们实现持久化逻辑和业务逻辑的分离，同时实现对多种持久化实现的支持。当然现在你可以通过 hibernate来实现对多种持久化的支持，由于新的技术新的方式的出现，DAO也相应的做出了一些调整，比如泛型DAO，在SpringSide中有很还得例子可以参考这方面的实现。&nbsp;&nbsp;<a href='http://www.blogjava.net/iask/archive/2008/07/19/216014.html'>阅读全文</a><img src ="http://www.blogjava.net/iask/aggbug/216014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-19 12:36 <a href="http://www.blogjava.net/iask/archive/2008/07/19/216014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用struts spring hibernate开发的一个web系统,说明</title><link>http://www.blogjava.net/iask/archive/2008/07/16/215144.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Wed, 16 Jul 2008 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2008/07/16/215144.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/215144.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2008/07/16/215144.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/215144.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/215144.html</trackback:ping><description><![CDATA[之前发布的系列文章，采用struts spring hibernate开发的一个web系统。由于域名改变，数据没有及时备份，所以在长时间内没有提供下载，非常抱歉。<br />这份代码电脑上还有备份，不过一时半会还找不到，时间比较久远了，呵呵。我有时间的话试试再找找看，我也非常希望把这个系列弄上来，虽然架构有些陈旧了，不过我想还是值得研究一下的。<br />这里也好长时间没有更新了，主要是新的博客<a title="我的博客 我的生活" href="http://www.hao-se.cn" target="_blank">www.hao-se.cn</a> 上了<br />以后资源下载相关文章都会在那里发布。<br /><img src ="http://www.blogjava.net/iask/aggbug/215144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2008-07-16 10:33 <a href="http://www.blogjava.net/iask/archive/2008/07/16/215144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>blog全面转移到</title><link>http://www.blogjava.net/iask/archive/2007/11/08/159011.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Thu, 08 Nov 2007 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2007/11/08/159011.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/159011.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2007/11/08/159011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/159011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/159011.html</trackback:ping><description><![CDATA[
		<p>blog全面转移到 <a href="http://www.hao-se.cn/">http://www.hao-se.cn/</a> <br /><br />相关技术文档也将转移到那边</p>
<img src ="http://www.blogjava.net/iask/aggbug/159011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2007-11-08 09:44 <a href="http://www.blogjava.net/iask/archive/2007/11/08/159011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSCACHE网页缓存</title><link>http://www.blogjava.net/iask/archive/2007/06/08/122858.html</link><dc:creator>城市劣人</dc:creator><author>城市劣人</author><pubDate>Fri, 08 Jun 2007 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/iask/archive/2007/06/08/122858.html</guid><wfw:comment>http://www.blogjava.net/iask/comments/122858.html</wfw:comment><comments>http://www.blogjava.net/iask/archive/2007/06/08/122858.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/iask/comments/commentRss/122858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/iask/services/trackbacks/122858.html</trackback:ping><description><![CDATA[
		<p>已经转移到 <a href="http://www.hao-se.cn" target="_blank">好·色之徒--我的博客、我的生活</a></p>
		<p>
				<font color="#0066ff">缓存（CACHE）<br /></font>定义：在本地放置、隐藏或存储常用信息以供快速检索 <br />A memory area where frequently accessed data can be stored for rapid access. <br />好处：提高系统响应速度、改善系统运行性能的技术。</p>
		<p>
				<font color="#0066ff">面临的问题<br /></font>1、被处理的内容短时间不变，所以短时间内可以作为静态内容进行处理<br />2、在一个不太长的时间内，被处理的内容可能或者必定产生变化，所以必须将他们作为动态内容进行处理<br />3、在合理的时间区段内可以忽略被处理内容变化后带来的影响<br />4、对这些内容的处理动作比较消耗系统性能，影响系统响应时间 基础数据的变更问题 <br />例子：系统中需要处理的基础数据；统计报表。</p>
		<p>
				<font color="#0066ff">解决方法</font>
				<br />1、缓存信息<br />当上述的基础数据或者统计报表第一次被访问时，被处理的内容被当作动态信息，基础数库从数据库中获得，统计报表也会被生成符合要求的图形、文件，然后这些信息都会被放入缓存信息中</p>
		<p>2、响应信息由缓存提供<br />当上述的基础数据或者统计报表继续被访问时，系统将会首先检查缓存信息中是否有对应的内容和我们设定的缓存规则，如果符合缓存信息存在而且符合缓存规则，给出的响应将来自于缓存信息，如果没有或者缓存信息已经不符合设定的要求，系统将重复上一步的动作。</p>
		<p>在步骤2中，多数情况下，当用户请求到达时，被处理的内容将来自于缓存，所以大大的减少了与数据库的交互，或者不再需要为每个请求都生成一次报表图形或者文件，这部分工作的减少对于降低系统性能消耗、提高系统稳定性和并发处理能力是非常有益的</p>
		<p>
				<font color="#0066ff">OSCACHE</font>
				<br />OSCache是OpenSymphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件 <br />特点<br />兼容多种支持JSP的web服务器：已经通过兼容测试的web服务器包括OrionServer 、Macromedia JRun 、BEA Weblogic 、IBM Websphere 、Silverstream 、Caucho Resin 、Tomcat (4.x及以上版本) <br />可选的缓存区：你可以使用内存、硬盘空间、同时使用内存和硬盘或者提供自己的其他资源（需要自己提供适配器）作为缓存区。<br />使用内存作为缓存区将可以提供更好的性能  <br />使用硬盘作为缓存区可以在服务器重起后迅速恢复缓存内容  <br />同时使用内存和硬盘作为缓存区则可以减少对内存的占用  <br />OSCache中按照缓存范围的不同分为两种不同的方式：一种是缓存JSP页面中部分或者全部内容，一种是基于整个页面文件的缓存 </p>
		<p>另外OSCHACHE还支持：POJO 缓存 、O/R Data Access 缓存 。</p>
		<p>
				<font color="#0066ff">JSP部分内容缓存</font>
				<br />第一次请求到达时，标签中的内容被处理并且缓存起来，当下一个请求到达时，缓存系统会检查这部分内容的缓存是否已经失效，主要是以下几项：<br />1. 缓存时间超过了cache标签设置的time或者duration属性规定的超时时间  <br />2. cron属性规定的时间比缓存信息的开始时间更晚  <br />3. 标签中缓存的内容在缓存后又被重新刷新过  <br />4. 其他缓存超期设定  </p>
		<p>
				<font color="#0066ff">JSP部分内容缓存－一个例子</font>
				<br />/*因为OSCache使用key值来标识缓存内容，使用相同的key值将会被认为使用相同的的缓存内容，所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容 */<br />&lt;cache:cache key="&lt;%= product.getId() %&gt;" time="1800" refresh="&lt;%= needRefresh %&gt;"&gt;<br /> /* JSP代码内容 或jsp tag*/<br /> &lt;% 代码%&gt; <br />&lt;/cache:cache&gt; </p>
		<p>
				<font color="#0066ff">CashFilter实现页面级缓存</font>
				<br />1、在OSCache组件中提供了一个CacheFilter用于实现页面级的缓存，主要用于对web应用中的某些动态页面进行缓存，尤其是那些需要生成pdf格式文件/报表、图片文件等的页面，不仅减少了数据库的交互、减少数据库服务器的压力，而且对于减少web服务器的性能消耗有很显著的效果。<br />2、这种功能的实现是通过在web.xml中进行配置来决定缓存哪一个或者一组页面，而且还可以设置缓存的相关属性，这种基于配置文件的实现方式对于J2EE来说应该是一种标准的实现方式了<br />3、<br />&lt;filter&gt;<br />&lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;filter-class&gt;com.opensymphony.oscache.web.filter.CacheFilter&lt;/filter-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;time&lt;/param-name&gt;<br />&lt;param-value&gt;60&lt;/param-value&gt;&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;scope&lt;/param-name&gt;<br />&lt;param-value&gt;session&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/filter&gt;</p>
		<p>&lt;filter-mapping&gt;<br />&lt;filter-name&gt;CacheFilter&lt;/filter-name&gt;<br />&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;</p>
<img src ="http://www.blogjava.net/iask/aggbug/122858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/iask/" target="_blank">城市劣人</a> 2007-06-08 14:58 <a href="http://www.blogjava.net/iask/archive/2007/06/08/122858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>