在我們開發Web程序的過程,可能您也遇到過這樣的問題,如果你正在開發一個web程序,然后發布到tomcat下面,那么,你在修改類的代碼的時候,要想生效,就要重新啟動tomcat,
這樣就很麻煩,也影響效率。
其實,這個問題還是有辦法解決的。下面是我在從網上看了一些資料后,自己總結和使用的方法。
開發環境:
Eclipse3.3?+?Tomcat6.0.14?+?JDK1.6
開發環境的安裝和配置略。
類自動編譯的實現步驟是:
1)?修改tomcat\conf\server.xml
添加下面的紫色部分的代碼,內容和位置如下:
??<Service?name="Catalina">
?
?<!--??zhangyi?add?to?reload?servlet?automaticly?-->
?<DefaultContext?reloadable="true"/>
????<!--The?connectors?can?use?a?shared?executor,?you?can?define?one?or?more?named?thread?pools-->
????<!--
????<Executor?name="tomcatThreadPool"?namePrefix="catalina-exec-"?
????????maxThreads="150"?minSpareThreads="4"/>
????-->????
????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received
?????????and?responses?are?returned.?Documentation?at?:
?????????Java?HTTP?Connector:?/docs/config/http.html?(blocking?&?non-blocking)
?????????Java?AJP??Connector:?/docs/config/ajp.html
?????????APR?(HTTP/AJP)?Connector:?/docs/apr.html
?????????Define?a?non-SSL?HTTP/1.1?Connector?on?port?8080
????-->
????<Connector?port="8080"?protocol="HTTP/1.1"?
???????????????connectionTimeout="20000"?
???????????????redirectPort="8443"?/>
2)??在tomcat\conf\Catalina\localhost下面添加工程的發布配置文件
如:zysd.xml文件,發布我的工程zysd
配置代碼如下:
<Context?docBase="H:\\WorkSpace3.3\\ZY-STRUTS-DEMO\\WebRoot"?path="/zysd"?reloadable="true">
</Context>
docBase執行你的開發工程的web目錄,這樣你在開發的時候,你的代碼就會自動編譯,但是,要讓編譯生效,還是要加上
reloadable="true"
3)?啟動tomcat,測試
如果上面的配置完畢,就可以生效了。
我的servlet測試代碼如下:
package?org.zy.demo.sd.servlet;
import?java.io.IOException;
import?java.io.PrintWriter;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?org.zy.demo.sd.ImageUtil;
public?class?CollectParam?extends?HttpServlet?{
?public?CollectParam()?{
??super();
?}
?public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
???throws?ServletException,?IOException?{
?
??response.setContentType("text/html");
??
??PrintWriter?out?=?response.getWriter();
??out
????.println("<!DOCTYPE?HTML?PUBLIC?\"-//W3C//DTD?HTML?4.01?Transitional//EN\">");
??out.println("<HTML>");
??out.println("??<HEAD><TITLE>A?Servlet</TITLE></HEAD>");
??out.println("??<BODY>");
??out.print("????This?is?");
??out.print("<br>");
??out.print(this.getClass());
??out.println("<br>");
??
??//out.println(ImageUtil.getImageUrl("map.png"));
??
??out.println("<br>");??
??out.println("using?the?GET?method");
??out.println("??</BODY>");
??out.println("</HTML>");
??out.flush();
??out.close();
?}
?public?void?init()?throws?ServletException?{
??//?Put?your?code?here
?}
}
測試url為:http://localhost:8080/zysd/servlet/CollectParam
結果如下:
This?is?
class?org.zy.demo.sd.servlet.CollectParam
using?the?GET?method?
入后我就寫了一個測試類:
package?org.zy.demo.sd;
public?class?ImageUtil?{
?public?static?String?getImageUrl(String?imgName){
??return?"/images/view/"+imgName;
?}
}
然后,在上面的servlet里面調用如下:
out.println(ImageUtil.getImageUrl("map.png"));
也就是,直接寫完類,就可以測試上面的鏈接,結果如下:
This?is?
class?org.zy.demo.sd.servlet.CollectParam
/images/view/map.png?
using?the?GET?method?
由此可見,修改已經生效。
我們可以看一下控制臺的輸出:
信息:?Initialization?processed?in?2712?ms
2007-9-21?15:55:53?org.apache.catalina.core.StandardService?start
信息:?Starting?service?Catalina
2007-9-21?15:55:53?org.apache.catalina.core.StandardEngine?start
信息:?Starting?Servlet?Engine:?Apache?Tomcat/6.0.14
log4j:WARN?No?appenders?could?be?found?for?logger?(org.apache.struts.uti
tyMessageResources).
log4j:WARN?Please?initialize?the?log4j?system?properly.
2007-9-21?15:56:04?org.apache.coyote.http11.Http11Protocol?start
信息:?Starting?Coyote?HTTP/1.1?on?http-8080
2007-9-21?15:56:04?org.apache.jk.common.ChannelSocket?init
信息:?JK:?ajp13?listening?on?/0.0.0.0:8009
2007-9-21?15:56:04?org.apache.jk.server.JkMain?start
信息:?Jk?running?ID=0?time=0/61??config=null
2007-9-21?15:56:04?org.apache.catalina.startup.Catalina?start
信息:?Server?startup?in?11541?ms
2007-9-21?15:56:34?org.apache.catalina.core.StandardContext?reload
信息:?Reloading?this?Context?has?started
2007-9-21?15:57:15?org.apache.catalina.core.StandardContext?reload
信息:?Reloading?this?Context?has?started
2007-9-21?15:57:27?org.apache.catalina.core.StandardContext?reload
有黑體部分,我們可以知道,其實當前的Context已經在自動重載了。
所以,通過這種開發模式,可以給我們帶來很大的方便。您不妨也試一下,如果有其他的好地新的體會,大家可以共同討論。
|----------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------|