download tomcat7 ,
1.使用者變數JAVA_HOME ===> C:\Program Files (x86)\Java\jdk1.7.0_06
系統變數 path ===>C:%JAVA_HOME%\bin
系統變數 path ===>C:%JAVA_HOME%\bin
2.啟動 tomcat => cmd=> cd C:\Program Files\apache-tomcat-7.0.56\bin , startup
3.在網址列打上 http://127.0.0.1:8080/ (管理介面)
4.設定Tomcat目錄下的conf資料夾內的tomcat-users.xml
<role rolename="manager-gui"/> <user username="lewis" password="lewis" roles="manager-gui"/>
===============================================================================
eclipse基本流程
- Servlet網站的Project類型是Dynamic Web Project。
- 可以在Web.xml裡面設定Servlet對應路徑等,這邊勾選的"Generate web.xml deployment descriptor"指的就是那個xml(也叫做Deployment Descriptor)
- 增加一個Servlet,對新建的project點右鍵選New->Servlet:
- 預設URL Mapping是對應到和這個Servlet名稱一樣(這個例子是HelloWorld),可以修改Pattern
- 設定Target Runtime
如果沒有設定Target Runtime這個時候Servlet沒有辦法Build。因為會需要Servlet相關物件,因此需要加入對應的實作class。使用Tomcat,所以要先把他加入才可以。
先加一個Tomcat的Server。在View 「Servers」裡面選擇新增,並且選Tomcat 7(路徑同上一篇) - 最後需要把那個Server的class加進去。對Project點右鍵「Properties」找到"Java Build Path"選擇"Add Library"選"Server Runtime"
- 增加get顯示頁面
回到「HelloWorld.java」,設定doGet()的內容:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String requestUri = request.getRequestURI();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello world</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World from frisrt servlet");
out.println("<form action='" + requestUri + "' method='post'>");
out.println("<input type='text' name='name' />");
out.println("<input type='submit' value='submit' />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
增加post顯示頁面
這邊是把輸入的東西在顯示出來:
這邊是把輸入的東西在顯示出來:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello world</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello: " + name);
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
把Server Start起來以後,可以再IE直接輸入: http://localhost/ServletSample/TestServlet
===============================================================================
設定Servlet連接
如何把一個Servlet從另一個Servlet區分呢?
- 靠設定檔。
- Servlet 3.0後增加了@WebServlet 標註功能
- java reflection and invoke
1. 靠設定檔
基本上會有一個Web.xml檔案(或者可以用annotation的方式設定),告訴我們的Container(Tomcat)當某一個路徑進來的時候,呼叫哪一個Servlet來處理。
servlet
這裡面的設定比較像servlet的對應。
這個裡面一定會有包含兩個element:
servlet-name:表示代表這個servlet的名字,方便其他部份reference。在整個web.xml是不可以重複的。
servlet-class:代表著這個servlet的Class名稱。這邊需要Fully Qualified Name, 也就是包含package名稱
那servlet下面還可以代入預設參數。這個意思是,我們可以再處理request的時候,透過getInitParameter()的方式讀取一些預設在這邊的參數。
格式是init-para表示一個參數,而其下面則是param-name和param-value代表著key, Value。
servlet設定範例<servlet> <servlet-name>Log4JInitServlet</servlet-name> <servlet-class>com.ws.controller.Log4JInitServlet</servlet-class> <init-param> <param-name>log4j-properties-location</param-name> <param-value>/WEB-INF/properties/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
servlet-mapping
這個部份是要設定什麼路徑使用什麼Servlet。
有兩個基本element:
servlet-name:那一個servlet要對應到(上面設定servlet-name的對應)
url-pattern:相對路徑下面所要對應。
servlet-mapping設定範例<servlet-mapping> <servlet-name>Log4JInitServlet</servlet-name> <url-pattern>/Log4JInitServlet</url-pattern> </servlet-mapping>表示只要url進來對應為/Log4JInitServlet,就使用在servlet定義的那個servlet-class作為處理的object。
2. Servlet 3.0後增加了@WebServlet 標註功能
Servlet 3.0後增加了@WebServlet 標註功能
只要Servlet上有這行標註,container就會自動讀取資訊
範例中的標註指的是這支Servlet會處理經由 /Log4JInitServlet這個虛擬路徑來的HTTP請求
@WebServlet標籤還能透過參數做更多的設定:
@WebServlet(name="Log4JInitServlet", urlPatterns={"/Log4JInitServlet"}, loadOnStartup=1)
1 and 2 's result
- 所以將標註當成預設值,web.xml進行管理也是可以的
- 設定的套用順序會是 標註 -> web.xml
3. java reflection and invoke
- 之後再補充這部分
===============================================================================
Deploy web service
[1]use tomcat manager to load XXX,war , xxx is your project be exported
[2] 在C:\Program Files (x86)\apache-tomcat-7.0.56\webapps 下創建一個資料夾,
"結構 如附圖" or eclipse
WEB-INF底下必須放置名為 web.xml的部屬描述檔
META-INF下的MANIFEST.MF宣告程式庫的相依性
有需要再設定即可,一般不用管它
ib資料夾底下放置會被引用到web application的JAR檔
web application使用類別時,會先到classes裡尋找是否有該類別檔案
如果沒有就再到container實作中放classes檔的地方或lib目錄底下尋找
problem
回覆刪除[1] if tomcat use window7 64 bit , jdk too
[2] 砍掉tomcat7後 無法再新增一次
1. Close Eclipse
In {workspace-directory}/.metadata/.plugins/org.eclipse.core.runtime/.settings delete the following two files:
* org.eclipse.wst.server.core.prefs
* org.eclipse.jst.server.tomcat.core.prefs
2. Restart Eclipse
B Starting and Stopping the Tomcat Server
回覆刪除http://docs.oracle.com/cd/E20593_01/doc.560/e23613/app_tomcat.htm