??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产欧美日韩一区二区三区 ,日本美女视频一区二区,欧洲激情一区二区http://www.aygfsteel.com/proglion/zh-cnTue, 17 Jun 2025 10:52:12 GMTTue, 17 Jun 2025 10:52:12 GMT60文本自动滚屏参考代?/title><link>http://www.aygfsteel.com/proglion/archive/2006/04/30/44235.html</link><dc:creator>比尔?/dc:creator><author>比尔?/author><pubDate>Sun, 30 Apr 2006 08:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/proglion/archive/2006/04/30/44235.html</guid><description><![CDATA[ <span id="wmqeeuq" class="c">  <p>脚本说明:<br />W一?把如下代码加?lt;head>区域?br /><SCRIPT LANGUAGE="JavaScript"><br /><!-- Begin<br />function selectScroller(n) {<br />optlist = document.scrollform.scroller;<br />optlist[optlist.length] = new Option(optlist[0].text, "", false, false);<br />optlist[0] = null;<br />optlist.selectedIndex = -1;<br />n = (n + 1) % optlist.length;<br />// change the speed below: 1000 = 1 second.<br />setTimeout("selectScroller("+n+")",2000);<br />}<br />//  End --><br /></script></p><p>W二?把如下代码加?lt;body>区域?br /><form name="scrollform"><br /><select name="scroller" size=8><br /><option>This select option list will<br /><option>scroll text by copying<br /><option>the top line to the bottom<br /><option>line before deleting the<br /><option>top line. This moves the<br /><option>options up one line and<br /><option>gives the impression of<br /><option>scrolling.<br /><option><br /><option>You can leave as many<br /><option>blank lines as you feel<br /><option>necessary to give the<br /><option>look of begining and<br /><option>ending.<br /><option><br /><option>This script was written<br /><option>in response to those<br /><option>who wanted a news<br /><option>scroller to work within<br /><option>a table's cell and for<br /><option>those who want old<br /><option>browsers to also see<br /><option>a scoller on the page.<br /><option><br /><option>This select option list will<br /><option>scroll text by copying<br /><option>the top line to the bottom<br /><option>line before deleting the<br /><option>top line. This moves the<br /><option>options up one line and<br /><option>gives the impression of<br /><option>scrolling.<br /><option><br /><option>You can leave as many<br /><option>blank lines as you feel<br /><option>necessary to give the<br /><option>look of begining and<br /><option>ending.<br /><option><br /><option>This script was written<br /><option>in response to those<br /><option>who wanted a news<br /><option>scroller to work within<br /><option>a table's cell and for<br /><option>those who want old<br /><option>browsers to also see<br /><option>a scoller on the page.<br /><option><br /><option>yobo42@hotmail.com<br /></select><br /></form></p><p>W三??lt;body>改ؓ<br /><BODY OnLoad="selectScroller(0);"></p></span> <img src ="http://www.aygfsteel.com/proglion/aggbug/44235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/proglion/" target="_blank">比尔?/a> 2006-04-30 16:57 <a href="http://www.aygfsteel.com/proglion/archive/2006/04/30/44235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript实现面滚屏效果http://www.aygfsteel.com/proglion/archive/2006/04/30/44234.html比尔?/dc:creator>比尔?/author>Sun, 30 Apr 2006 08:56:00 GMThttp://www.aygfsteel.com/proglion/archive/2006/04/30/44234.html<head>
<script language="JavaScript">
<!-- Begin
function scrollit() {
for (I=1; I<=750; I++){
parent.scroll(1,I)
   }
}

function scrollit1() {
for (I=750; I>1; I=I-1){
parent.scroll(1,I)
   }
}
// End -->
</script>
</head>

<body>
<input type=button value="向下滚屏" onClick="scrollit()" name="button">

<input type=button value="向上滚屏" onClick="scrollit1()" name="button2">
</body>



]]>
复杂输入型表单控?/title><link>http://www.aygfsteel.com/proglion/archive/2006/04/28/43831.html</link><dc:creator>比尔?/dc:creator><author>比尔?/author><pubDate>Fri, 28 Apr 2006 08:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/proglion/archive/2006/04/28/43831.html</guid><description><![CDATA[ <strong>多行文本框控?/strong> <p>  格式Q? </p> <p> <b>    </b><form name="表单的名U? method="get | post" action="URL"><br />    <TEXTAREA name="字符? ROWS="整数" COLS="整数" [READONLY] >......</TEXTAREA><br />    </form> </p> <p>    注:?lt;TEXTAREA></TEXTAREA>中输入的文本作控g的初始倹{?br /><br /><strong>选项控g</strong></p> <p>  格式Q?<br />    使用列表框控Ӟ可以让访问者从列表单中选择选项?/p> <p> <b>    </b><form name="表单的名U? method="get | post" action="URL"> <br />       <SELECT name="字符? size="整数" [MULTIPLE]> <br />           <OPTION [SELECTED] value="字符?>选项1</OPTION> <br />           <OPTION [SELECTED] value="字符?>选项1</OPTION> <br />            ...... <br />       </SELECT> <br />    </form><br /><br /><strong>对表单控件分l?/strong></p> <p>    Z便于理Q可以将表单中的各控件进行分l。用<FIELDSET>标记必须以LEGEND标记开_以指定控件组的标题,在LEGEND标记之后可以跟其他表单控Ӟ也可以嵌套LEGEND标记? </p> <p>    格式Q?</p> <p>    <b><form name="表单的名U? method="get | post" action="URL"></b><b><br />    <FIELDSET> <br />    <LEGEND>控gl标?lt;/LEGNED> <br />    l内表单控g <br />    </FIELDSET> <br />    </form></b></p> <img src ="http://www.aygfsteel.com/proglion/aggbug/43831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/proglion/" target="_blank">比尔?/a> 2006-04-28 16:35 <a href="http://www.aygfsteel.com/proglion/archive/2006/04/28/43831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC数据库连接示?/title><link>http://www.aygfsteel.com/proglion/archive/2006/04/27/43529.html</link><dc:creator>比尔?/dc:creator><author>比尔?/author><pubDate>Thu, 27 Apr 2006 04:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/proglion/archive/2006/04/27/43529.html</guid><description><![CDATA[ <p>import java.sql.*;</p> <p>/**<br /> * JDBC讉KSQL Server数据库测?br /> * @author 比尔?br /> *<br /> */<br />public class JDBCDemo<br />{<br /> public static void main(String[] args) <br /> {<br />  String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";<br />  String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";<br />  Connection con = null;<br />  Statement st;<br />  ResultSet rs;<br />  <br />  try<br />  {<br />   Class.forName(driver).newInstance(); //装蝲数据库驱动程序  ?br />  }<br />  catch(Exception e)<br />  {<br />   e.printStackTrace();<br />  }<br />  //System.out.print("right...");<br />  try<br />  {<br />   con = DriverManager.getConnection(url,"sa",null);  //创徏数据库连接实?br />   st = con.createStatement();      //讄查询语句<br />   rs = st.executeQuery("select * from Student");  //保存l果?br />   while(rs.next()) //昄l果?br />   {<br />    System.out.print("st_no = "+rs.getString(1)+"   ");<br />    System.out.print("st_name = "+rs.getString(2)+"   ");<br />    System.out.print("st_sex = "+rs.getString(3)+"   ");<br />    System.out.println("st_grade = "+rs.getString(1));<br />   }<br />  }<br />  catch(Exception e)<br />  {<br />   e.printStackTrace();<br />  }<br />  finally<br />  {<br />   if(con==null) return;<br />   try<br />   {<br />    con.close(); //关闭数据库连?br />   }<br />   catch(Exception e)<br />   {<br />    e.printStackTrace();<br />   }<br />  }<br />  <br /> <br /> }</p> <p>}<br /></p> <img src ="http://www.aygfsteel.com/proglion/aggbug/43529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/proglion/" target="_blank">比尔?/a> 2006-04-27 12:48 <a href="http://www.aygfsteel.com/proglion/archive/2006/04/27/43529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置技巧Top 10http://www.aygfsteel.com/proglion/archive/2006/04/27/43481.html比尔?/dc:creator>比尔?/author>Thu, 27 Apr 2006 02:06:00 GMThttp://www.aygfsteel.com/proglion/archive/2006/04/27/43481.html更新得很快,现在非常的流行?br />你所需要做的就是:按照你的需求配|TomcatQ只要你正确配置QTomcat一般都能适合你的要求。下面是一pd关于Tomcat的配|技巧,q些技巧源自于我的书:《Tomcat权威指南》,希望对你有所帮助?br />—?Jason Brittain

1Q?配置pȝ理QAdmin Web ApplicationQ?br />大多数商业化的J2EE服务器都提供一个功能强大的理界面Q且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的理工具Qƈ且丝毫不逊于那些商业化的竞争Ҏ。Tomcat的Admin Web Application最初在4.1版本时出玎ͼ当时的功能包括管理context、data source、user和group{。当然也可以理像初始化参数Quser、group、role的多U数据库理{。在后箋的版本中Q这些功能将得到很大的扩展,但现有的功能已经非常实用了?br />
Admin Web Application被定义在自动部v文gQCATALINA_BASE/webapps/admin.xml ?br />Q译者注QCATALINA_BASE即tomcat安装目录下的server目录Q?br />
你必ȝ辑这个文Ӟ以确定Context中的docBase参数是绝对\径。也是_CATALINA_BASE/webapps/admin.xml 的\径是l对路径。作为另外一U选择Q你也可以删除这个自动部|文Ӟ而在server.xml文g中徏立一个Admin Web Application的contextQ效果是一L。你不能理Admin Web Applicationq个应用Q换而言之,除了删除CATALINA_BASE/webapps/admin.xml Q你可能什么都做不了?br />
如果你用UserDatabaseRealmQ默认)Q你需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文g中。你~辑q个文gQ添加一个名叫“admin”的role 到该文g中,如下Q?br />
<role name="admin"/>

你同样需要有一个用Pq且q个用户的角色是“admin”。象存在的用户那Pd一个用P改变密码使其更加安全Q:

<user name="admin" password="deep_dark_secret" roles="admin"/>

当你完成q些步骤后,请重新启动TomcatQ访问http://localhost:8080/adminQ你看C个登录界面。Admin Web Application采用萜鞴芾淼陌踩疲⒉捎昧薐akarta Struts框架。一旦你作ؓ“admin”角色的用户d理界面Q你能够用这个管理界面配|Tomcat?br />
2Q配|应用管理(Manager Web ApplicationQ?br />Manager Web Application让你通过一个比Admin Web Application更ؓ单的用户界面Q执行一些简单的Web应用d?br />
Manager Web Application被被定义在一个自动部|文件中Q?br />
CATALINA_BASE/webapps/manager.xml ?br />
你必ȝ辑这个文Ӟ以确保context的docBase参数是绝对\径,也就是说CATALINA_HOME/server/webapps/manager的绝对\径?br />Q译者注QCATALINA_HOME即tomcat安装目录Q?br />
如果你用的是UserDatabaseRealmQ那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文g中。接下来Q编辑这个文Ӟd一个名为“manager”的角色到该文g中:

<role name=”manager?gt;

你同样需要有一个角色ؓ“manager”的用户。像已经存在的用户那Pd一个新用户Q改变密码其更加安全)Q?br />
<user name="manager" password="deep_dark_secret" roles="manager"/>

然后重新启动TomcatQ访问http://localhost/manager/listQ将看到一个很朴素的文本型理界面Q或者访问http://localhost/manager/html/listQ将看到一个HMTL的管理界面。不是哪种方式都说明你的Manager Web Application现在已经启动了?br />
Manager application让你可以在没有系l管理特权的基础上,安装新的Web应用Q以用于试。如果我们有一个新的web应用位于/home/user/hello下在Qƈ且想把它安装?/hello下,Z试q个应用Q我们可以这么做Q在W一个文件框中输入?hello”(作ؓ讉K时的pathQ,在第二个文本框中输入“file:/home/user/hello”(作ؓConfig URLQ?br />
Manager applicationq允怽停止、重新启动、移除以及重新部|一个web应用。停止一个应用其无法被讉KQ当有用户尝试访问这个被停止的应用时Q将看到一?03的错误——?03 - This application is not currently available”?br />
U除一个web应用Q只是指从Tomcat的运行拷贝中删除了该应用Q如果你重新启动TomcatQ被删除的应用将再次出现Q也是_U除q不是指从硬盘上删除Q?br />
3Q部|一个web应用
有两个办法可以在pȝ中部|web服务?br />1> 拯你的WAR文g或者你的web应用文g夹(包括该web的所有内容)?CATALINA_BASE/webapps目录下?br />2> Z的web服务建立一个只包括context内容的XML片断文gQƈ把该文g攑ֈ$CATALINA_BASE/webapps目录下。这个web应用本n可以存储在硬盘上的Q何地斏V?br />
如果你有一个WAR文gQ你若想部v它,则只需要把该文件简单的拯到CATALINA_BASE/webapps目录下即可,文g必须以?war”作为扩展名。一旦Tomcat监听到这个文Ӟ它将Q缺省的Q解开该文件包作ؓ一个子目录Qƈ以WAR文g的文件名作ؓ子目录的名字。接下来QTomcat在内存中徏立一个contextQ就好象你在server.xml文g里徏立一栗当Ӟ其他必需的内容,从server.xml中的DefaultContext获得?br />
部vweb应用的另一U方式是写一个Context XML片断文gQ然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断q一个完整的XML文gQ而只是一个context元素Q以及对该应用的相应描述。这U片断文件就像是从server.xml中切取出来的context元素一P所以这U片断被命名为“context片断”?br />
举个例子Q如果我们想部v一个名叫MyWebApp.war的应用,该应用用realm作ؓ讉K控制方式Q我们可以用下面这个片断:

<!--  
Context fragment for deploying MyWebApp.war  
-->
<Context path="/demo" docBase="webapps/MyWebApp.war"
        debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"                
        resourceName="UserDatabase"/>
</Context>

把该片断命名为“MyWebApp.xml”,然后拯到CATALINA_BASE/webapps目录下?br />
q种context片断提供了一U便利的Ҏ来部|web应用Q你不需要编辑server.xmlQ除非你x变缺省的部vҎ,安装一个新的web应用时不需要重启动Tomcat?br />

4Q配|虚拟主机(Virtual HostsQ?br />关于server.xml中“Host”这个元素,只有在你讄虚拟L的才需要修攏V虚拟主机是一U在一个web服务器上服务多个域名的机ӞҎ个域名而言Q都好象独n了整个主机。实际上Q大多数的小型商务网站都是采用虚拟主机实现的Q这主要是因拟主直接q接到Internetq提供相应的带宽Q以保障合理的访问响应速度Q另外虚拟主能提供一个稳定的固定IP?br />
Z名字的虚拟主机可以被建立在Q何web服务器上Q徏立的Ҏ是通过在域名服务器QDNSQ上建立IP地址的别名,q且告诉web服务器把d不同域名的请求分发到相应的网늛录。因文章主要是讲TomcatQ我们不准备介绍在各U操作系l上讄DNS的方法,如果你在q方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。ؓ了示范方便,我将使用一个静态的L文gQ因是测试别名最单的Ҏ?br />在Tomcat中用虚拟主机,你需要设|DNS或主机数据。ؓ了测试,为本地IP讄一个IP别名p够了Q接下来Q你需要在server.xml中添加几行内容,如下Q?br />
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Tomcat-Standalone">
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/>
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/>
     <Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
   </Connector>
   <Engine name="Standalone" defaultHost="localhost" debug="0">
     <!-- This Host is the default Host -->
     <Host name="localhost" debug="0" appBase="webapps"
     unpackWARs="true" autoDeploy="true">
       <Context path="" docBase="ROOT" debug="0"/>
       <Context path="/orders" docBase="/home/ian/orders" debug="0"
                      reloadable="true" crossContext="true">
       </Context>
     </Host>

     <!-- This Host is the first "Virtual Host": www.example.com -->
     <Host name="www.example.com" appBase="/home/example/webapp">
       <Context path="" docBase="."/>
     </Host>

   </Engine>
</Service>
</Server>

Tomcat的server.xml文gQ在初始状态下Q只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本Q其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素Q所包含的context元素中必L一个是默认的contextQ这个默认的context的显C\径应该ؓI(例如Qpath=””)?br />
5Q配|基验证QBasic AuthenticationQ?br />容器理验证Ҏ控制着当用戯问受保护的web应用资源Ӟ如何q行用户的n份鉴别。当一个web应用使用了Basic AuthenticationQBASIC参数在web.xml文g中auto-method元素中设|)Q而有用户讉K受保护的web应用ӞTomcat通过HTTP Basic Authentication方式Q弹Z个对话框Q要求用戯入用户名和密码。在q种验证Ҏ中,所有密码将被以64位的~码方式在网l上传输?br />
注意Q用Basic Authentication通过被认为是不安全的Q因为它没有强健的加密方法,除非在客L和服务器端都使用HTTPS或者其他密码加密码方式Q比如,在一个虚拟私人网l中Q。若没有额外的加密方法,|络理员将能够截获Q或滥用Q用L密码。但是,如果你是刚开始用TomcatQ或者你惛_你的web应用中测试一下基于容器的安全理QBasic Authenticationq是非常易于讄和用的。只需要添?lt;security-constraint>?lt;login-config>两个元素C的web应用的web.xml文g中,q且在CATALINA_BASE/conf/tomcat-users.xml 文g中添加适当?lt;role>?lt;user>卛_Q然后重新启动Tomcat?br />
下面例子中的web.xml摘自一个俱乐部会员|站pȝQ该pȝ中只有member目录被保护v来,q用Basic Authenticationq行w䆾验证。请注意Q这U方式将有效的代替Apache web服务器中?htaccess文g?br />
<!--
Define the Members-only area, by defining
a "Security Constraint" on this Application, and
mapping it to the subdirectory (URL) that we want
to restrict.
-->
<security-constraint>
<web-resource-collection>
   <web-resource-name>
     Entire Application
   </web-resource-name>
   <url-pattern>/members/*</url-pattern>
</web-resource-collection>
<auth-constraint>
     <role-name>member</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Club Members-only Area</realm-name>
</login-config>

6Q配|单点登录(Single Sign-OnQ?br />一旦你讄了realm和验证的ҎQ你需要进行实际的用户d处理。一般说来,对用戯言dpȝ是一件很ȝ的事情,你必d量减用L录验证的ơ数。作为缺省的情况Q当用户W一ơ请求受保护的资源时Q每一个web应用都会要求用户d。如果你q行了多个web应用Qƈ且每个应用都需要进行单独的用户验证Q那q看h有点像你在与你的用h斗。用户们不知道怎样才能把多个分ȝ应用整合成一个单独的pȝQ所有他们也׃知道他们需要访问多个不同的应用,只是很迷惑,Z么总要不停的登录?br />
Tomcat 4的“single sign-on”特性允许用户在讉K同一虚拟L下所有web应用Ӟ只需d一ơ。ؓ了用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素卛_Q如下所C:

<Valve className="org.apache.catalina.authenticator.SingleSignOn"
      debug="0"/>

在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,卛_使用。那么,M用户只要dq一个应用,则对于同一虚拟L下的所有应用同h效?br />
使用single sign-on valve有一些重要的限制Q?br />1> value必须被配|和嵌套在相同的Host元素里,q且所有需要进行单炚w证的web应用Q必通过context元素定义Q都位于该Host下?br />2> 包括׃n用户信息的realm必须被设|在同一UHost中或者嵌套之外?br />3> 不能被context中的realm覆盖?br />4> 使用单点d的web应用最好用一个Tomcat的内|的验证方式Q被定义在web.xml中的<auth-method>中)Q这比自定义的验证方式强QTomcat内置的的验证方式包括basic、digest、form和client-cert?br />5> 如果你用单点登录,q希望集成一个第三方的web应用C的网站中来,q且q个新的web应用使用它自q验证方式Q而不使用容器理安全Q那你基本上没招了。你的用hơ登录原来所有应用时需要登录一ơ,q且在请求新的第三方应用时还得再d一ơ。当Ӟ如果你拥有这个第三方web应用的源码,而你又是一个程序员Q你可以修改它,但那恐怕也不容易做?br />6> 单点d需要用cookies?br />
7Q配|用户定制目录(Customized User DirectoresQ?br />一些站点允怸别用户在服务器上发布|页。例如,一所大学的学院可能想l每一位学生一个公共区域,或者是一个ISP希望l一些webI间l他的客P但这又不是虚拟主机。在q种情况下,一个典型的Ҏ是在用户名前面加一个特D字W(~Q,作ؓ每位用户的网站,比如Q?br />
http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username

Tomcat提供两种Ҏ在主Z映射q些个h|站Q主要用一对特D的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfigQuserClass属性应该是几个映射cM一。如果你的系l是UnixQ它有一个标准的/etc/passwd文gQ该文g中的帐号能够被运行中的Tomcat很容易的dQ该文g指定了用Lȝ录,使用PasswdUserDatabase 映射cR?br />
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>

web文g需要放|在?home/users/ian/public_html 或?/users/jbrittain/public_html一L目录下面。当然你也可以改变public_html 到其他Q何子目录下?br />
实际上,q个用户目录Ҏ不一定需要位于用户主目录下里面。如果你没有一个密码文Ӟ但你又想把一个用户名映射到公q?home一L录的子目录里面,则可以用HomesUserDatabasecR?br />
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>

q样一来,web文g可以位于像/home/ian/public_html 或?/home/jasonb/public_html一L目录下。这UŞ式对Windows而言更加有利Q你可以使用一个像c:\homeq样的目录?br />
q些Listener元素Q如果出玎ͼ则必dHost元素里面Q而不能在context元素里面Q因为它们都用应用于Host本n?br />

8Q在Tomcat中用CGI脚本
Tomcat主要是作为Servlet/JSP容器Q但它也有许多传lweb服务器的性能。支持通用|关接口QCommon Gateway InterfaceQ即CGIQ就是其中之一QCGI提供一l方法在响应览器请求时q行一些扩展程序。CGI之所以被UCؓ通用Q是因ؓ它能在大多数E序或脚本中被调用,包括QPerlQPythonQawkQUnix shell scripting{,甚至包括Java。当Ӟ你大概不会把一个Java应用E序当作CGI来运行,毕竟q样太过原始。一般而言Q开发Servlet总要比CGIh更好的效率,因ؓ当用LM个链接或一个按钮时Q你不需要从操作pȝ层开始进行处理?br />
Tomcat包括一个可选的CGI ServletQ允怽q行遗留下来的CGI脚本?br />
Z使Tomcat能够q行CGIQ你必须做如下几件事Q?br />1. 把servlets-cgi.renametojar Q在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下?br />2. 在Tomcat的CATALINA_BASE/conf/web.xml 文g中,把关?lt;servlet-name> CGI的那D늚注释LQ默认情况下Q该D位于第241行)?br />3. 同样Q在Tomcat的CATALINA_BASE/conf/web.xml文g中,把关于对CGIq行映射的那D늚注释LQ默认情况下Q该D位于第299行)。注意,q段内容指定了HTML链接到CGI脚本的访问方式?br />4. 你可以把CGI脚本攄在WEB-INF/cgi 目录下(注意QWEB-INF是一个安全的地方Q你可以把一些不惌用户看见或基于安全考虑不想暴露的文件放在此处)Q或者你也可以把CGI脚本攄在context下的其他目录下,qؓCGI Servlet调整cgiPathPrefix初始化参数。这指定的CGI Servlet的实际位|,且不能与上一步指定的URL重名?br />5. 重新启动TomcatQ你的CGI可以运行了?br />
在Tomcat中,CGIE序~省攄在WEB-INF/cgi目录下,正如前面所提示的那PWEB-INF目录受保护的Q通过客户端的览器无法窥探到其中内容Q所以对于放|含有密码或其他敏感信息的CGI脚本而言Q这是一个非常好的地斏Vؓ了兼容其他服务器Q尽你也可以把CGI脚本保存在传l的/cgi-bin目录Q但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,L定运行Tomcat的用h执行CGI脚本的权限?br />
9Q改变Tomcat中的JSP~译器(JSP CompilerQ?br />在Tomcat 4.1Q或更高版本Q大概)QJSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一个API文档指导开发者在没有启动一个新的JVM的情况下Q用Ant。这是用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表。用v来是Ҏ的,因ؓ你只需要在<init-param> 元素中定义一个名字叫“compiler”,q且在value中有一个支持编译的~译器名字,CZ如下Q?br />
<servlet>
   <servlet-name>jsp</servlet-name>
   <servlet-class>
     org.apache.jasper.servlet.JspServlet
   </servlet-class>
   <init-param>
     <param-name>logVerbosityLevel</param-name>
     <param-value>WARNING</param-value>
   </init-param>
   <init-param>
     <param-name>compiler</param-name>
     <param-value>jikes</param-value>
   </init-param>
   <load-on-startup>3</load-on-startup>
</servlet>

当然Q给出的~译器必dl安装在你的pȝ中,q且CLASSPATH可能需要设|,那处决于你选择的是何种~译器?br />
10Q限制特定主问(Restricting Access to Specific HostsQ?br />有时Q你可能想限制对Tomcat web应用的访问,比如Q你希望只有你指定的L或IP地址可以讉K你的应用。这样一来,只有那些指定的的客L可以讉K服务的内容了。ؓ了实现这U效果,Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?br />
通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ个目录的允许/拒绝指定?br />例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:

<Context path="/path/to/secret_files" ...>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127.0.0.1" deny=""/>
</Context>

如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?br />
--------------------------------------

作者简介:
Jason Brittain是CollabNet公司的一名资pY件工E师Q主要负责Y件底层架构的开发。他已经为Apache Jakarta目做了很多贡献Q多q以来,他一直是一名积极的开源Y件开发者?br />
Ian F. Darwin已经在计机行业工作?0q_?980q开始用UnixQ从1995q开始用JavaQ从1998q开始用OpenBSD。他是两本Oreilly图书的作者:Checking C Programs with lint ?Java CookbookQ还与Jason Brittain合著了Tomcat: The Definitive Guide?br />

]]>
关于SQL Server的inner join与outer joinhttp://www.aygfsteel.com/proglion/archive/2006/04/27/43479.html比尔?/dc:creator>比尔?/author>Thu, 27 Apr 2006 01:59:00 GMThttp://www.aygfsteel.com/proglion/archive/2006/04/27/43479.html 当需要从不止一个表中查询所需要的数据Ӟp用到join?br />
最常用的join方式是inner joinQ其语法规则如下Q?br />     select 字段?from 主要资料?inner join ơ要资料?on <join规则>
以northwind数据库ؓ例,在QA中输入如下脚本:
     select ProductId, ProductName, Suppliers.CompanyName from Products
              inner join Suppliers on Products.SupplierId = Suppliers.SupplierID
注意Qinner join的主要精就是 exclusive , 叫它做排他性吧! 是讲 Join 规则不相W的资料׃被排除掉, 譬如讲在 Product 中有一品的供货商代码?SupplierId), 没有出现在 Suppliers 资料表中, 那么q笔记录便会被排除掉 ?br />
Outer Join 
q款的 Join 方式是一般h比较用到的, 甚至有些 SQL 的管理者也从未用过, q真是一件悲哀的代? 因ؓ善用 Outer Join 是可以简化一些查询的工作? 先来看看 Outer Join 的语法?
Select <要查询的字段> From <Left 资料?gt; 
<Left | Right> [Outer] Join <Right 资料?gt; On <Join 规则> 
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包Ҏ吧! 不同于 Inner Join 的排他? 因此在 Left Outer Join 的查询结果会包含所有 Left 资料表的资料, 颠倒过来讲, Right Outer Join 的查询就会包含所有 Right 资料表的资料, 接下来我们还是来做些实际操作, 仍然是用北风数据库, 但要先做一些小的修改, 才能辑ֈ我们要的l果 
首先要拿掉 Products 资料表的 Foreign Key, 否则没有法度在 Products 资料表新增一W SupplierId 没有Ҏ刊WSuppliers 资料表的U录, 要知׃个资料表的 Constraint 你可以执行 SQL 内徏的 sp_helpconstraint , 在 QA 执行 
sp_helpconstraint Products 
接下来删除 FK_Products_Suppliers q个 Foreign Key 
Alter Table Products 
Drop Constraint FK_Products_Suppliers 
再来新增一W纪录于 Products 资料? SupplierId 使用 50 是因为它q没有对映到 Suppliers 资料表中的记录?
Insert Into Products (ProductName,SupplierId,CategoryId) 
values ('Test Product','50','1') 
现在我们再执行头前的查询, 只是 Inner Join 改ؓ Left Outer Join 
Select ProductId, ProductName, Suppliers.SupplierId 
From Products 
Left Outer Join Suppliers 
Products.Suppliers = Suppliers.SupplierId 
比较一下两U Join 方式的查询结? 你应该就会知影其中的差别! 
再来看看 Right Outer Join, h增下底这W记录?
Insert Into Suppliers (CompanyName) 
values ('LearnASP') 
现在请用 Right Out Join 来作查询, 比较看看查询的结果和 Inner Join 有什么不? 
L不相W纪录?
q里我们来看看如何用 Out Join 来找不相W纪? 可能是有子纪录却没有父纪录或是颠倒过来?
Select Suppliers.CompanyName From Products 
Right Join Suppliers 
On Products.SupplierId = Suppliers.SupplierId 
Where Products.SupplierId is Null 
执行l果你会扑ֈ一W资料ؓ LearnASP, 该笔供货商资料存? 但基本上已经没有产品是来自这个供货商, 惌一下如果不用 Outer Join 你要怎么以一个 SQL 指o完成同一查询l果! 知道 Outer Join 的好用了? 再执行?
Select Products.ProductName 
From Products 
Left Join Suppliers 
On Products.SupplierId = Suppliers.SupplierId 
Where Suppliers.SupplierId is Null 
q个查询l果你会发现 Test Product q项产品竟然找不C货商的资? 



]]>
վ֩ģ壺 ƽ| ʼ| | ³| ֦| | | | | ˫Ѽɽ| ͤ| | | | ϳ| | | ʳ| | | ƽ| | | | ͨ| | | ̶| | ˮ| | | ֬| ƽ| ͨμ| | | | | ʱ| |