tomcat 虛擬目錄和目錄瀏覽設置
為了方便開發,需要開設置虛擬目錄和目錄瀏覽。如果是生產環境就不要開放目錄瀏覽。
設置虛擬目錄
先建
d:\site
設置%CATALINA_HOME%\bin\conf\server.conf
<Content path=”/site” docBase=”d:\site” reloadable=”true” debug=”0″/>
保存!
把%CATALINA_HOME%\webapp\ROOT\下的WEB-INF 復制到d:\site下面。
目錄瀏覽
修改
%CATALINA_HOME%\bin\conf\web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
把false設置為true就OK了。
淺析Java中的深拷貝與淺拷
首先我們看看淺拷貝和深拷貝的定義
淺拷貝:只復制壹個對象,對象內部存在的指向其他對象數組或者引用則不復制。
深拷貝:對象,對象內部的引用均復制。
為了更好的理解它們的區別我們假設有壹個對象A,它包含有2對象對象A1和對象A2。
對象A進行淺拷貝後,得到對象B但是對象A1和A2並沒有被拷貝。
對象A進行深拷貝,得到對象B的同時A1和A2連同它們的引用也被拷貝。
在理解了深拷貝和淺拷貝後,我們來看看Java的深拷貝和淺拷貝實現。java.lang.Object的clone()方法默認是返回壹個前拷貝對象。因此如果要用clone()方法實現壹個深拷貝,我們必須對每個對象的clone()方法進行特別實現。當對象層次復雜的時候,這樣做不但困難而且浪費時間和容易出現錯誤,特別有時候妳不但需要深拷貝同時妳也對這個對象進行淺拷貝的時候,妳會發現寫這個clone()方法真不是壹個好的解決方案。
那麽除了clone()方法,我們還可以怎麽實現呢?答案是序列化,實現步驟和思路是把要拷貝的對象輸出成byte array,然後再利用ObjectInputStream轉換出新的對象。下面是代碼:
public static Object copy(Object oldObj) {
Object obj = null;
try {
// Write the object out to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(oldObj);
out.flush();
out.close();
// Retrieve an input stream from the byte array and read
// a copy of the object back in.
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
obj = in.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
return obj;
}
Java聲音技術簡析 (2)
二 java應用程序中的聲音播放
由於在應用程序並不支持AudioClip類。所以播放聲音文件成了壹大難題。制做自己的java播放器或應用媒體方面的java應用程序我們就不能支持聲音了嗎?不是的,sun公司為應用程序中的聲音支持另提供了壹個java新包。sun.audio在這個包下面提供了大部分所需要的聲音處理類。註:sun包下面還有很多很有意思的技術支持,如java2D,Tools等,大家可自己嘗試去使用。
下面我們就來做個自己的聲音播放測試。
import sun.audio.*;
import java.io.*;
public class Sound
{
public static voie main(String args[])
{
try {
FileInputStream fileau=new
FileInputStream(“sloop.au”);
AudioStream as=new AudioStream(fileau);
AudioPlayer.player.start(as);
}
catch (Exception e) {}
}
}
註:上面兩例都沒有提供相應的stop方法,本文章指在方法的嘗試,並非全面文章,但上面的例子都是可用的。
三 javaX中Sound包的應用
當我在進行上面的測試過程中,我發現javaX目錄下也提供了壹個sound包對java聲音的強大支持,並且在sun網站的jjse上可下載到相關的大量例子程序。有誌於聲音處理方向的朋友可下載試試。
Java聲音技術簡析 (1)
Java的魅力之壹就是對多媒體的支持,Appley使得原來沈悶的網頁變得豐富起來,在java.applet中提供了很多功能強大的方法對多媒體的支持。現在我們就java中的聲音技術來分析其中的功能。
壹 在Applet中播放聲音
播放聲音是java對多媒體的支持壹個重要部分。現今流行的聲音格式有wav,mid,au為擴展名的聲音文件。而java現主要支持以au為名的聲音。在Applet中專門提供了類AudioClip來對聲音的支持。
由於Applet的多媒體功能書上都有很清晰的介紹也很簡單。我們就以壹個例子來結束這部分的說明。
import java.applet.*;
public class sounda extends Applet
{
public static void main (String[] args)
{
AudioClip ac = getAudioClip(getCodeBase(), “sloop.au”);
ac.play();
// ac.loop();
// ac.stop();
}
}
上面例子只是很簡單的說明,AudioClip是java中播放類。java中提供了兩個很有用的方法getCodeBase(),getDocumentBase()他們分別返回Applet本身和包含此Applet主頁的URL地址。上面的sloop.au即我機器上的聲音文件。我們在此直接使用了AudioClip的play方法來播放聲音。大家可測試用Applet的圖像功能加入按鈕。
淺談開源Servlet容器Jetty (2)
运行Start类,用IE访问http://localhost:8080/, 点击/manage —> org.mortbay.jetty.webapp.WebAppContext@1275d39{/manage,file:/D:/Program%20Files/MyEclipse%206.5/workspace/Jetty/webapps/manage/} ,此时Jetty就可以成功运行了。
如果要在Jetty中运行servlet,操作过程如下:
<!–[if !supportLists]–>1. <!–[endif]–>在webapps/manage下建立WEB-INF, 并新建web.xml用于配置servlet, 同时将contexts下的webdefalut.xml的内容copy到web.xml里。
<!–[if !supportLists]–>2. <!–[endif]–>修改contexts下的manage.xml,在webapps目录下写jsp程序,并在servlet目录下写相应的servlet处理程序,同时在web.xml里进行配置。
<!–[if !supportLists]–>3. <!–[endif]–>运行Start类,用IE访问http://localhost:8080/, 点击/manage —> org.mortbay.jetty.webapp.WebAppContext@bb05de
到此Jetty运行servlet成功
淺談開源Servlet容器Jetty (1)
Jetty是壹個使用Java語言編寫的開源的servlet容器,它為基於Java的web內容如JSP和servlet提供運行環境。Jetty作為可選的servlet容器只是壹個額外的功能,而它真正出名是因為它是作為壹個可以嵌入到其他的Java代碼中的servlet容器而設計的。這就是說,開發小組將Jetty作為壹組Jar文件提供出來,因此妳可以在妳自己的代碼中將servlet容器實例化成壹個對象並且可以操縱這個容器對象。
Jetty在servlet容器中算不上壹個新面孔,它從1998年就已經嶄露頭角。Jetty的發布遵循了Apache 2.0的開源協議,妳可以在免費軟件和商業軟件中使用Jetty。
下面將介紹在MyEclipse 6.5下使用jetty的全過程。
環境:Windows XP + JDK 1.6.11 + MyEclipse 6.5 + jetty-7.0.0pre3
1. 打開myEclipse, 新建java工程Jetty,建立webapps和 logs文件夾(和src同級),在src下建立config、servlet及test文件夾,在webapps建立manage目錄作為web工作目錄。
2. 將${ROOT}\jetty-7.0.0pre3\lib下的三個jar包加入工程的classpath,將${Root}:\jetty-7.0.0pre3\lib\jsp-2.1下的四個jar包加入工程的classpath,copy ${ROOT}\jetty-7.0.0pre3\etc下的jetty.xml, webdefault.xml和realm.properties到src\config下,同時copy ${ROOT}\jetty-7.0.0pre3\contexts下的test.xml到src\config下並改名為manage.xml。
3. 修改jetty.xml, manage.xml,將這些配置文件中帶有jetty.xml、webdefault.xml及realm.properties的路徑改為src\config,並在webapps/manage下新建index.jsp。
4. 在test目錄下新建Start.java,代碼如下:
1 import org.mortbay.jetty.*;2 3 import java.io.*;4 5 import org.mortbay.jetty.handler.*;6 7 import org.mortbay.xml.*;8 9 public class start {10 11 public static void main(String args[]) {12 13 Server server = new Server(8080);14 15 server.setHandler(new DefaultHandler());16 17 XmlConfiguration cfg = null;18 19 try {20 21 cfg = new XmlConfiguration(new FileInputStream(“./src/com/greysh/config/jetty.xml”));22 23 cfg.configure(server);24 25 server.start();26 27 System.out.println(“Jetty Started …”);28 29 } catch (FileNotFoundException e) {30 31 e.printStackTrace();32 33 }34 35 catch (IOException e) {36 37 e.printStackTrace();38 39 } catch (Exception e) {40 41 e.printStackTrace();42 43 }44 45 }46 47 }




