﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BloveSaga-文章分类-Web组件</title><link>http://www.blogjava.net/blovesaga/category/11876.html</link><description>在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:09:42 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:09:42 GMT</pubDate><ttl>60</ttl><item><title>Tomcat5.5的基本配置说明</title><link>http://www.blogjava.net/blovesaga/articles/55282.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Tue, 27 Jun 2006 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/55282.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/55282.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/55282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/55282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/55282.html</trackback:ping><description><![CDATA[
		<p> Tomcat是apache的一个子项目，也是一个开源项目，主要是用于J2EE web容器，由于是一个开源项目，在学习与开发测试中经常被用到，（而目前商业最为经常用到的web服务器是BEA WebLogic）。在开源项目中，鼎鼎大名的apache基金会大家肯定有所了解，网站链接：<a href="http://www.apache.org/">http://www.apache.org/</a>，而旗下的Jakarta Project 主要包括了Tomcat、Alexanda等Java项目，有兴趣者可看：<a href="http://jakarta.apache.org/">http://jakarta.apache.org/</a>。考虑到各位学习者的机器配置与学习成本问题，这里选了Tomcat作为我们学习与测试J2EE的环境<br />      以下为一些基本配置：<br /> 一、先从网上下载tomcat，目前最新版本是5.57，下载地址是：<a href="http://apache.freelamp.com/jakarta/tomcat-5/v5.5.7/bin/jakarta-tomcat-5.5.7.zip">http://apache.freelamp.com/jakarta/tomcat-5/v5.5.7/bin/jakarta-tomcat-5.5.7.zip</a>，下载安装完后，在安装目录下有以下目录，主要介绍一下conf、common、webapps：<br />     如果你现在等不急了，就想体验一下tomcat的魅力的话，把你的网页拷到webapps/ROOT目录下，然后再通过浏览器访问即可，默认如下格式：<a href="http://localhost:8080/">http://localhost:8080/</a>&lt;你的网页&gt;<br />     1)webapps文件夹主要用于web应用程序部署，比如你可以把你的应用程序包，如war文件拷到该目录下，容器会自动部署。<br />     2)conf文件夹下主要是放置tomcat的服务器的相关配置文件<br />     3)common文件夹主要是对容器全局变量的文件放置地方，如common/lib下就是放置一些需要全文配置的文件包。</p>
		<p>二、j2ee的相关部署规范：<br />     一般来说作为一个符合规范的web程序，会包括以下文件夹和文件：/WEB-INF/（主要是放置一些配置文件与不希望外部程序访问的隐私文件），在网络上是不允许访问该文件夹的，如当你输入以下<a href="http://localhost:8080/WEB-INF/">http://localhost:8080/WEB-INF/</a>的话就会出现错误。<br />     在WEB-INF文件夹下有一个web.xml文件，这是对当前应用程序的相关设置，资源寻找等，/WEN-INF/文件夹下有个classes子文件夹，该文件夹是应用程序的根路径（等于是classpath的路径），/WEN-INF下还要有个lib文件夹，主要是放置需要引入的包，应用程序导入的包先从这里开始寻找，其次到容器的全局路径下$TOMCAT_HOME/common/lib下寻找。<br />     以下是基本文件夹:<br />/tomcat<br />     /common<br />           /lib<br />           /classes<br />    /conf<br />    /webapps<br />        /ROOT<br />              web.xml            <br />              /WEB-INF<br />                    /lib<br />                    /classes<br />        /你部署的程序包<br />              web.xml            <br />              /WEB-INF<br />                    /lib<br />                    /classes<br />三、容器的配置（server.xml)<br />    到主目录/conf文件夹下server.xml文件是对web服务器的配置：<br />    以下是一些常见的设置，http端口设置，找到以下：<br />&lt;Connector  port="8080"   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true" /&gt;<br />    把8080端口改为你喜欢使用的端口，如常见的80，以后你就可以利用该端口进行访问你的网站了：<a href="http://localhost:80">http://localhost:80</a> 期中80是默认的，可以不写，其他的一下配置，可以参观相关的内容，入门就是这么简单。<br />    web.xml为servlet的一些相关配置，可以参照一下规范。可以看我写的其他文章。<br />    继续说一下server.xml文件的设置，<br />    找到以下：<br />   &lt;Host name="localhost" appBase="webapps"<br />       unpackWARs="true" autoDeploy="true"<br />       xmlValidation="false" xmlNamespaceAware="false"&gt;<br />     ....<br />  &lt;/Host&gt;<br />     在他们之间可以添加一个&lt;Context&gt;元素，如：&lt;Context path="/axis" reloadable="true" docBase="axis"  workDir="webapps/axis/work"/&gt;，其中属性path代表是网络访问的上下文路径，reloadable表示可以在运行时在classes与lib文件夹下自动加载类包，docBase属性表示你的应用程序的路径，在windows在如：docBase="E:\Sun\axis"，workDir表示是缓存文件的放置地点，可以方便跨平台移植时不用重编译。这样，你的应用程序就可以放到硬盘上的任意地方了。还有一个方法可以做到这点（推荐）：编写一个xml文件，然后放到tomcat目录/conf/Catalina/&lt;相应的网站&gt;/目录下，如：现在我有个应用程序ACMEWeb，我编了一个文件ACMEWeb.xml内容如下：<br />      &lt;Context path="/ACMEWeb" reloadable="true" docBase="E:\eclipseproject\ACMEWeb" workDir="E:\eclipseproject\ACMEWeb\work" /&gt;<br />      我把它放到了tomcat目录/conf/Cataline/localhost下，在浏览器打开<a href="http://localhost/ACMEWeb">http://localhost/ACMEWeb</a> 就会转向我放在E:\eclipseproject\ACMEWeb下的程序了</p>
<img src ="http://www.blogjava.net/blovesaga/aggbug/55282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-27 10:59 <a href="http://www.blogjava.net/blovesaga/articles/55282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC2.0新特性 </title><link>http://www.blogjava.net/blovesaga/articles/50271.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Sun, 04 Jun 2006 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/50271.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/50271.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/50271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/50271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/50271.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<font color="#0000ff">JDBC 2.0比1.0有了一些不同,体现在四个比较明显的方面:</font>
				<br />1&gt;. ResutlSet对象中的Cursor能够自由上下移动<br />2&gt;. 能直接使用Java程序语言来更新DB表里的内容,而不需要额外写SQL语法<br />3&gt;. 可以一次传送许多SQL语句到DB执行----Batch<br />4&gt;. 新增2个数据类型(BLOB和CLOB)<br />   我们知道在JDBC 1.0时,只要用 connection.createStatement()就能取得Statement()对象.不过在2.0中多的createStatement()<br />多了两个参数值,需要我们自己来定义它.<br />public Statement createStatement(int resultSetType,<br />                                 int resultSetConcurrency)throws SQLException <br />   第一个参数resultSetType用来设定ResultSet对象中的光标是否可以自由上下移动,它的值有三种,TYPE_FORWARD_ONLY,TYPE_SCROLL_SENSITIVE,<br />TYPE_SCROLL_INSENSITIVE.若为TYPE_FORWARD_ONLY就表示和1.0一样只能用next()方法;然后后两者可以让Cursor随便的自由移动,不过,<br />它们两者最大的区别在于:当ResutlSet中的值有改变时,TYPE_SCROLL_SENSITIVE能取得修改后的值,而TYPE_SCROLL_INSENSITIVE则不能.<br />  第而个参数resultSetConcurrentcy,主要是设定ResultSet对象是只读(read-only)还是可以改变的(updateable),它可能的值有两种,<br />CONCUR_READ_ONLY或者是CONCUR_UPDATE.若设置为CONCUR_READ_ONLY,ResultSet对象和1.0一样;若为CONCUR_UPDATEABLE,那么就可以用<br />ResultSet对象执行数据库的修改,增加和移除功能.for example:<br />先看功能和1.0一样的写法:<br />Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,<br />                                   ResultSet.CONCUR_READ_ONLY);<br />RestultSet rs=stmt.executeQuery("select ename,empno from emp");<br />while(rs.next())<br />{<br />   String name=rs.getString("ename");<br />   int empno=rs.getInt("empno");<br />   System.out.println("name="+name+","+"number="+empno);<br />}<br />输出结果为:<br />name=feiyang,number=1190<br />name=jack,   number=1230<br />name=BillGates number=12<br />...........<br />再看看下面这个:<br />Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,<br />                                   ResultSet.CONCUR_READ_ONLY);<br />RestultSet rs=stmt.executeQuery("select ename,empno from emp");<br />rs.afterLast();<br />while(rs.previous())<br />{<br />   String name=rs.getString("ename");<br />   int empno=rs.getInt("empno");<br />   System.out.println("name="+name+","+"number="+empno);<br />}<br />输出结果为:<br />name=BillGates number=12<br />name=jack,   number=1230<br />name=feiyang,number=1190<br />.............<br />这和上面第一有点不同的是顺序颠倒了,这是因为我们使用了rs.afterLast()这个方法.其实2.0中还有很多方法,如下:<br />rs.absolute(-1); //表示cursor在最后一笔数据,即 rs.last()<br />rs.absolute(1);  //表示cursor在第一笔数据,即rs.first()<br />rs.absolute(n);  //表示cursor在第N笔数据<br />假使我们目前有1000笔数据，取得第997笔<br />rs.absolute(-4);<br />还有一个方法和absolute很相像,那就是relative(),<br />rs.absolute(5); //表示第五笔数据<br />......<br />rs.relative(-3);  //表示cursor目前在第二笔数据<br />.......<br />rs.relative(1);  //cursor目前在第三笔数据<br />看看怎么用ResultSet对象执行更新数据库动作<br />   要让ResultSet对象执行更新数据库的动作，首先在声明Statement对象时,参数必须设置为TYPE_SCROLL_SENSITIVE和<br />CUNCOR_UPDATEABLE.<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select ename,empno from emp);<br />rs.last();<br />rs.updateInt("empno",2230);<br />rs.cancelRowUpdates();<br />rs.updateInt("empno",1213);<br />rs.updateRow();<br />新增数据到数据库<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select * from emp);<br />rs.moveToInsertRow();<br />rs.updateInt("empno",2230);<br />rs.updateString("ename","feiyang");<br />rs.updateString("job","clerk");<br />rs.updateFloat("sal",123456.5);<br />rs.insertRow();<br />删除数据<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select * from emp);<br />rs.absolute(4);<br />rs.deleteRow();<br />依次执行多条SQL语句<br />Statement stmt=con.createStatment();<br />int[] rows;<br />stmt.addBatch("insert into emp values('feiyang','123456')");<br />stmt.addBatch("insert into offcie values('employee','Shanghai')");<br />rows=stmt.executeBatch();<br />当执行大量数据的时候为了数据的完整性,建议使用Transaction<br />eg:<br />con.setAutoCommit(false);<br />Statement stmt=con.createStatement();<br />int[] rows;<br />stmt.addBatch("1...........");<br />stmt.addBatch("2...........");<br />stmt.addBatch("3...........");<br />stmt.addBatch("4...........");<br />stmt.addBatch("5...........");<br />stmt.addBatch("6...........");<br />rows=stmt.executeBatch();<br />con.commit();<br />在JDBC2.0中新增加BLOB和CLOB两个数据类型<br />BOLB指的是二进制大型对象(Binary Large Object),CLOB指的是字符大型对象(Character Large Object).它们用来处理大型<br />的数据类型,他们分别代表大量的二进制数据和文字数据. </div>
<img src ="http://www.blogjava.net/blovesaga/aggbug/50271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-04 15:28 <a href="http://www.blogjava.net/blovesaga/articles/50271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>