??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲最新在线,caoprom在线,99在线视频精品http://www.aygfsteel.com/lgplhk/zh-cnThu, 19 Jun 2025 00:17:14 GMTThu, 19 Jun 2025 00:17:14 GMT60怎样搞活BBShttp://www.aygfsteel.com/lgplhk/archive/2006/08/10/62760.html我的JAVA我的JAVAThu, 10 Aug 2006 03:46:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2006/08/10/62760.htmlhttp://www.aygfsteel.com/lgplhk/comments/62760.htmlhttp://www.aygfsteel.com/lgplhk/archive/2006/08/10/62760.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/62760.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/62760.html 提高|络新闻竞争力七个基本原?/b>

  在旧的“以传播者ؓ中心”的模式逐步被“以受众Z心”的新模式所代替的今天,|络媒体l受众提供了更多的选择信息的自由和方便Q这也ؓ|络~辑工作提出了挑战。因此,对网l新ȝ辑而言提供信息q不是最重要的,对信息做出有效的处理Q提高信息的服务质量才是竞争最有力的武器?br />
  互联|的不断普及Q网民开始更多地x一些深层次的新闅R在|络新闻大战中,竞争的焦Ҏ在悄然地发生转移Q“眼球信息”的初步阶段开始演l到“头脑信息”的深层ơ较量。提高网l新ȝ争力的主要部分体现在日常新闻质量、突发蘪动事件以及网站新L索,q是一个潜U默化的l合因素作用的结果?br />
规范~辑工作程(每天都要排专人发?

  制定~辑工作守则和编辑操作手册,让编辑以及相兛_工有规可依、有法可循。手册应该适应不断变化的竞争环境,应该对稿仉集的来源Q新ȝ件编辑的具体事项Q一天的工作程以及交接班时注意的事等{做出相应的规范。应该包括新d理的最基本和最新要求,对于各种情Ş的处理办法固定,各类基本规范和通报{等?br />
  建立ҎM实核准制度,在各个栏目徏立v对各自领域内对合作媒体群的评Cp,定新闻价值的判断原则以及实现Ҏ。还要不断查扑֏现自q短处q且及时对症下药Q进行有针对性的指导和培训,增强|络新闻的整体竞争力?br />
  建立H发事g预案(q_老出事的公司和h物都要盯紧点?,比如癑ֺ和DELL)

  长期以来Q突发性新M件以其蕴含的巨大新闻价D成为新L道中的一大重炏V新ȝ站在短时间内提升人气或者改善品牌的最好机会,当在重大H发事g的报道?br />
  在突发事件报道过E中Q需要在短时间内调动大量人力Q需要培M支专门应急的“特U兵”小分队。网l新d体应该徏立突发事仉案,建立高效率的快速反应机制。利用新M播速度、方式、广泛程度等斚w的优势一展n手?br />
  建立H发事g预案Q配|够的资源支持。按照紧急处理流E,电话通知值班ȝQƈq速发布快讯;应制定固定专题模版,在短旉内迅速做Z题报道。ؓ受众全面深入了解H发性新M件提供了一个开放性和多样性的途径?br />
抢抓新闻刉?什么倒闭啊亏损啊风投啊模式啊热门词都用上)

  |络新闻表现出来的娱乐化、^民化、媚俗化为现阶段消费时代的自然表现。“媚俗美学成为后传播时代的审风,即美学已渗透到了经、政沅R文化以及日常生zMQ因而׃其自L和Ҏ性”?br />
  鉴于受众在网l新d定w择上对于媚俗与׃元素的偏好,q求览率的|站Q需要一定比例的“Y新闻”。实际上Q对于成熟的品牌|站来说Q没有必要一呌合受众的q种“求软”心理。“硬新闻”永q是L媒体的标志性核心品,应该以“硬”ؓ主,“Y”只是一U佐料,只是气氛上的调剂?br />
  |络新闻~辑在“把关”过E中要防止新ȝ情化。心理学家研I成果表明,受众的本我是向“n乐”与“刺Ȁ”的Q他们喜好“新奇”“娱乐”的传播内容。网l传媒ؓ了在众多的媒体中脱颖而出Q就必需要注意受众的q一内在需求,通过满|民的阅d好,来获得支持?br />
技术创?扄序员做几个机器h,回帖,?狂顶)

  好的发布pȝ可以形成更快的发布速度、更丰富的表现Ş式,更快L专题l织以及更多的内容关联,而这些都是提升网站访问量的关键因素。同Ӟ利用好搜索引擎也是重要的一部分?br />
  新闻|站吸引受众Q提高网l新ȝ点击率,一是要依靠口碑{h际关pȝ传播Q二是要依靠|站搜烦的链接来实现。与搜烦引擎相结合后Q每一条新闻都可以看成是网站、频道的品牌营销通\。因为网友通过一个主题词的搜索,都可能进入网站的一条新闅R一个专题、一个栏目、一个频道。从q个意义上讲Q网l新ȝ生q程本n是构成自n品牌的营销q程?br />
加大专稿写作力度(该造谣的时候下手一定要?

  在众多的新闻|站中,真正吸引受众Q有长的发展,做出特色新闻是新ȝ站很重要的一个问题?br />
  |络新闻媒体h两个H出的特点:原创性与整合性。原创性的独家新闻报道是网l新ȝ特色。在现有资源情况下,要提升新ȝ站的知名度,原创的新L必不可少的。典型报道在我国一直是L媒媒体的优势和强V作为新ȝ重要l成部分Q典型宣传在唱响L律、引领积极健LL舆论斚w发挥着重要的作用。要深入学习理解Q先进典型宣传主题紧扣党的路线斚w政策。更要精心细致采访,寻觅独家视角Q典型宣传主题增强个性特艌Ӏ?br />
  同时Q还应做一些解释性报道、客观性报道等深度报道。保持新ȝ点的同时注意受众的现实情况,行文多考虑时新性、趣x、可L、思想性、h情味。这Ll才能有新的生命力和zd?br />
研究受众需求增Z动?要让别h发点广?灌些MM?

  互联|带来的不仅是一U新的传播方式,同时也对大众的生zM惯、工作方式、hD念以及思维方式产生了重大媄响。从传播学的发展历史来看Q受众与传播者的角色l历了多ơ的转变?br />
  作好|络新闻Q要分析受众的微观和宏观需求,Q理解网l新ȝ受众Q满_众的心理要求。在宏观上,以传播者ؓ中心Q编辑考虑的是战略目的——提高新ȝȝ{,|络~辑有新ȝ选择权,传播者是d的。在微观上,|络新闻的选择是以受众Z心,需要了解受众需要的信息和传播的方式?br />
  Ҏ受众心理特征Q网l编辑需要处理好|络新闻“Y”与“硬”,“新”与“旧”,“真”与“假”,“深”与“浅”,“长”与“短”的关系?br />
  ׃|络的开放性和跨空间性,使得受众体有一定的发言权。新M件发生之后,现场目击者、当事h可以通过论坛发布信息。广泛的信息来源使得受众在全面了解信息之后就能发表自q看法、就不同观点q行争论。交互功能可以通过嘉宾聊天、新ȝa、网上新闻调查、主题论坛等方式来实现?br />
面、栏目设?一定要方便匿名发帖!!q最最重要?)

  Ҏ|络受众Ҏd定wȝ跌性以及检索性,建立合理的链接系l、方便受众搜索。应该遵循视觉接触中心的原则Q注重版面“和谐、^衡、活泹{富有表现力”的色彩q行设计?br />
  |络新闻媒体的版面语a主要体现在新d|页的“空间位|“上。一般说来,处于|页左方和上方的信息强势较大Q因部分信息往往最先争得读者的“眼球”。这P受众能从阅读的顺序中体会到稿仉要与否。标题的字体大小、排列方式、色彩等手段也在|络新闻的表C得到应用?br />
  在旧的“以传播者ؓ中心”的模式逐步被“以受众Z心”的新模式所代替的今天,|络媒体l受众提供了更多的选择信息的自由和方便Q这也ؓ|络~辑工作提出了挑战。因此,对网l新ȝ辑而言提供信息q不是最重要的,对信息做出有效的处理Q提高信息的服务质量才是竞争最有力的武器?/span>

我的JAVA 2006-08-10 11:46 发表评论
]]>
最后一? l网http://www.aygfsteel.com/lgplhk/archive/2006/06/21/54377.html我的JAVA我的JAVAWed, 21 Jun 2006 15:32:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2006/06/21/54377.htmlhttp://www.aygfsteel.com/lgplhk/comments/54377.htmlhttp://www.aygfsteel.com/lgplhk/archive/2006/06/21/54377.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/54377.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/54377.htmlwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cnwww.cnmb.cn

我的JAVA 2006-06-21 23:32 发表评论
]]>
Webwork2+Spring+Hibernate体验http://www.aygfsteel.com/lgplhk/archive/2005/08/29/11416.html我的JAVA我的JAVAMon, 29 Aug 2005 03:03:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/29/11416.htmlhttp://www.aygfsteel.com/lgplhk/comments/11416.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/29/11416.html#Feedback2http://www.aygfsteel.com/lgplhk/comments/commentRss/11416.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/11416.html嘿嘿Q偶来介l下Webwork2l合Spring, HibernateQDefault认ؓ对Spring,Hibernate有一定了解?
从User说vQ包括创?修改/删除UserQ以及对User的列表,先看Webwork2的Action代码
为简单说明问题,不考虑什么Interceptor, Duplicated Submit, Validation,{问?

创徏/修改/删除User:UserAction.java相关代码

java代码: 

UserManager userManager;

public void setUserManager(UserManager) {
    this.userManager = userManager;
}

public String create() {
    userManager.create(getUser());
}

public String modify() {
    userManager.modify(modifyUser())
    return "success";
}

public String remove() {
    userManager.remove(getUser())
    return "success";
}



xwork.xml相关代码
java代码: 

<action name="user" class="com.caryo.user.actions.UserAction">
    <external-ref name="userManager">userManager</external-ref>
    <result name="success" type="dispatcher">user.jsp</result>
</action>



webwork action会自动接受页面上传过来的信息Q而且q支持JavaBean的BeanInfoQBeanInfo没用q,?
都是直接在action中完成获取属性,以及cd转换与校验的工作的)
Webwork2很方便的支持了Command模式Q允怸个Action拥有多个CommandQ对应的url调用
user!create.action, user!modify.action, user!remove.actionQ会对应的调用UserAction中的ҎQ?
然后ҎҎq回值去L对应的ViewQreturn "sucess" ׃forward到user.jsp?
其中的userManager是Spring中applicationContext中定义的bean

java代码: 

<bean id="userManager" class="com.caryo.user.DefaultUserManager">
    <property name="userDAO"><ref local="userDAO"/></property>
</bean>



对User的列?ListUserAction.java相关片断

java代码: 

UserManager userManager;

public void setUserManager(UserManager) {
    this.userManager = userManager;
}
// userManager的获取可攑֜一个User的根cd明,如AbstractUserActionQ这里重复ؓ了看得清楚些

public List getAllUsers() {
    userManager.getAllUsers();
}

public List getOnlineUsers() {
    userManager.getOnlineUsers();
}



xwork.xml相关代码
java代码: 

<action name="listuser" class="com.caryo.user.actions.ListUserAction">
    <external-ref name="userManager">userManager</external-ref>
    <result name="success" type="dispatcher">listuser.jsp</result>
</action>



q样对应的url是listuser.actionQ无command模式下会自动执行public String execute()q一ҎQ?
Default是一个返?success"的空ҎQ当然你也可以重写此ҎQ例如做校验{等?

listuser.jsp中用webwork taglib打出User列表的片?
java代码: 

<ww:iteraor value="allUsers">
userId: <ww:property value="id" />
userName: <ww:property value="name" />
</ww:iterator>

<ww:iteraor value="onlineUsers">
userId: <ww:property value="id" />
userName: <ww:property value="name" />
</ww:iterator>



webwork taglib功能比较强大Q其中还可用带参数的方法调用,而且在逻辑控制{方面都考虑的比较完?
详细参见 http://wiki.opensymphony.com/pages/viewpage.action?pageId=1876
只要设计合理Q基本上使用其taglib可以控制整个viewQ包括复杂的面。尽也支持Velocity, Freemarker{?
不过考虑到性能Q推荐还是用jsp view?
大型|站的UI层应该尽可能的薄QJSP不易l护Q我觉得taglib是可接受的厚度的上限了?

Spring+hibernate的部分跟dhj1版主的相q,http://forum.javaeye.com/viewtopic.php?t=7925
偶就不重复了。只说一些不同的地方
1. web.xml 可以使用listener来初始化基本信息而不是用servlet
2. 在Session in DAO中,用iteratorq回数据应该是不行的Q那么要获取countQ不是iterator.next()
也不是获取整个listQ然后list.size()Q而应是一个list.get(0);
3. 可将HQL攑ֈ对应的hbm.xml?
java代码: 

public class HibernateVehicleDAO extends CaryoHibernateObjectDAO implements VehicleDAO {
   
        Class vehicleClass;

        public Class getPersistentClass() {
                return vehicleClass != null ? vehicleClass : (vehicleClass = Vehicle.class);
        }
       
        public Vehicle getById(final long id) {
        return (Vehicle) getByClassId(id);
        }

        public List findAllGlobalVehicles() {
                return findNamedQuery("caryo.vehicle_findAllGlobalVehicles");
        }
}



vehicle.hbm.xml相关代码
java代码: 

<query name="caryo.vehicle_findAllGlobalVehicles"><![CDATA[
    from Vehicle vehicle
]]></query>


我的JAVA 2005-08-29 11:03 发表评论
]]>
hibernate+spring http://www.aygfsteel.com/lgplhk/archive/2005/08/26/11210.html我的JAVA我的JAVAFri, 26 Aug 2005 07:58:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/26/11210.htmlhttp://www.aygfsteel.com/lgplhk/comments/11210.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/26/11210.html#Feedback1http://www.aygfsteel.com/lgplhk/comments/commentRss/11210.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/11210.html本文是开发基于spring的web应用的入门文章,前端采用Struts MVC框架Q中间层采用springQ后台采用Hibernate?

  本文包含以下内容Q?BR>
   ·配置Hibernate和事?BR>
   ·装蝲Spring的applicationContext.xml文g

   ·建立业务层和DAO之间的依赖关p?BR>
   ·Spring应用到Struts?BR>
  ?/B>

  q个例子是徏立一个简单的web应用Q叫MyUsers,完成用户理操作Q包含简单的数据库增Q删Q查Q该即CRUDQ新建,讉KQ更斎ͼ删除Q操作。这是一个三层的web应用Q通过ActionQStrutsQ访问业务层Q业务层讉KDAO。图一要说明了该应用的Ml构。图上的数字说明了流E顺序-从webQUserActionQ到中间层(UserManagerQ,再到数据讉K层(UserDAOQ,然后结果返回?BR>
  Spring层的真正强大在于它的声明型事务处理,帮定和对持久层支持(例如Hiberate和iBATISQ?BR>
  以下下是完成q个例子的步骤:

  1Q?安装Eclipse插g

  2Q?数据库徏?BR>
  3Q?配置Hibernate和Spring

  4Q?建立Hibernate DAO接口的实现类

  5Q?q行试c,试DAO的CRUD操作

  6Q?创徏一个处理类Q声明事?BR>
  7Q?创徏web层的Action和model

  8Q?q行Action的测试类试CRUD操作

  9Q?创徏jsp文g通过览器进行CRUD操作

  10Q?通过览器校验jsp

  安装eclipse插g

  1Q?Hibernate插ghttp://www.binamics.com/hibernatesync

  2Q?Spring插ghttp://springframework.sourceforge.net/spring-ide/eclipse/updatesite/

  3Q?MyEclipse插g(破解?

  4Q?Tomcat插g. tanghan

  5Q?其他插g包括xmlQjspQ?BR>
  数据库徏?/FONT>


create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32));

  新徏目

  新徏一个web projectQ新建后的目录结构同时包含了新徏文g夹page用于放jsp文gQ和源文件夹test用于放junit试文g。同时将用到的包Q包括strutsQhibernateQspring都导入到lib目录下?BR>
  创徏持久层O/R mapping

  1Q?在src/com.jandar.model下用hibernate插g从数据库导出app_user?hbm.xml文g改名为User.hbm.xml

Q?xml version="1.0"?Q?BR>Q?DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" Q?BR>Qhibernate-mapping package="com.jandar.model"Q?BR>Qclass name="User" table="APP_USER"Q?BR> Qid
  column="ID"
  name="id"
  type="integer"
 Q?BR>
  Qgenerator class="assigned" /Q?BR>
 Q?idQ?BR>
 Qproperty
   column="LASTNAME"
   length="10"
   name="lastname"
   not-null="false"
   type="string"
 /Q?BR>
 Qproperty
   column="FIRSTNAME"
   length="10"
   name="firstname"
   not-null="true"
   type="string"
 /Q?BR>
Q?classQ?BR>Q?hibernate-mappingQ?

  2Q?通过hibernate synchronizer-Qsynchronizer file生成User.java文g,User对象对应于数据库中的app_user?BR>
  注:在eclipse下自动生成的对象文g不完全相同,相同的是每个对象文g必须实现Serializable接口Q必需又toString和hashCodeҎQ?BR>
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class BaseObject implements Serializable {
 public String toString() {
  return ToStringBuilder.reflectionToString(this,
  ToStringStyle.MULTI_LINE_STYLE);
 }

 public boolean equals(Object o) {
  return EqualsBuilder.reflectionEquals(this, o);
 }

 public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(this);
 }
}

public class User extends BaseObject {
 private Long id;
 private String firstName;
 private String lastName;

 /**
 * @return Returns the id.
 */

 public Long getId() {
  return id;
 }

 /**
  * @param id The id to set.
 */

 public void setId(Long id) {
  this.id = id;
 }

 /**
 * @return Returns the firstName.
 */

 public String getFirstName() {
  return firstName;
 }

 /**
  * @param firstName The firstName to set.
 */

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 /**
 * @return Returns the lastName.
 */

 public String getLastName() {
  return lastName;
 }

 /**
 * @param lastName The lastName to set.
 */

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
}
创徏DAO讉K对象

  1Q?在src/com.jandar.service.dao新徏IDAO.java接口Q所有的DAO都承该接口

package com.jandar.services.dao;

public interface IDAO {

}

  2Q?在src/com.jandar.service.dao下新建IUserDAO.java接口

public interface IUserDAO extends DAO {
 List getUsers();
 User getUser(Integer userid);
 void saveUser(User user);
 void removeUser(Integer id);
}

  该接口提供了讉K对象的方法,

  3Q?在src/com.jandar.service.dao.hibernate下新建UserDAOHiberante.java

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.jandar.model.User;
import com.jandar.service.dao.IUserDAO;

public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {

 private Log log=LogFactory.getLog(UserDaoHibernate.class);
 /* Q非 JavadocQ?BR> * @see com.jandar.dao.IUserDAO#getUsers()
 */

 public List getUsers() {
  return getHibernateTemplate().find("from User");
 }

 /* Q非 JavadocQ?BR> * @see com.jandar.dao.IUserDAO#getUser(java.lang.Long)
 */

 public User getUser(Integer id) {
  // TODO 自动生成Ҏ存根
  return (User) getHibernateTemplate().get(User.class,id);
 }

 /* Q非 JavadocQ?BR> * @see com.jandar.dao.IUserDAO#saveUser(com.jandar.model.User)
 */

 public void saveUser(User user) {
  log.debug("xxxxxxx");
  System.out.println("yyyy");
  getHibernateTemplate().saveOrUpdate(user);
  if(log.isDebugEnabled())
  {
   log.debug("userId set to "+user.getId());
  }
 }

 /* Q非 JavadocQ?BR> * @see com.jandar.dao.IUserDAO#removeUser(java.lang.Long)
 */

 public void removeUser(Integer id) {
  Object user=getHibernateTemplate().load(User.class,id);
  getHibernateTemplate().delete(user);
  if(log.isDebugEnabled()){
   log.debug("del user "+id);
  }
 }
}

  在这个类中实CIUserDAO接口的方法,q且l承了HibernateDAOSupportcR这个类的作用是通过hibernate讉K、操作对象,q而实现对数据库的操作?BR>

我的JAVA 2005-08-26 15:58 发表评论
]]>
spring+hibernate开发网?/title><link>http://www.aygfsteel.com/lgplhk/archive/2005/08/25/10966.html</link><dc:creator>我的JAVA</dc:creator><author>我的JAVA</author><pubDate>Wed, 24 Aug 2005 17:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/lgplhk/archive/2005/08/25/10966.html</guid><wfw:comment>http://www.aygfsteel.com/lgplhk/comments/10966.html</wfw:comment><comments>http://www.aygfsteel.com/lgplhk/archive/2005/08/25/10966.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lgplhk/comments/commentRss/10966.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lgplhk/services/trackbacks/10966.html</trackback:ping><description><![CDATA[<SPAN id=ArticleContent1_ArticleContent1_lblContent><span id="wmqeeuq" class=javascript id=text108445>spring+hibernate开发网?BR><BR><A class=ilink target=_blank><FONT color=#004080>http://www.xyzp.net</FONT></A> <A class=ilink target=_blank><FONT color=#004080>校园招聘一|打?/FONT></A><BR><BR>springQ一个轻量的j2ee框架Q轻量的,q几个字深q把我吸引住了。抱着《spring in action》啃了一个星期,了解之后,把自己所学的东西几乎通通用在了xyzp.netq个|站上,下面介绍一下:<BR><BR><A class=ilink target=_blank><FONT color=#004080>校园招聘一|打?/FONT></A> 提供专业的校园招聘信息。系l自动采集全国各大高校BBS和就业中心的招聘信息Q按照地区、学校进行组l分cR?BR><BR><A class=ilink target=_blank><FONT color=#004080>http://www.xyzp.net</FONT></A>|站分ؓ两个部分Q后台数据采集与前台展示?BR>1.后台数据采集Q利用htmlparser分析|页Q抽取我们所需的数据,以rss的结构进行存储?BR>2.前台展示Q利用springQhibernate开发。hibernate处理数据库逻辑Q逻辑层用springQ表C层应用spring本n的mvc。应用spring开发确实很方便Q速度快,效率高;Q,整个|站2周就搞完了。而且Q我不得不说Qspring太美了?BR><BR>hibernate处理数据库逻辑真是没的_整个|站一共就4张表Q大量一对多和多对多的逻辑Qhibernate处理的很好,主要是编E方面要处理的逻辑单了很多Q但是效率方面有一Ҏ~;Q?BR><BR>spring本n提供一套完整的mvcQ应用v来很方便Q功能也很强大,几乎用的到的面逻辑它都惛_了。推荐用?BR><BR>应用了xmlhttprequest技术,因ؓ首页调用数据库的ơ数太多Q所以每个栏目都用一个远E调用来解决的,速度很快Q不q有的ie昄q有一些问题;Q?BR><BR>虽然xmlhttprequest提升速度比较明显Q但Ҏ据库操作的次数ƈ没有减少Q引入缓存机制才能从Ҏ上解冻Ioscache是opensymphony的出品,它的面U缓存把整个|页~存下来Q速度提升自然很明显?BR><BR>整个|站没有使用tableQ全部用css搞定Q大家可以看一下?BR><BR>整个|站全部采用开源Y件构建,包括spring,hibernate,oscache,tomcat,mysql,eclipse,java commons.lucene{等?BR><BR>在开发中到不少问题Q字W集、链接池Qspring与hibernate集成{等Q对此有兴趣可以和我联系QQQQ?1231398<BR><BR>如果大家觉得q个|站q不错,h荐一下,谢谢Q)</SPAN></SPAN><img src ="http://www.aygfsteel.com/lgplhk/aggbug/10966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lgplhk/" target="_blank">我的JAVA</a> 2005-08-25 01:28 <a href="http://www.aygfsteel.com/lgplhk/archive/2005/08/25/10966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>史上最单的Hibernate入门?http://www.aygfsteel.com/lgplhk/archive/2005/08/24/10852.html我的JAVA我的JAVATue, 23 Aug 2005 17:58:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/24/10852.htmlhttp://www.aygfsteel.com/lgplhk/comments/10852.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/24/10852.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/10852.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/10852.html
在这文章将不涉及Eclipse, log4j, Struts, Tomcat, XDocletQ和JBoss。本文的目的是演CZ下Hibernate的安装过E以及最基本的功能,从而给初学者一个低得不能再低的入门门槛?BR>

下蝲文g

你需要Java SDK?Hibernate包、Ant包、和JDBC Driver?BR>
1、Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

2、Ant包下载地址:
http://apache.130th.net/ant/binaries/apache-ant-1.6.1-bin.zip

3、JDBC Driver要根据你用的database来定Q一般database官方|站上都会有。Hibernate支持常用的databaseQ比?MySQL, Oracle, PostgreSQL, 和MS-SQL Server。这些数据库都有JDBC Driver:

Oracle JDBC Driver下蝲地址(下蝲前必d意Oracle协议?
http://otn.oracle.com/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html

MySQL JDBC Driver下蝲地址
http://dev.mysql.com/downloads/connector/j/3.0.html

PostgreSQL JDBC Driver下蝲地址
http://jdbc.postgresql.org/download.html

MS-SQL Server JDBC Driver下蝲地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&displaylang=en

4、将Hibernate包和Ant包分别解压至c:\dev\?此目录不重要Q你可以换其它Q何目??BR>

配置环境

1、你需要添加一个新的环境变? ANT_HOMEQ让它指向c:\dev\<你的ANT包所在目?gt;。ƈ在PATH环境变量里添?ANT_HOME%\bin?BR>
2、你需要添加一个新的环境变? JAVA_HOMEQ让它指向你的j2sdk根目录。ƈ在PATH环境变量里添?JAVA_HOME%\bin?BR>
3、创Z个项目目录,比如c:\workspace\My1stHibernate?BR>
在项目目录下Q另外创Z个目? src, classes, lib?BR>
在lib目录下,创徏两个目录: hibernate和db?BR>
q样你有了如下的文gl构:

c:\workspace\My1stHibernate\
c:\workspace\My1stHibernate\src
c:\workspace\My1stHibernate\classes
c:\workspace\My1stHibernate\lib
c:\workspace\My1stHibernate\lib\hibernate
c:\workspace\My1stHibernate\lib\db

4、将c:\dev\<你的Hibernate包所在目?gt;\hibernate2.jar文gcopy到c:\workspace\My1stHibernate\lib\hibernate下?BR>
c:\dev\<你的Hibernate包所在目?gt;\lib\下的所有文件同样copy到c:\workspace\My1stHibernate\lib\hibernate下?BR>
你的JDBC Driver文g(一般是一个jar文g)copy到c:\workspace\My1stHibernate\lib\db下?BR>

创徏数据?/B>

1、用你最喜爱的database软gQ创Z个hibernate_test的数据库?BR>
2、在此数据库下,新徏一个table名ؓCUSTOMER

CREATE TABLE CUSTOMER
(
    CID INTEGER NOT NULL PRIMARY KEY,
    USERNAME VARCHAR(12) NOT NULL,
    PASSWORD VARCHAR(12)
);


~写Java文g

public class Customer {
   
    private int id;
    private String username;
    private String password;


    public int getId() {
        return id;
    }

    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

此cd为c:\workspace\My1stHibernate\src\Customer.java文g?BR>
~写Testc?BR>
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class Test {

    public static void main(String[] args) {

        try {
            SessionFactory sf =
                new Configuration().configure().buildSessionFactory();
            Session session = sf.openSession();
            Transaction tx = session.beginTransaction();

            for (int i = 0; i < 200; i++) {
                Customer customer = new Customer();
                customer.setUsername("customer" + i);
                customer.setPassword("customer");
                session.save(customer);
            }

            tx.commit();
            session.close();

        } catch (HibernateException e) {
            e.printStackTrace();
        }
    }
}

此cd为c:\workspace\My1stHibernate\src\Test.java文g?BR>

创徏Hibernate映射文g

因ؓq里只有一个Class --- Customer 和一个Table --- CUSTOMERQ你只需要徏立一个映文?-- Customer.hbm.xmlQ来对应CustomercdCUSTOMER表之间的关系?BR>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="Customer" table="CUSTOMER">
        <id name="id" column="CID">
            <generator class="increment" />
        </id>
        <property name="username" column="USERNAME" />
        <property name="password" column="PASSWORD" />
    </class>
</hibernate-mapping>

把此文g存ؓc:\workspace\My1stHibernate\src\Customer.hbm.xmlQ和Customer.java攑֜同一目录下?BR>

~写Ant build.xml文g


你不一定要知道q个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是ؓ了简化一些Q务,比如: ~译、copy、运行,{?BR>
<?xml version="1.0" ?>

<project name="My1stHibernate" default="build" basedir=".">

    <property name="base.dir" value="." />
    <property name="src.dir" value="src" />
    <property name="lib.dir" value="lib" />
    <property name="build.dir" value="classes" />

    <path id="myclasspath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
        <pathelement location="${build.dir}" />
    </path>

    <target name="init">
        <mkdir dir="${build.dir}" />
    </target>
   
    <target name="build" depends="init" description="compile the source files">
        <javac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" />
        <copy todir="${build.dir}" >
            <fileset dir="${src.dir}" >
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

    <target name="run" depends="build">
        <java classpathref="myclasspath" classname="Test" fork="true" />
    </target>

    <target name="clean">
        <delete includeEmptyDirs="true">
            <fileset dir="${build.dir}" />
        </delete>
    </target>

</project>


配置Hibernate描述文g

Hibernate描述文g可以是一个properties或xml 文gQ其中最重要的是定义数据库的q接。我q里列出的是一个XML格式的hibernate.cfg.xml描述文g?BR>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>
   
    <session-factory name="java:/hibernate/HibernateFactory">
       
        <property name="show_sql">true</property>
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver <!-- q里是Oracle 9i的JDBC driver class?-->
        </property>
        <property name="connection.url">
            jdbc:oracle:oci8:@hibernate_test <!-- q里是Oracle的hibernate_test数据库URL -->
        </property>
        <property name="connection.username">
            你的数据库用户名
        </property>
        <property name="connection.password">
            你的数据库密?BR>        </property>
        <property name="dialect">
            net.sf.hibernate.dialect.Oracle9Dialect <!-- q里是Oracle 9i的Dialect -->
        </property>
       
        <mapping resource="Customer.hbm.xml" /> <!-- 指定Customer的映文?-->
       
    </session-factory>
   
</hibernate-configuration>

如果你用的不是Oracle 9iQ可到C:\dev\<你的Hibernate包所在目?gt;\src\hibernate.properties文g里找C的数据库Q然后替换以上相对应的倹{?BR>

开始运?/B>

到c:\workspace\My1stHibernate下,q行ant run。如果你严格依照以上步骤Q应该看?BR>
run:
        [java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
        [java] log4j:WARN Please initialize the log4j system properly.
        [java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
BUILD SUCCESSFUL

C的hibernate_test数据库看一下,在CUSTMOR表里新添?00条记录,但你没有写Q何JDBC code?BR>以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文g里相应的值即可?BR>

l论

此文是一门槛极低的入门介绍。我l一个完全不懂Hibernate的朋友看Q他用了不到30分钟p行了他的W一个HibernateE序Q从此引起了 他对Hibernate的兴。但读者必认识到q只是一个开始,此文实乃HHibernate冰山一角上的一颗小冰晶。千里之行始于下,你可以把此文 当作q向Hibernate大道的一个v炏V?BR>

我的JAVA 2005-08-24 01:58 发表评论
]]>
Hibernate快速入?http://www.aygfsteel.com/lgplhk/archive/2005/08/24/10851.html我的JAVA我的JAVATue, 23 Aug 2005 17:56:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/24/10851.htmlhttp://www.aygfsteel.com/lgplhk/comments/10851.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/24/10851.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/10851.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/10851.html  介绍

  面向对象的开发方法是当今的主,但是同时我们不得不用关pd数据库,所以在企业U应用开发的环境中,对象、关pȝ映射QORMQ是一U耗时的工作。围l对象关pȝ映射和持久数据的讉KQ在Java领域中发展v来了一些API和框Ӟ下面分别单介l?

  JDBC可以说是讉K持久数据层最原始、最直接的方法。在企业U应用开发中Q我们可能用DAOQData Access ObjectQ模式来把数据访问封装v来,然后在其它的层中同一调用。这U方式的优点是运行效率最高,~点是把DAO对象和SQL语言紧密耦合在一起得在大项目中难以l护。但是不怎么_使用JDBC来直接访问持久数据层是当今企业应用开发中使用最q泛的?

  实体Bean是J2EEq_中用来表C和讉K持久数据的方式。虽然实体Bean是一U方便快LҎQ但是在q行时我们需要额外购买EJB容器Q当Ӟ如今也有免费的EJB容器Q如JBOSSQ,q且使用不同的应用服务器Q需要重C写不同的部v描述Q得在不同应用服务器下UL企业U应用会带来一些困难?

  另外Q在Java领域中,q有一些表C持久数据的框架Q比如JDO和OJBQ在q里׃详细介绍了?

  Hibernate是一U新的ORM映射工具Q它不仅提供了从Javacd数据表之间的映射Q也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库Q用HibernateQ可以大大减操作数据库的工作量?

  Hibernate可以和多UWeb服务器或者应用服务器良好集成Q如今已l支持几乎所有的行的数据库服务器(?6U)?

  下面我们来介l怎么l合Hibernate2.0和Apache Tomcat5.0在Web应用中用Hibernate?/P>

  配置

  1、下载安装TomcatQƈ且下载Hibernate的运行环境(主要包含一些JAR包)?
  2、把要用的数据库的JDBC驱动E序拯?TOMCAT_HOME%\common\lib目录下。笔者用的是MYSQLQ对应的驱动E序的JAR包ؓmm.mysql-2.0.4-bin.jar?
  3、在Tomcat的Webapps目录下新Z个Web应用Q名字ؓhibernate?
  4、把Hibernate提供的hibernate2.jar和一些第三方的运行库拯到hibernate\WEB\INF\lib目录下。(q些W三方的q行库包含在下蝲的Hibernate lib目录下)
  5、在%TOMCAT_HOME%\conf\server.xml中Web应用和数据源。在server.xml中加入以下的配置描述?/P>

  例程1 配置web应用

 <Context path="/hibernate" docBase="hibernate" debug="0"   reloadable="true" crossContext="true">
  <Resource name="jdbc/hibernate" auth="Container" type="javax.sql.DataSource"/>  
     <ResourceParams name="jdbc/hibernate"> 
      <parameter>  
          <name>factory</name>  
       <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>  
      </parameter>
      <parameter>  
         <name>driverClassName</name>  
            <value>org.gjt.mm.mysql.Driver</value>  
       </parameter> 
        <parameter> 
              <name>url</name>  
              <value>jdbc:mysql:///test</value>  
         </parameter>  
       <parameter> 
            <name>username</name> 
           <value>root</value> 
       </parameter>  
      <parameter> 
         <name>password</name>  
         <value></value> 
          </parameter>  
      <parameter> 
      <name>maxActive</name> 
      <value>20</value> 
    </parameter>
         <parameter>  
        <name>maxIdle</name>  
           <value>10</value>
    </parameter> 
    <parameter> 
          <name>maxWait</name> 
      <value>-1</value> 
    </parameter>  
  </ResourceParams>  
 </Context>

  在这里,配置了一个名为hibernate的Web应用Qƈ且配|了一个数据源Q数据源的JNDI名称为jdbc/hibernate。您需要根据情况修Ҏ据源的链接属性?

  6、下一步就是书写Hibernate的配|描q符。可以用XML的配|描qͼ也可以用基于属性的配置描述。在q里使用ZXML的配|描q。在hibernate\WEB-INF\classes目录下新Z个hibernate.cfg.xml文g。然后加入例E?所C的内容?

<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">java:comp/env/jdbc/hibernate</property>
        <property name="show_sql">false</property>
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!-- Mapping files -->
    </session-factory>
</hibernate-configuration>

  注意connection.datasource属性必dserver.xml中配|的数据源的属性一栗如果不是用MYSQLQ那么需要更改dialect属性?

  到现在,配置基本完成Q下面我们来开发一个最单的应用?

  开发持久对象、编写映描q?/STRONG>

  我们使用hibernate来封装一个简单的数据表。这个表的名字ؓCoursesQ它有两个字D,一个是IDQ它是Courses表的主键Q另一个是nameQ表CCourses的名字。在数据库中使用以下的脚本来创徏q个表:

  create table Courses(CourseId varchar(32) not null, name varchar(32), constraint pk_Courses primary key (CourseId) );

  接下来的d是为Courses表书写持久对象,如例E?所C?

  例程3 Courses的持久对象(Courses.javaQ?/P>

package com.hellking.study.hibernate;

import java.util.Set;

/**
 *在hibernate中代表了Course表的cR?BR> */
public class Course
{
   /**每个属性和表的一个字D对?*/
   private String id;
   private String name;
  
   /**students表示course中的学生Q在后面才会用到Q暂时不?*/
   private Set students;
    
    /**属性的讉KҎ**/
 public void setId(String string) {
  id = string;
 }
 
 public String getId() {
  return id;
 }
 
 public void setName(String name)
 {
  this.name=name;
 }
 public String getName()
 {
  return this.name;
 }
 public void setStudents(Set stud)
 {
  this.students=stud;
 }
 public Set getStudents()
 {
  return this.students;
 }
}

  可以看出Q在CoursecM也包含了两个属性,id和nameQ它的属性和表Courses的字D|一一对应的,q且cd一致?

  书写好了持久对象Q接下来的Q务就是书写对象、关pL描q。在hibernate\WEB-INF\classes目录下新Z个Course.hbm.xml描述文gQ内容如例程4所C?

  例程4 Course.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class
        name="com.hellking.study.hibernate.Course"
        table="Courses"
        dynamic-update="false"
    >

        <id
            name="id"
            column="CourseId"
            type="string"
            unsaved-value="any"
        >
            <generator class="assigned"/>
        </id>

        <property
            name="name"
            type="string"
            update="true"
            insert="true"
            column="Name"
        />     
    </class>
</hibernate-mapping>

  在Course.hbm.xml映射文g中,指定了要映射的类和映的表,q且指定了表的各个字D和Java对象中各个字D늚映射关系Q比如Course对象中的id属性对应了Courses表的courseId字段?

  接下来的d是在hibernate.cfg.xml中指定这个映关pR如下所C:

<session-factory>
?BR><!-- Mapping files --> 
 <mapping resource="Course.hbm.xml"/>
</session-factory>

  ~写业务逻辑

  到此Q我们已l封装了一个名为Courses的表Qƈ且配|完成。接下来的Q务就是在Web应用开发中使用它们Qؓ了演C在Hibernate中对数据库的不同cd的操作,我们开发的Web应用有以下的功能Q?
  增加一个CourseQ?
  删除一个CourseQ?
  按照Course的名字进行模p搜索;
  查看pȝ中所有的Course?

  虽然我们可以直接在JSP中用hibernateQ但是往往我们不这P而是把这些业务逻辑装在JavaBean中,然后在JSP中通过调用JavaBean以访问Hibernate装的对象?

  ׃讉K通过使用hibernate有一些共性的操作Q在q里我们把这些共性的操作装在一个专门的cMQ这样其它的cd以承它Q如例程5所C?

  例程5 HibernateBase.java

package com.hellking.study.hibernate;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
import java.util.*;
import java.io.IOException;
import java.io.PrintWriter;

public abstract class HibernateBase
{
 protected SessionFactory sessionFactory;//会话工厂Q用于创Z?BR>    protected Session session;//hibernate会话
    protected Transaction transaction; //hiberante事务
   
    public HibernateBase()throws HibernateException
    {
     this.initHibernate();
    }
    // 帮助Ҏ
    protected void initHibernate()
        throws HibernateException {

        // 装蝲配置Q构造SessionFactory对象
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }
   
    /**
     *开始一个hibernate事务
     */
    protected void beginTransaction()
        throws HibernateException {

        session = sessionFactory.openSession();
        transaction = session.beginTransaction();
    }
   
    /**
     *l束一个hibernate事务?BR>     */
    protected void endTransaction(boolean commit)
        throws HibernateException {

        if (commit) {
            transaction.commit();
        } else {
           //如果是只ȝ操作Q不需要commitq个事务?BR>            transaction.rollback();
        }
         session.close();
    }
}

  下面~写业务逻辑c,新徏一个名为CourseBean的JavaBeanQƈ且CourseBeanl承HibernateBasec,代码如例E?所C?

  例程6 CourseBean.java

package com.hellking.study.hibernate;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
import java.util.*;

/**
 *和course相关的业务逻辑
 */
public class CourseBean extends HibernateBase
{
 public CourseBean()throws HibernateException
 {
  super();
 }
 /**
  *增加一个Course
  */
 public void addCourse(Course st)throws HibernateException
 {
  beginTransaction();
         session.save(st);        
         endTransaction(true);
    }
   
    /**
     *查询pȝ中所有的CourseQ返回的是包含有Course持久对象的Iterator?BR>     */
    public Iterator getAllCourses()throws HibernateException
    {
      String queryString = "select courses from Course as courses";
        beginTransaction();
        Query query = session.createQuery(queryString);
        Iterator it= query.iterate();
        return it;
    }
   
    /**
     *删除l定ID的course
     */
    public void deleteCourse(String id)throws HibernateException
    {
      beginTransaction();     
      Course course=(Course)session.load(Course.class,id);     
      session.delete(course);
      endTransaction(true);
     }
   
    /**
     *按course的名字进行模p查找,q回的是包含有Course持久对象的Iterator?BR>     */
    public Iterator getSomeCourse(String name)throws HibernateException
    {
       String queryString = "select c from Course as c where c.name like :name" ;
         beginTransaction();
         Query query = session.createQuery(queryString);
         query.setString("name", "%"+name+"%");
        Iterator it= query.iterate();
        return it;
    }     
}

  在CourseBean装?个业务方法,你可以根据情况增加其它的业务Ҏ。在CourseBean中,通过Hibernate来操作潜在的数据库资源?

  要保存Course数据到数据库Q可以通过Q?/P>

  session.save(Course);

  Ҏ来保存,它相当于使用在JDBC中执行以下语句:

  Connection con=?BR>  Statement stmt=con.createStatement();
  stmt.executeUpdate("insert into courses values('"+course.getId(),+"','"+course.getName()+"')");
  con.close();

  可以看出Q通过使用HibernateQ可以大大减数据访问的复杂度?

  在JSP中调用业务逻辑

  d数据

  CourseBeanq个业务对象装了和Hibernate的交互关p,从而JSP和Hibernate关系的解藕。我们来看测试主面的部分代码,如例E?所C?

  例程7 试Hibernate开发的应用Qcourse.jspQ?/P>

<%@ page import="java.sql.*,java.util.*" errorPage="error.jsp"%>
<jsp:useBean id="course" class="com.hellking.study.hibernate.Course" scope="page">
<jsp:setProperty name="course" property="*"/>
</jsp:useBean>
<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>
<html><body><center>
<% 
  try
  {
  if(course.getId().equals(null)||course.getId().equals(""));
  else courseBusiness.addCourse(course);
 
  %>
成功d了CourseQ?lt;br>
nameQ?lt;%=course.getName()%>
Id:<%=course.getId()%>
<%
}
  catch(Exception e)
  {
  } 
%>

<hr>
<br>::增加一个course::<br>
<form action="course.jsp" method="get" name="add">
id:<input type=text name="id"><br>
name:<input type=text name="name"><br>
<input type=submit value="submit"><br>
</form>
<hr>
::按名字模p查?:<br>
<form action="queryCourse.jsp" method="get" name="queryByName">
name:<input type=text name="name"><br>
<input type=submit value="query"><br>
</form>
<hr>
::删除一个Course::<br>
<form action="deleteCourse.jsp" method="get" name="queryByName">
id:<input type=text name="id"><br>
<input type=submit value="delete"><br>
</form>
<hr>
<a href=viewAll.jsp>::查看所有Course::<a>
</body>
</html>

  首先通过一个值对象CourseQ这个类正好是Hibernate使用的持久对象,q里作ؓ值对象来传递数据)接收获得的参敎ͼ然后CourseBean的addCourse(Course)Ҏ把数据保存到数据库。可以看出,通过使用HibernateQ把数据从表单中d到数据库非常单?

  查询

  下面来看模糊查找的JSP代码Q如例程8所C?/P>

  例程8 按名字模p查找Course

<%@ page import="java.sql.*,java.util.*,com.hellking.study.hibernate.Course" errorPage="error.jsp"%>
<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>
?BR><% try
{
   Iterator it=courseBusiness.getSomeCourse((String)request.getParameter("name"));
   while(it.hasNext())
   {
     Course temp=(Course)it.next();
     out.println("<tr><td>"+temp.getId()+"</td>");
     out.println("<td>"+temp.getName()+"</td></tr>");
   }
  }
  catch(Exception e)
  {
    out.println(e.getMessage());
   }
%>
?

  它实际上调用的是CourseBean的Iterator getSomeCourse(String name)Ҏ。我们来回顾一下这个方法中的代码:

  /**
     *按course的名字进行模p查?BR>     */
    public Iterator getSomeCourse(String name)throws HibernateException
    {
       String queryString = "select c from Course as c where c.name like :name" ;
        beginTransaction();
        Query query = session.createQuery(queryString);
         query.setString("name", "%"+name+"%");
        Iterator it= query.iterate();
        return it;
    }

  在查询前Q首先调用beginTransactionҎ启动新的Hibernate事务Q然后创Z个Query对象Q在创徏q个对象Ӟ同时指定查询的语句?

  注意Q在查询语句Q?/P>

  select c from Course as c where c.name like :name"

  中,它虽然和普通的SQL语句怼Q但是不同,在数据库中,使用的表的名字是CoursesQ而在q个查询语句中用的是CourseQ它和持久对象的名字一_也就是说Q这个查询的概念是查询持久对象,而不是数据库的记录?

  创徏了查询对象Query后,需要设|查询的参数Q它和在JDBC中PreparedStatement对象中设|参数的Ҏ怼。通过"Iterator it= query.iterate()"语句来执行查询,q且q回一个Iterator对象。在q里使用了Hibernate提供的查询机Ӟ一般的JDBC查询q回的是ResultSet对象Q而这里返回的是包含了CourseBean对象的Iterator?

  要查询系l中所有的CourseQ也同样非常单,可以通过例程9所C的代码实现?

  例程9 查询数据库中所有的Course

?BR><jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>
?BR><% try
{
   Iterator it=courseBusiness.getAllCourses();
   while(it.hasNext())
   {
     Course temp=(Course)it.next();
     out.println("<tr><td>"+temp.getId()+"</td>");
     out.println("<td>"+temp.getName()+"</td></tr>");
   }
  }
  catch(Exception e)
  {
    out.println(e.getMessage());
   }
%>
?/P>

  实际上调用的是CourseBean的getAllCoursesҎQ它和getSomeCourseҎ机制一P׃再介l了?

  删除数据

  在JSP中,使用以下的代码来执行删除操作?/P>

  例程10 删除数据库中Courses表的记录

<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>
?BR>删除id为:<%=request.getParameter("id")%>的courseQ?::<br>

<% try
{
 courseBusiness.deleteCourse(request.getParameter("id"));
 out.println("删除成功");
}
  catch(Exception e)
  {
    out.println("不存在这个记?);
   }
%>

  我们来看CourseBean中执行删除操作的具体代码Q?/P>

  /**
     *删除l定ID的course
     */
    public void deleteCourse(String id)throws HibernateException
    {
     beginTransaction();     
     Course course=(Course)session.load(Course.class,id);     
     session.delete(course);
     endTransaction(true);
     }

  在这个方法中Q首先开始一个事务,然后通过session.load(Course.class,id)Ҏ来装载指定ID的持久对象,接下来通过"session.delete(course)"来删除已l装载的courseQƈ且结束Hibernate事务?

  ȝ

  下面ȝ一下用Hibernate的开发过E:

  1、配|HibernateQ一ơ即可)Q?BR>  2、确定数据表Q?
  3、创建持久对象;
  4、编写对象和数据表的映射描述Q?
  5、编写和业务逻辑?

  实际上,上面的过E和使用EJB没有什么区别:在用EJBӞ首先当然也是配置环境Q初始化数据表;然后创徏实体BeanQ对象于Hibernate的持久对象)Q接下来~写部v描述W(ejb-jar.xmlQ厂商专有的部v描述Q,在这些部|描q符里,指定了EJB和数据表的映关p,如果多个实体Bean存在兌关系Q需要描q它们之间的关系Q这些描q对应于Hibernate中持久对象的描述Q如Course.hbm.xmlQ往往我们q不在应用程序中直接操作实体BeanQ而是通过业务对象Q如会话BeanQ来操作Q这里的会话Bean可以单的和Hibernate中执行业务逻辑的JavaBean对应。这里只是简单的cLQ不是绝对的Q比如我们同样可以在会话Bean中访问Hibernate持久对象Q也是说用HibernateQ同样可以把业务逻辑攑֜会话Bean中?

  通过本文的学习,怿读者对Hibernate已经有了初步的认识,q且能够使用Hibernate开发简单的应用。在下一中Q我们将学习怎么使用Hibernate来ؓ复杂的数据表q行映射Qƈ且维护它们之间的关系?/P>

我的JAVA 2005-08-24 01:56 发表评论
]]>
jsp+tomcat+mysql&sevlet&javabean配置全过E? 选择?xyw1026 ?Blog http://www.aygfsteel.com/lgplhk/archive/2005/08/18/10388.html我的JAVA我的JAVAWed, 17 Aug 2005 17:29:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/18/10388.htmlhttp://www.aygfsteel.com/lgplhk/comments/10388.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/18/10388.html#Feedback3http://www.aygfsteel.com/lgplhk/comments/commentRss/10388.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/10388.html 

在配|jsp开发环境的q程中会到不少问题Q感谢网上的许多前辈的经验ȝQ作者cl41的JSPq接Mysql数据库攻略和作者Saulzy的MySQL学习W记{文章对我来说简直是雪中送碳Qؓ了帮助象我一L初学者在此ȝ了不作者的l验Q非常感谢他们的无私奉献_Q也希望更多的h把这U精发扬光大,呵呵Q再ơ对所参考文章的作者表C最崇高的敬意!
以下软g下蝲q接地址无法昄的话Q请直接到官方网站下载即可!
 
软g下蝲
Mysql
下蝲版本Qmysql-4.1.13-win32.zip(Windows downloads)
http://dev.mysql.com/downloads/mysql/4.1.html

JDBC驱动
下蝲版本Qmysql-connector-java-3.1.10.zip
http://dev.mysql.com/downloads/connector/j/3.1.html

下蝲j2sdk
下蝲版本Qjdk-1_5_0_04-windows-i586-p.exe
http://java.sun.com/j2se/1.5.0/download.jsp

下蝲tomcat
下蝲版本: jakarta-tomcat-5.5.9.exe
http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi

安装,配置j2sdkQ?/P>

执行j2sdk安装E序Q按默认讄q行安装Q也可自定义路径Q但需修改下面的配|?/P>

配置j2sdk:

配置环境变量:

我的电脑->属?>高->环境变量->pȝ变量中添加以下环境变量:
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_04
CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
path=%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

写一个简单的javaE序来测试J2SDK是否已安装成功:
public class hello
{
 public static void main(String args[])
 {
 System.out.println("Hello");
 }
}

程序保存ؓ文g名ؓhello.java的文件?

打开命o提示W窗口,q入到hello.java所在目录,键入下面的命?
javac hello.java
java hello
此时若打印出来hello则安装成功,若没有打印出q句话,仔细查以上配|是否正?BR>注意pȝ文g多w项中应定“隐藏已知文件类型的扩展名”不N(我的电脑—工具—查看)

安装,配置tomcat
执行tomcat安装E序Q按默认讄q行安装Q也可自定义路径Q但需修改下面的配|?/P>

我的电脑->属?>高->环境变量->pȝ变量中添加以下环境变?BR>CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat 5.5
CATALINA_BASE=C:\Program Files\Apache Software Foundation\Tomcat 5.5

修改环境变量中的classpathQ把tomat安装目录下的common\lib下的servlet-api.jard到classpath中去Q?BR>修改后的classpath如下Q?
classpath=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;

启动tomcatQ在IE中访?A href="http://localhost:8080/">http://localhost:8080Q若看到tomcat的欢q页面的话说明安装成功?/P>

安装mysql
解压~mysql-4.1.13-win32.zipQ运行setup.exe
首先出现的是安装向导Ƣ迎界面,直接点击“Next?BR>l箋Q选择安装cd,选择“自定义”custom安装Q然后点“Next”下一步,出现自定义安装界?BR>选择安装路径QC:\MySQL Server 4.1(可自定义)
点“OK”返回到自定义安装界面,路径已改|的路径
点“Next”,准备开始安?BR>点“Install”开始安?BR>完成后出现创建MySQL.com帐号的界?BR>如果是首ơ用MySQLQ选“Create anew free MySQL.com accout?BR>点“Next”,输入你的Email地址和自p定的用于dMySQL.com的密?BR>填完后点“Next”进入第二步
填写姓名{相关信息,填完点“Next”,q入W三?BR>填完电话L、公司名U等信息后,点“Next”,
然后出现预览你刚才填的信息的界面Q点“Next”出现安装完成界?BR>注意Q这里有个配|向导的选项QConfigure the MySQL Server nowQ,
N立即配|你的MySQL。许多说安装完MySQL后无法启动,原因在于没有配|MySQL?BR>点击“Finish”完成安装,q开始配|MySQL
点“Next”,q入配置cd选择面。选“Detailed configuration?详细配置)
点“Next”,q入服务cd选择面。选“Developer Machine”(开发者机器)Q这样占用系l的资源不会很多
点“Next”后Q进入数据库用法选择面。选择“Multifunctional Database?BR>点“Next”,q入选择InnoDB数据存放位置面
不用更改讄Q直接放在Installation Path安装目录里即可,然后点“Next”,选择MySQL的同时联接数
选择“Manual Setting”,讄?00(Ҏ自己需要,酌情讄)
点“Next”,配置MySQL在TCP/IP通讯环境中的端口选择默认?306端口卛_?BR>点“Next”,选择MySQL中的字符讄
注意Q这里的选择会影响你是否能在MySQL中用中文。选择gb2312字符集以便支持简体中?BR>点“Next”,讄Windows服务选项
注意Q这里的选择很关键?BR>“Install As Windows Service”一定要N,q是MySQL作ؓWindows的服务运行?BR>“Service Name”就用默认的“MySQL?BR>下面的“Launch the MySQL Server automatically”一定要N,q样Windows启动ӞMySQL׃自动启动服务Q要不然p手工启动MySQL?BR>许多安装MySQL后无法启动、无法连接、出?0061错误Q原因就在这里?BR>点“Next”,讄根帐号root的登录密?BR>“Modify Security Settings”是讄根帐L密码Q输入你讑֮的密码即可?BR>“Create An Anonymous Account”是创徏一个匿名帐Pq样会导致未l授权的用户非法讉K你的数据库,有安全隐患,不要N?BR>点“Next”,MySQL配置向导依据你上面的所有设定配|MySQLQ以便MySQL的运行符合你的需?BR>点“Execute”开始配|,当出现“Service started successfully”时Q说明你的配|完成,MySQL服务启动成功
点“Finish”完成,整个MySQL的配|完成,剩下的就是用MySQL客户端连接MySQL服务器,然后使用了?/P>


安装JDBC驱动Q?BR>解压~mysql-connector-java-3.1.10.zip
要使用的是mysql-connector-java-3.1.10-bin-g.jar和mysql-connector-java-3.1.10-bin.jar

配置
在C:\Program Files\Java目录下徏立mysqlforjdbc子目录,q入该目录将mysql-connector-java-3.1.10-bin.jar到该目录?BR>q入C:\Program Files\Java\jdk1.5.0_04\lib目录mysql-connector-java-3.1.10-bin-g.jar拯到该目录?BR>然后配置classpathQ追?JAVA_HOME%\lib\mysql-connector-java-3.1.10-bin-g.jar;C:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.10-bin.jar;到该环境变量中去
q加以后环境变量如下Q?BR>CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib\servlet-api.jar;%JAVA_HOME%\lib\mysql-connector-java-3.1.10-bin-g.jar;C:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.10-bin.jar;
配置q个的目的是让java应用E序扑ֈq接mysql的驱动.


查看q启动MySQL服务
在Windows XP下安装完MySQL后,它就已经自动启动服务了,q且在开始菜单中有其客户端的快捷方式q接
可以通过Windows的服务管理器查看。“开始”-“运行”,输入“services.msc”,回R?BR>弹出Windows的服务管理器Q然后就可以看见服务名ؓ“mysql”的服务了Q其双标明“已启动?BR>在开始菜?所有程?MySQL-MySQL Server 4.1-MySQL Command Line Client用客L的快h式连?BR>输入安装是设|的密码卛_


数据库的使用

Mysql安装完毕以后Q在开始菜?所有程?MySQL-MySQL Server 4.1-MySQL Command Line Client用客L的快h式连?BR>输入安装时设|的密码

使用mysql的基本命?在mysql命o行编辑每输入完命令后最后一定要有分?
昄数据库:show databases;
使用数据库:use 数据库名Q?/P>


建库
在mysql里徏一个数据库firstQ以及在数据库里Z个表about
命oQcreate database first;

为数据库讄权限Q用户和密码Q?BR>命oQgrant all privileges on first.* to test@localhost identified by  ?23456?
当你执行完这个命令以后,只要你再以用户名Qtest,密码Q?23456d时你只可以对firstq个数据库操作,q样避开使用root
输入命oQuse first;
使用first数据库;

在first库中
命oQcreate table about(id int(8) primary key,name varchar(10));

在表中假如数据:
命oQinsert into  about values('xyw1026','laojiang');

退?BR>命oQexit

JSPq接mysql
在C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps目录下徏立子目录myapp
q入C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp目录?BR>用记事本~写一个文件保存ؓfirst.jsp
代码如下Q?BR><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//firstZ的数据库?
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from first";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的W一个字D内容ؓQ?lt;%=rs.getString(1)%>
您的W二个字D内容ؓQ?lt;%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?);%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

在浏览器中输入:
http://127.0.0.1:8080/myapp/first.jsp
若出玎ͼ
id|num
0 |laojiang

数据库操作成功,恭喜?/P>

表示配置成功


q入C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp目录
在myapp目录下新Z个目录WEB-INFQ注意,目录名称是区分大写的;
在WEB-INF下用C本新Z个文Ӟ命名为web.xmlQ内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>

在myapp下用C本新Z个测试的jsp面Q文件名为index.jspQ文件内容如下:

<html><body><center>
Now time is: <%=new java.util.Date()%>
</center></body></html>


重启Tomcat
打开览器,输入
http://localhost:8080/myapp/index.jsp
看到当前旉的话说明成功安装?

建立自己的ServletQ?
用记事本新徏一个servletE序Q文件名为HelloWorld.javaQ文件内容如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");

}
}


~译
HelloWorld.java剪切到C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes目录?BR>命o行方式下输入Q?
cd C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes
javac HelloWorld.java
用javac HelloWorld.java来编译这个文Ӟ如果出现无法import javax.servlet.*
则将C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib目录下的servlet-api.jar文g拯q添加到
C:\Program Files\Java\jre1.5.0_04\lib\ext目录中去可以了

然后在C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes下会产生一个编译后的servlet文gQHelloWorld.class
用记事本打开C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\ROOT\WEB-INF目录下的web.xml如下所C,d后的内容如下:
.
.
.
<!-- JSPC servlet mappings start -->

    <servlet>
        <servlet-name>org.apache.jsp.index_jsp</servlet-name>
        <servlet-class>org.apache.jsp.index_jsp</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>org.apache.jsp.index_jsp</servlet-name>
        <url-pattern>/index.jsp</url-pattern>
    </servlet-mapping>

   
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>

<!-- JSPC servlet mappings end -->

</web-app>

q段话中的servletq一D声明了你要调用的ServletQ而servlet-mapping则是声明的servlet“映”到/servlet/HelloWorld地址?

启动TomcatQ启动浏览器Q输?A href="http://localhost:8080//servlet/HelloWorld">http://localhost:8080//servlet/HelloWorld 如果看到输出HelloWorldQ就说明~写的servlet成功了?
注意Q修改了web.xml以及新加了classQ都要重启Tomcat


也可以在自己创徏的目录下试如:
HelloWorld.class拯到C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF\classes目录?BR>其中classes目录若没有就创徏一?BR>用记事本打开C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF目录下的web.xml如下所C,修改后的内容如下:
.
.
.
<!-- JSPC servlet mappings start -->
   
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>

<!-- JSPC servlet mappings end -->

</web-app>


启动TomcatQ启动浏览器Q输?A href="http://localhost:8080/myapp/servlet/HelloWorld">http://localhost:8080/myapp/servlet/HelloWorld 如果看到输出HelloWorldQ就说明~写的servlet成功了?
注意Q修改了web.xml以及新加了classQ都要重启Tomcat


建立自己的javaBeanQ?

用记事本新徏一个javaE序Q文件名为TestBean.javaQ文件内容如下:
package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}

~译
TestBean.java攑֜c:\test下,使用如下命o~译Q?
C:\test>javac TestBean.java
然后在c:\Test下会产生一个编译后的bean文gQTestBean.class
TestBean.class文g剪切到C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF\classes\test目录下,
若无某些子目录则创徏一?

新徏一个TestBean.jsp文gQ文件内容ؓQ?
<%@ page import="test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center></body></html>

重启TomcatQ启动浏览器Q输?A href="http://localhost:8080/myapp/TestBean.jsp">http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean
p明编写的javaBean成功了?


Q特别注明:本文内容均来自互联网Q?/P>



我的JAVA 2005-08-18 01:29 发表评论
]]>
webwork2+spring+hibernate入门完全配置指南(1)(原创) 选择?tijichen ?Blog http://www.aygfsteel.com/lgplhk/archive/2005/08/17/10291.html我的JAVA我的JAVATue, 16 Aug 2005 17:06:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/17/10291.htmlhttp://www.aygfsteel.com/lgplhk/comments/10291.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/17/10291.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/10291.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/10291.html 

webwork是个优秀的开源框Ӟ特别是其拦截器机Ӟ我认为是整个pȝ最大的亮点Q可在其上面做大量文?BR>我的开发环境ؓEclipse3.0.1+lomozQ数据库我用的是MySQL4.0.12,当然Q也用到了mysqlcc,服务器我用的是tomcat4.0.3和tomcat4.1
请先下蝲webwork.,spring.,hibernateQƈ把JAR文g攑ֈweb-inf的lib目录里面。同Ӟ请下?A >http://unc.dl.sourceforge.net/sourceforge/aopalliance/aopalliance.zip Q将aopalliance.jar攑ֈlib目录里面?BR>q有webwork2-spring.jarQ以及mysql的驱动都要下载ƈ攑ֈlib里面Q缺一不可
然后是配|log4jQ如果没有正配|logQTOMCAT不能正常发布你的项目。配|log4j很简单,
在web-inf/classes下徏立一个log4j.properties的文Ӟ内容如下
    log4j.rootLogger=INFO, A1 , R
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=d:/Tomcat 4.1/webapps/demo/logs/log4j.log
    log4j.appender.R.MaxFileSize=100KB
    log4j.appender.R.MaxBackupIndex=1
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
其中log4j.appender.R.Fileq一请按照你TOMCAT的安装位|进行修改,关于log4j的详l内容,推荐大家看Hilton的学习笔C及IBM|站上的相关文章.
 好了Q开始我们的webwork之旅了。首先是配置web.xml文g
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
<web-app>
       <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
       </listener>
       <listener>
              <listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
       </listener>
    <servlet>
        <servlet-name>webwork</servlet-name>
        <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>webwork</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

     <taglib>
        <taglib-uri>webwork</taglib-uri>
        <taglib-location>/WEB-INF/webwork.tld</taglib-location>
    </taglib>

</web-app>

我们配置了两个监听器Q还有一个servletQ这个servlet负责action的{发工作,关于action的详l工作原理,大家可以参看xwork的源代码
在接下来配置之前Q我惛_概说一下我惛_现的功能Q就是简单的往mysql的一个表中插入一些数?BR>首先我用Middlegen-Hibernate和hibernate-extensionsQ我没用eclipse的hibernate插gQ我喜欢用这两样工具来生?IMG src="http://blog.csdn.net/Emoticons/tongue_smile.gif">Q生成了表对应的hbm.xml文g和两个JAVAc,表的字段?tablename,fieldname,chinesename", 表名?BR>"systable",其中tablename,fieldname做双主键Q这P生成出来的类应该是两个,一个PK主键cdȝ本nQ我把他们加入到了我的项目中.
然后我做了一个接口类
 package com.cz.struct;

 /**
  * @author tijichen
  *
  * TODO To change the template for this generated type comment go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
 public interface SystableDAO {
  public abstract void insert(Systable data);
 }
然后是实现类
 package com.cz.struct;
 import net.sf.*;
 import org.springframework.orm.hibernate.support.HibernateDaoSupport;
 /**
  * @author tijichen
  *
  * TODO To change the template for this generated type comment go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
 public class SysTableDAOImp extends HibernateDaoSupport implements
 SystableDAO{
  public void insert(Systable data)
  {
   this.getHibernateTemplate().save(data);
  }
 }
Z么要用接口类Q因为spring会用到JAVA的动态代理,关于q部分,大家可以看xiaxin的spring指南
在insert Ҏ中,我直接调用了spring提供的hibernate模板ҎQ真是方便呀

然后?spring的配|了Q请在web-lib/下徏立applicationContext.xml文gQ内容如?BR><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
   destroy-method="close">
   <property name="driverClassName">
    <value>org.gjt.mm.mysql.Driver</value>
   </property>
   <property name="url">
    <value>jdbc:mysql://localhost/mystructs</value>
   </property>
   <property name="username">
    <value>chenzhi</value>
   </property>
   <property name="password">
    <value>1</value>
   </property>
  </bean>
  <bean id="sessionFactory"
   class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref local="dataSource" />
   </property>
   <property name="mappingResources">
    <list>
     <value>com\cz\struct\SysTable.hbm.xml</value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      net.sf.hibernate.dialect.MySQLDialect
     </prop>
     <prop key="hibernate.show_sql">
      true
     </prop>
    </props>
   </property>
  </bean>
  <bean id="transactionManager"
   class="org.springframework.orm.hibernate.HibernateTransactionManager">
   <property name="sessionFactory">
    <ref local="sessionFactory" />
   </property>
  </bean>
  <bean id="systableDAO" class="com.cz.struct.SysTableDAOImp">
   <property name="sessionFactory">
    <ref local="sessionFactory" />
   </property>
  </bean>
  <bean id="systableDAOProxy"
   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
   <property name="transactionManager">
    <ref bean="transactionManager" />
   </property>
   <property name="target">
    <ref local="systableDAO" />
   </property>
   <property name="transactionAttributes">
    <props>
      <prop key="insert*">PROPAGATION_REQUIRED</prop>
      <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
      <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
   </property>
  </bean>
</beans>

在这个配|文仉面,我们讄了datasource\sessionfactory以及spring的动态代理,q有hibernate所需要的XML映射文g路径
然后是配|xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
 <include file="webwork-default.xml" />
  <package name="default" extends="webwork-default"
   externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
  <interceptors>
  <interceptor name="reference-resolver"
  class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" />
  <interceptor-stack name="vxStack">
  <interceptor-ref name="params" />
  <interceptor-ref name="model-driven" />
  <interceptor-ref name="reference-resolver" />
  </interceptor-stack>
  </interceptors>
<action name="Test" class="com.cz.struct.TestAction">
 <external-ref name="systableDAO">systableDAOProxy</external-ref>
 <result name="success" type="dispatcher">
 <param name="location">/index.jsp</param>
 </result>

 <interceptor-ref name="vxStack" />
</action>
</package>
</xwork>

在配|action的external-ref的时候我遇到了一个不大不的玩笑Q一般编辑XML的时候我都是在editplus里面~辑?BR>Q最开始我写成
<external-ref name="systableDAO">
 systableDAOProxy
</external-ref>
l果pȝ提示找不到叫systableDAOProxyq个名字的beanQ结果一查,发现旁边不能加上I格和tabQ哎。。肯定是q回串的时候没加trim
的后?BR>好了Q最后是我们的TestAction.java
package com.cz.struct;
import com.opensymphony.xwork.*;
import com.opensymphony.webwork.*;
import java.util.*;
/**
 * @author tijichen
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class TestAction extends ActionSupport
{
 private SystableDAO systabledao;
 
 String testname=null;
 public void setSystableDAO(SystableDAO dao)
 {
  this.systabledao=dao;
 }
 public SystableDAO getSystableDAO()
 {return this.systabledao;}
    public String execute() throws Exception {
     testname="executeing";
     SystablePK pk=new SystablePK();
     Systable newdata=new Systable();
     pk.setFieldName("test");
     pk.setTableName("test3");
     newdata.setComp_id(pk);
     newdata.setChineseName("tets");

     systabledao.insert(newdata);
        return Action.SUCCESS;
    }
 
}
ok,~译打包Q然后在览器地址栏中输入http://localhost:8080/你的发布目录/Test.action
看看Q是不是数据库里面多Z一条数据了Q?BR>至于其他Q比如从面提交的值插入数据库{等Q这里都不多说了Qwebwork自带的sample是最好的参考资?/P>

我的JAVA 2005-08-17 01:06 发表评论
]]>
JDBC?MYSQL 选择?mfc2003 ?Blog http://www.aygfsteel.com/lgplhk/archive/2005/08/17/10290.html我的JAVA我的JAVATue, 16 Aug 2005 16:01:00 GMThttp://www.aygfsteel.com/lgplhk/archive/2005/08/17/10290.htmlhttp://www.aygfsteel.com/lgplhk/comments/10290.htmlhttp://www.aygfsteel.com/lgplhk/archive/2005/08/17/10290.html#Feedback0http://www.aygfsteel.com/lgplhk/comments/commentRss/10290.htmlhttp://www.aygfsteel.com/lgplhk/services/trackbacks/10290.html 

package zmsjdbc;
import java.sql.*;
public class mysql1
{

  private   String url="jdbc:mysql://localhost:3306/beyond";
            //先下载MYSQL 驱动  mm.mysql-2.0.4-bin.jar 攑֜D:\JBuilder9\jdk1.4\jre\lib\ext ?/P>

 private   String user="root";
 private   String pwd="";
 public   Connection  getcon()
 {
   Connection con;
    try
    { //加蝲驱动E序
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      //创徏q接
      con=DriverManager.getConnection(url,user,pwd);
      return con;
     }

     catch(ClassNotFoundException e)
     {
         System.out.println("加蝲驱动E序出错");
     }


     catch(Exception e)
     {
       System.out.println("出现了好大的错误");
     }

     return null;
 }
 public  ResultSet  executeSql(String sqlstr)
   {
     Connection conn;
     Statement stmt;

      try
      {
        conn=getcon();
        stmt=conn.createStatement();
        ResultSet  rs=stmt.executeQuery(sqlstr);

        return rs;
      }
      catch(SQLException e)
      {
        System.out.print("获取数据集时出现错误");
      }
      return null;
   }

  public static void main(String[] args)
  {
    mysql1 mysql11 = new mysql1();
    Connection conn;
    ResultSet  rs;
   rs= mysql11.executeSql("select * from zms1");
    try
    {
      while(rs.next())
      {
        System.out.println(rs.getString("name"));
      }
    }
    catch(Exception e)
    {
       System.out.println(e.getMessage());
    }


  }

}




我的JAVA 2005-08-17 00:01 发表评论
]]>
վ֩ģ壺 | | Ǭ| ţ| | ʢ| ʳ| ƺ| ˫| ƺ| | Ѯ| ׳| | Ұ| ˫| | | | ƺ| | ɽʡ| | ʡ| | | ½| ǿ| ƽ̶| ƽ| | ɽ| | ʲ| ɳ| ˫| ˼é| | ˳| ˫| Ͻ|