仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 422|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA网页设计JNDI简介,jndi在tomcat中的设置,jdbc...

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。毗连数据库


JNDI(Java定名和目次接口)







JNDI(Java定名和目次接口)散布式盘算情况一般利用定名和目次服务来猎取共享的组件和资本。定名和目次服务将称号与地位、服务、信息和资本联系关系起来。定名服务供应称号—对象的映照。目次服务供应有关对象的信息,并供应定位这些对象所需的搜刮工具。有很多定名和目次服务虚现,而且到它们的接口是分歧的。Java定名和目次接口或JNDI供应了一个用于会见分歧的定名和目次服务的大众接口。请参阅URLjava.sun.com/products/jndi/serviceproviders.html以猎取撑持经由过程JNDI接口会见定名和目次服务的供给商列表。JNDI(JavaNamingandDirectoryInterface)当你在开辟企业beans时,JNDI很主要,由于对一个EJB的会见是经由过程JNDI的定名服务完成的。使用一个定名服务来查找与一个特命名字相干的一个对象。在EJBcontext中,一个定名服务找到一个企业bean,给定这个bean的名字。因而,懂得JNDI在开辟一个EJB使用程序中是相当主要的。别的,JDBC能够用JNDI来会见一个干系数据库。附:TheJNDITutorialhttp://java.sun.com/products/jndi/tutorial/index.html(下载)http://java.sun.com/products/jndi/docs.html#TUTORIAL











JDBC2.0扩大API











JDBC2.0API被分别为两部分:JDBC2.0中心API和JDBC2.0尺度扩大API。中心API在java.sql内里。这是本来的版本就完成了的基础的功效。尺度扩大API在javax.sql内里。由JDBC2.0标准新划定的一些接口在这内里。固然,JDBC2.0也对本来版本的java.sql中心做了一些修改。不外不是很年夜。本来JDBC1.0的程序能够不加修正的在JDBC2.0上运转。这是Java的一向的优秀的风格。最新的JDBC包能够从sun公司的网站高低载。  JDBC2.0的扩大API增添了一些数据会见和数据源会见的严重的功效。这两头有一些是次要用来做企业盘算的。用JDBC2.0的新的扩大包,JDBC供应了一个从JAVA2平台的通用的数据会见的办法。  起首,我们来看看JDBC尺度扩大的API如何来和JDBC2.0分离在一同的。JDBC2.0包含两个包:  1、java.sql包,个包内里是JDBC2.0的中心API。它包含了本来的JDBCAPI(JDBC1.0版本),再加上一些新的2.0版本的API。这个包在Java2PlatformSDK内里有。  2、javax.sql包,这内里是JDBC2.0的尺度扩大API。这个包是一个全新的,在Java2PlatformSDK,EnterpriseEdition内里独自供应。  JDBC2.0的中心API包含了JDBC1.0的API,并在此基本上增添了一些功效,对某些功能做了加强。使java言语在数据库盘算的前端供应了一致的数据会见办法,效力也失掉了进步。  JDBC是向后兼容的,JDBC1.0的程序能够不加修正的运转在JDBC2.0上。可是,假设程序顶用到了JDBC2.0的新特征,就必需要运转在JDBC2.0版本上。  归纳综合的来讲,JDBC中心API的新特征在两个方面做了事情。一个是撑持一些新的功效,另外一个就是撑持SQL3的数据范例。  1、在撑持新功效方面:包含了局集能够向后转动,批量的更新数据。别的,还供应了UNICODE字符集的字符流操纵。  2、在撑持SQL3的数据范例方面:包含新的SQL3数据范例,增添了对耐久性对象的存贮。  为了对数据的存取,操纵加倍便利,JDBC的新特征是使用程序的计划更简单了。比方:数据块的操纵可以明显的进步数据库会见的功能。新增添的BLOB,CLOB,和数组接口可以是使用程序操纵年夜块的数据范例,而不用客户端在存贮之行进行别的的处置。如许,就明显的进步了内存的利用效力。上面我们来先容JDBC2.0的尺度扩大API。尺度扩大API分为以下几个方面:  1、DataSource接口:和Java名字目次服务(JNDI)一同事情的数据源接口。它供应了对数吹囊恢指玫牧臃椒ā?br>  2、Connectionpooling(毗连池):能够反复利用毗连,而不是对每一个哀求都利用一个新的毗连。  3、Distrubutetransaction(散布式的事件):在一个事件中触及到了多个数据库服务器。  4、Rowsets:JavaBean组件包括了却果集,次要用来将数据传给瘦客户,大概供应一个能够转动的了局集。  上面我们一个一个来先容:  1、DataSource接口是一个更好的毗连数据源的办法:  JDBC1.0是本来是用DriverManager类来发生一个对数据源的毗连。JDBC2.0用一种替换的办法,利用DataSource的完成,代码变的更玲珑精巧,也更简单把持。  一个DataSource对象代表了一个真实的数据源。依据DataSource的完成办法,数据源既能够是从干系数据库,也电子表格,还能够是一个表格情势的文件。当一个DataSource对象注册到名字服务中,使用程序就能够经由过程名字服务取得DataSource对象,并用它来发生一个与DataSource代表的数据源之间的毗连。  关于数据源的信息和怎样来定位数据源,比方数据库服务器的名字,在哪台呆板上,端标语等等,都包括在DataSource对象的属性内里往了。如许,对使用程序的计划来讲是更便利了,由于其实不必要硬性的把驱动的名字写逝世到程序内里往。一般驱动名字中都包括了驱动供应商的名字,而在DriverManager类中一般是这么做的。假如数据源要移植到另外一个数据库驱动中,代码也很简单做修正。所必要做的修正只是变动DataSource的相干的属性。而利用DataSource对象的代码不必要做任何修改。  由体系办理员大概有响应权限的人来设置DataSource对象。设置DataSource,包含设定DataSource的属性,然后将它注册到JNDI名字服务中往。在注册DataSource对象的的过程当中,体系办理员必要把DataSource对象和一个逻辑名字联系关系起来。名字能够是恣意的,一般取成能代表数据源而且简单记着的名字。鄙人面的例子中,名字起为:InventoryDB,依照常规,逻辑名字一般都在jdbc的子高低文中。如许,逻辑名字的全名就是:jdbc/InventoryDB。  一旦设置好了数据源对象,使用程序计划者就能够用它来发生一个与数据源的毗连。上面的代码片断示例了怎样用JNDI高低文取得一个一个数据源对象,然后怎样用数据源对象发生一个与数据源的毗连。入手下手的两行用的是JNDIAPI,第三行用的才是JDBC的API:  Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup("jdbc/InventoryDB");Connectioncon=ds.getConnection("myPassword","myUserName");  在一个基础的DataSource完成中,DataSource.getConnection办法前往的Connection对象和用DriverManager.getConnection办法前往的Connection对象是一样的。由于DataSource供应的便利性,我们保举利用DataSource对象来失掉一个Connection对象。我们但愿以是的基于JDBC2.0手艺的数据库驱动都包括一个基础的DataSource的完成,如许就能够在使用程序中很简单的利用它。  关于一般的使用程序计划者,是不是利用DataSource对象只是一个选择成绩。可是,关于那些必要用的毗连池大概散布式的事件的使用程序计划者来讲,就必需利用DataSource对象来取得Connection,缘故原由鄙人面我们会提到。2、Connectionpooling(毗连池):  毗连池是这么一种机制,当使用程序封闭一个Connection的时分,这个毗连被接纳,而不是被destroy,由于创建一个毗连是一个很费资本的操纵。假如能把接纳的毗连从头使用,会削减新创立毗连的数量,明显的进步运转的功能。  假定使用程序必要创建到一个名字为EmpolyeeDB的DataSource的毗连。利用毗连池失掉毗连的代码以下:  Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup("jdbc/EmployeeDB");Connectioncon=ds.getConnection("myPassword","myUserName");除逻辑名字之外,我们发明其代码和下面举的例子的代码是一样的。逻辑名字分歧,就能够毗连到分歧的数据库。DataSource对象的getConnection办法前往的Connection是不是是一个毗连池中的毗连完整取决于DataSource对象的完成办法。假如DataSource对象完成与一个撑持毗连池的两头层的服务器一同事情,DataSource对象就会主动的前往毗连池中的毗连,这个毗连也是能够反复使用的。  是不是利用毗连池取得一个毗连,在使用程序的代码上是看不出分歧的。在利用这个Connection毗连上也没有甚么纷歧样的中央,独一的分歧是在java的finally语句块中来封闭一个毗连。在finally中封闭毗连是一个好的编程习气。如许,即便办法抛出非常,Connection也会被封闭并接纳到毗连池中往。代码应当以下所示:  try{…  }catch(){…  }finally{if(con!=null)con.close();}  3、散布式事件:  取得一个用来撑持散布式事件的毗连与取得毗连池中的毗连是很类似的。一样,分歧的地方在于DataSource的完成上的分歧,而不是在使用程序中取得毗连的体例上有甚么分歧。假定DataSource的完成能够与撑持散布式事件两头层服务器一同事情,失掉毗连的代码仍是以下所示:  Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup("jdbc/EmployeeDB");Connectioncon=ds.getConnection("myPassword","myUserName");因为功能上的缘故原由,假如一个DataSource可以撑持散布式的事件,它一样也能够撑持毗连池办理。  从使用程序计划者的概念来看。是不是撑持散布式的事件的毗连对它来讲没甚么分歧,独一的分歧是在事件的界限上(入手下手一个事件的中央和停止一个事件的中央),入手下手一个事件大概停止一个事件都是由事件服务器来把持的。使用程序不该该做任何大概妨害服务的事变。使用程序不克不及够间接挪用事件提交commit大概回滚rollback操纵,也不克不及够利用事件的主动提交形式auto-commitmode(在数据库操纵完成的时分主动的挪用commit大概rollback)。在一个毗连介入了散布式事件的时分,上面的代码是你不克不及做的(con暗示撑持散布式事件的毗连Connection)。  con.commit();大概con.rollback();大概con.setAutoCommit(true);关于一般的Connection来讲,缺省的是auto-commit形式。而关于撑持散布式事件的Connection来讲,缺省不是auto-commit形式。注重,即便Connection是撑持事件的,它也能够用于没有事件的情形。关于事件界限的限定只是是对散布式事件的情形下才建立的。  设置撑持毗连池的DataSource的时分,触及到设置ConnectionPoolDataSource对象,这个对象是三层系统布局中的两头层来办理毗连池的。一样的,在设置撑持散布式事件的时分,必要设置XADataSource,XADataSource是两头层用来办理散布式事物的对象。ConnectionPoolDataSource和XADataSource是由驱动供应商供应的,对使用程序的计划者来讲是通明的。和基础的DataSource一样,体系办理员来设置ConnectionPoolDataSource和XADataSource对象。  4、了局集:  了局集对象是一行行数据的容器。依据其目标,能够经由过程多种办法完成。RowSet及其相干的接口与JDBC2.0的尺度扩大API有点分歧,他们并非驱动的一部分,RowSet是在驱动的下层完成的,能够由别的的任何人来完成他们。  任何范例的rowset都完成了RowSet接口,RowSet接口扩大了ResultSet接口。如许RowSet对象就有了ResultSet对象一切的功效。可以经由过程getXXX办法失掉数据库中的某列值,经由过程updateXXX办法能够修正某列值,能够挪动光标,是以后行变成另外一行。  固然,我们更感乐趣的是RowSet接口供应的新的功效。作为一个JavaBean组件,RowSet对象能够增添大概删除一个listener(监听者),能够get大概set其属性值,这些属性中,有一个是字符串,暗示一个对数据库Query哀求,RowSet接口界说了设定参数的办法,也供应了实行这个哀求的办法。这意味着RowSet对象可以实行查询哀求,能够依据它发生的了局集举行盘算。一样,RowSet也能够依据任何表格数据源举行盘算,以是,它不范围于干系数据库。  从数据源失掉数据以后,RowSet对象能够和数据源断开毗连,rowset也能够被序列化。如许,RowSet就能够经由过程收集传送给瘦客户端。  RowSet能够被从头毗连到数据源,如许,做的修正就能够存回到数据源中往。假如发生了一个listener,当RowSet确当前行挪动,大概数据被修正的时分,监听者就会收到关照。比方,图形用户界面组件能够注册成为监听者,当RowSet变动的时分,图形用户界面接到关照,就能够修正界面,来切合它所暗示的RowSet。  依据分歧的必要,RowSet接口能够经由过程多种办法来完成。Javasoftware已写了一个CachedRowSet完成,从http://developer.java.sun.com/developer/earlyAccess/crs/index.html中能够失掉这个完成。  与CachedRowSet类不样的是,JDBCRowSet类老是坚持一个和数据源的毗连。如许,在ResultSet核心复杂到加了一层,是基于JDBC手艺的驱动看起来象是一个复杂的JavaBean组件一样。  总结:JDBC2.0尺度扩大API经由过程见DataSource注册到JNDI名字服务上,将JDBC手艺扩大为一个全新的观点。使使用程序的代码加倍精致,易于把持。新的API撑持了毗连池,撑持散布式的事件。最初,还使java使用程序能够在收集上传布了局集,是不成以转动的ResultSet酿成了能够转动的RowSet。











Tomcat中设置和利用JNDI



JNDI是J2EE中一个很主要的尺度,一般我们是在EJB编程顶用到,Tomcat4.0中供应了在JSP和Servelt中间接利用JNDI的办法,上面谈一下在Tomcat4.0中设置和利用JNDI的办法(以经由过程JNDI毗连数据库为例)假定利用的数据库是mysql,实行例子在TOMCAT_HOME/webapps/DBTest目次中A.将mysql的JDBC毗连库mm.mysql-2.0.9-bin.jar放进TOMCAT_HOME/common/lib中B.设置TOMCAT_HOME/conf/serer.xml文件在<Service>段中到场一个Context:<Contextpath="/DBTest"docBase="DBTest"debug="5"reloadable="true"crossContext="true"></Context>这是DBTest的根路径,这是为了在DBTest中利用做筹办.C.在下面到场的<Context>段到场<Resourcename="jdbc/TestDB"auth="Container"type="javax.sql.DataSource"/><ResourceParamsname="jdbc/TestDB"><parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter><!--MaximumnumberofdBconnectionsinpool.Makesureyouconfigureyourmysqldmax_connectionslargeenoughtohandleallofyourdbconnections.Setto0fornolimit.--><parameter><name>maxActive</name><value>100</value></parameter><!--MaximumnumberofidledBconnectionstoretaininpool.Setto0fornolimit.--><parameter><name>maxIdle</name><value>30</value></parameter><!--MaximumtimetowaitforadBconnectiontobecomeavailableinms,inthisexample10seconds.AnExceptionisthrownifthistimeoutisexceeded.Setto-1towaitindefinitely.--><parameter><name>maxWait</name><value>10000</value></parameter><!--MySQLdBusernameandpasswordfordBconnections--><parameter><name>username</name><value>test</value></parameter><parameter><name>password</name><value>test</value></parameter><!--Classnameformm.mysqlJDBCdriver--><parameter><name>driverClassName</name><value>org.gjt.mm.mysql.Driver</value></parameter><!--TheJDBCconnectionurlforconnectingtoyourMySQLdB.--><parameter><name>url</name><value>jdbc:mysql://localhost:3306/test</value></parameter></ResourceParams>这里每个小段都有英文注解,是Tomcat供应的,我们能够将依照Sample到场,次要修正的是driverClassName,url,和用户帐号;必要夸大的是"jdbc/TestDB"就是JDNI要查找的Name.D.在JSPh或servlet中利用JNDI查找服务上面是在JSP文件中关于JNDI利用的代码(文件名记为UserHandleDB.jsp)必要注重的是JNDINAME要在后面加上"java:comp/env/"<%@pagelanguage="java"%><%@pageimport="java.util.*"%><%@pageimport="java.sql.*"%><%@pageimport="javax.sql.*"%><%@pageimport="javax.naming.*"%><%Stringjndi_name="java:comp/env/jdbc/TestDB";Stringselect_user_sql="selectuserid,name,birthday,emailfromemp";Stringcolnames[][]={{"UserID","Name","Birthday","EMail"},{"userid","name","birthday","email"}};VectoruserSet=newVector();VectorcolumnSet=newVector();for(inti=0;i<colnames[0].length;i++){columnSet.add(colnames[0][i]);}userSet.add(columnSet);Contextctx=newInitialContext();if(ctx==null)thrownewException("NoContext");DataSourceds=(DataSource)ctx.lookup(jndi_name);Connectionconn=ds.getConnection();try{PreparedStatementpsPreparedStatement=conn.prepareStatement(select_user_sql);ResultSetresultSet=psPreparedStatement.executeQuery();while(resultSet.next()){columnSet=newVector();for(inti=0;i<colnames[1].length;i++){columnSet.add(resultSet.getString(colnames[1][i]));}userSet.add(columnSet);}}catch(SQLExceptione){e.printStackTrace();}finally{conn.close();%>E.援用UserHandleDB.jsp(记为ViewTable.jsp)<html><head><title>TestDatabase</title><body><%@includefile="UserHandleDB.jsp"%><tableborder="1"><%for(inti=0;i<userSet.size();i++){VectorcolSet=(Vector)userSet.get(i);out.print("<tr>");for(intj=0;j<colSet.size();j++){Stringcol=(String)colSet.get(j);out.print("<td>"+col+"</td>");}out.print("</tr>");}%></table></body></html>F.在web.xml中到场<resource-ref><description>DBConnection</description><res-ref-name>jdbc/TestDB</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>这里的jdbc/TestDb要和C中Resource段的name婚配G.察看了局起首断定数据库已启动,接着启动Tomcat,假如Tomcat启动非常,大概的缘故原由是数据库的JDBC库没有加载最初翻开扫瞄器,会见http://localhost:8080/DBTest/ViewTable.jsp就能够看到了局

你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难
谁可相欹 该用户已被删除
沙发
发表于 2015-1-20 23:50:38 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
不帅 该用户已被删除
板凳
发表于 2015-2-1 23:52:30 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
分手快乐 该用户已被删除
地板
发表于 2015-2-3 11:52:46 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
因胸联盟 该用户已被删除
5#
发表于 2015-2-8 20:25:47 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
莫相离 该用户已被删除
6#
发表于 2015-2-26 04:38:23 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
再现理想 该用户已被删除
7#
发表于 2015-3-7 12:53:47 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
老尸 该用户已被删除
8#
发表于 2015-3-8 23:50:33 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
变相怪杰 该用户已被删除
9#
发表于 2015-3-16 17:48:37 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
飘飘悠悠 该用户已被删除
10#
 楼主| 发表于 2015-3-22 23:29:25 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 17:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表