??xml version="1.0" encoding="utf-8" standalone="yes"?>
在旧的“以传播者ؓ中心”的模式逐步被“以受众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>
]]>
]]>
从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>
]]>
本文包含以下内容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>
创徏DAO讉K对象
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;
}
}
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>
]]>
http://www.xyzp.net 校园招聘一|打?/FONT>
springQ一个轻量的j2ee框架Q轻量的,q几个字深q把我吸引住了。抱着《spring in action》啃了一个星期,了解之后,把自己所学的东西几乎通通用在了xyzp.netq个|站上,下面介绍一下:
校园招聘一|打?/FONT> 提供专业的校园招聘信息。系l自动采集全国各大高校BBS和就业中心的招聘信息Q按照地区、学校进行组l分cR?BR>
http://www.xyzp.net|站分ؓ两个部分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>
hibernate处理数据库逻辑真是没的_整个|站一共就4张表Q大量一对多和多对多的逻辑Qhibernate处理的很好,主要是编E方面要处理的逻辑单了很多Q但是效率方面有一Ҏ~;Q?BR>
spring本n提供一套完整的mvcQ应用v来很方便Q功能也很强大,几乎用的到的面逻辑它都惛_了。推荐用?BR>
应用了xmlhttprequest技术,因ؓ首页调用数据库的ơ数太多Q所以每个栏目都用一个远E调用来解决的,速度很快Q不q有的ie昄q有一些问题;Q?BR>
虽然xmlhttprequest提升速度比较明显Q但Ҏ据库操作的次数ƈ没有减少Q引入缓存机制才能从Ҏ上解冻Ioscache是opensymphony的出品,它的面U缓存把整个|页~存下来Q速度提升自然很明显?BR>
整个|站没有使用tableQ全部用css搞定Q大家可以看一下?BR>
整个|站全部采用开源Y件构建,包括spring,hibernate,oscache,tomcat,mysql,eclipse,java commons.lucene{等?BR>
在开发中到不少问题Q字W集、链接池Qspring与hibernate集成{等Q对此有兴趣可以和我联系QQQQ?1231398
如果大家觉得q个|站q不错,h荐一下,谢谢Q)
]]>
在这文章将不涉及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>
]]>
面向对象的开发方法是当今的主,但是同时我们不得不用关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>
在配|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 <web-app> 在myapp下用C本新Z个测试的jsp面Q文件名为index.jspQ文件内容如下: <html><body><center> 建立自己的ServletQ? import java.io.*; response.setContentType("text/html"); } 然后在C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes下会产生一个编译后的servlet文gQHelloWorld.class <servlet> <servlet-mapping> <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
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>
Now time is: <%=new java.util.Date()%>
</center></body></html>
重启Tomcat
打开览器,输入http://localhost:8080/myapp/index.jsp
看到当前旉的话说明成功安装?
用记事本新徏一个servletE序Q文件名为HelloWorld.javaQ文件内容如下:
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
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\webapps\ROOT\WEB-INF目录下的web.xml如下所C,d后的内容如下:
.
.
.
<!-- JSPC servlet mappings start -->
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<servlet-class>org.apache.jsp.index_jsp</servlet-class>
</servlet>
<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-name>HelloWorld</servlet-name>
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>
注意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>
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>
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());
}
}
}