Tomcat下創建和發布Web應用

           

              前面我們把Tomcat+JDK1.5+MySQL+Eclipse架構搭起來了,接下去的工作是舉一個小例子讓初學者明白如何創建和發布Web應用,有了一個總的框架,這樣大家在做JSP和Servlet的時候就不會有一種破損殘缺、缺乏系統的感覺,我的學習方式歷來是由粗到細,先看樹木再俯瞰森林會把我弄瘋的......

          1、首先創建Web應用的目錄結構,我這里在Tomcat的/webapps下面創建一個Web應用的目錄helloapp,這是Web應用的根目錄,所有JSP和HTML文件都存放在此目錄下;它下一級有個WEB-INF文件夾,它存放web.xml文件和classes、lib文件夾,詳細后面再說,先建了。

          2、介紹web.xml文件。這是一個發布描述文件,用來配置發布信息,包括:Servlet定義;Servlet初始化參數;Servlet以及JSP的映射;安全域配置參數;welcome文件清單;資源引用;環境變量的定義。閑話少說,創建web.xml文件,內容如下:

          <?xml version="1.0" encoding="ISO-8859-1"?>
            <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
              version="2.4">

            </web-app>

          第一行指定XML的版本和字符編碼,第二行指定文檔類型,<web-app>中放著關于Web應用的配置元素。

          3、在server.xml中加入<Context>元素。server.xml在/conf下,打開后在<host>后面加入如下<Context>元素

              <Context path="/helloapp" docBase="helloapp" debug="0"
               reloadable="true"/>

          其中,path指定訪問該Web應用的URL入口;docBase指定Web應用的文件路徑;reloadable如果為true,一旦class文件被更新,服務器會自動重新加載Web應用,當然這樣會加重服務器運行負荷。

          4、部署HTML文件。在helloapp下創建index.html文件,內容如下:

          <html>
           <head>
            <title>Alec's Addressing</title>
           </head>
           <body>
            <p><font size="7">Welcome to Alec's Home</p>
            <p><a href="login.jsp?language=English">English version</a>
              </body>
          </html>

          在瀏覽器地址欄鍵入http://localhost:8080/helloapp/index.html

          5、部署JSP。創建兩個JSP文件,一個login.jsp,一個hello.jsp。前者顯示登陸頁面,要求輸入用戶名和口令,這個頁面鏈接到名為DispatcherServlet的Servlet。后者被這個Servlet調用,顯示hello頁面。如前面所說,JSP文件都放在helloapp下。

          <html>
           <head>
            <title>Alex's Addressing</title>
           </head>
           <body>
            <br>
            <form name="loginForm" method="post" action="dispatcher">
             <table>
              <tr>
               <td><div align="right">用戶名:</div></td>
               <td><input type="text" name="username"></td>
              </tr>
              <tr>
               <td><div align="right">密碼:</div></td>
               <td><input type="password" name="password"></td>
              </tr>
              <tr>
               <td></td>
               <td><input type="Submit" name="Submit" value="提交"></td>
              </tr>
             </table>
            </form>
           </body>
          </html>

          上述是login.jsp文件內容。

          <html>
          <head>
           <title>Alec's Addressing</title>
          </head>
          <body>
           <b>歡迎:<%=request.getAttribute("USER")%></b>
          </body>
          </html>

          這是hello.jsp文件內容。

          6、部署Servlet。創建名為DispatcherServlet.java的文件編譯成Servlet,它調用HttpServletRequest對象的getParameter方法讀取提交的loginForm表單數據,獲取用戶名和口令,然后將用戶名和口令保存在HttpServletRequest對象的屬性中,在把請求轉發給hello.jsp。

          package mypack;

          import javax.servlet.*;
          import javax.servlet.http.*;
          import java.io.*;
          import java.util.*;

          public class DispatcherServlet extends HttpServlet
          {
           public String target="/hello.jsp";

           public void init(ServletConfig config)
            throws ServletException{
            super.init(config);
           }

           public void doGet(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
            doPost(request,response);
           }

           public void doPost(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
            String username=request.getParameter("username");
            String password=request.getParameter("password");

            request.setAttribute("USER",username);
            request.setAttribute("PASSWORD",password);

            //將請求定向到目標文件
            ServletContext context=getServletContext();

            System.out.println("重定向到"+target);
            RequestDispatcher dispatcher=context.getRequestDispatcher(target);
            dispatcher.forward(request,response);
           }

           public void destroy(){
           }
          }

          上述是DispatcherServlet.java文件,用來編譯成servlet。編譯成class文件后存放位置為/helloapp/WEB-INF/classes/mypack/DispatcherServlet.class;然后在/helloapp下的web.xml中作如下修改:

          <?xml version="1.0" encoding="ISO-8859-1"?>

             <!DOCTYPE web-app PUBLIC

               '-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN'

               'http://java.sun.com/j2ee/dtds/web-app_2_3.dtd'>

              <web-app>


                <servlet>
                  <servlet-name>dispatcher</servlet-name>
                  <servlet-class>mypack.DispatcherServlet</servlet-class>
                </servlet>


                <servlet-mapping>
                  <servlet-name>dispatcher</servlet-name>
                  <url-pattern>/dispatcher</url-pattern>
                </servlet-mapping>


              </web-app>

          說明一下,<servlet-name>定義Servlet的名字;<servlet-class>指定實現這個Servlet的類;<init-param>定義Servlet的初始化參數(包括參數名和參數值),一個<servlet>元素中可以有多個<init-param>元素;<load-on-startup>指當Web應用啟動時,裝載Servlet的次序。當這個值為正數或零時,Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet,如果這個值為負數或者沒有設定,那么Servlet容器將在Web客戶首次訪問這個Servlet時加載它。我這里沒用到后兩個元素。

          7、部署JSP Tag Library

          Tag Library向用戶提供了自定義JSP標簽的功能。我們定義一個名為mytaglib的標簽庫,包含一個簡單的hello標簽,它能將JSP頁面中所有的<mm:hello/>解析為字符串“Hello”。

          (1)

          package mypack;

          import javax.servlet.jsp.JspException;
          import javax.servlet.jsp.JspTagException;
          import javax.servlet.jsp.tagext.TagSupport;

          public class HelloTag extends TagSupport
          {
           public void HelloTag(){}
           public int doEndTag() throws JspException{

            try{
             pageContext.getOut().print("Hello");
            }
            catch(Exception e){
             throw new JspTagException(e.getMessage());
            }

            return SKIP_BODY;
           }

           public void release(){
            super.release();
           }
          }

          這是HelloTag.java文件,編譯成用于處理hello標簽的類。

          (2)創建Tag Library的描述文件mytaglib.tld文件,這個文件定義mytaglib標簽庫和hello標簽。它存放為/WEB-INF/mytaglib.tld。源碼如下:

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
              version="2.4">

           <tlibversion>1.0</tlibversion>
           <jspversion>1.1</jspversion>
           <shortname>mytaglib</shortname>
           <uri>mytaglib</uri>

           <tag>
             <name>hello</name>
             <tagclass>mypack.HelloTag</tagclass>
             <bodycontent>empty</bodycontent>
             <info>Just Says Hello</info>
           </tag>
          </taglib>

          (3)在/helloapp/WEB-INF下的web.xml添加<taglib>元素,如下:

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
              version="2.4">
            <servlet>
             <servlet-name>dispatcher</servlet-name>
             <servlet-class>mypack.DispatcherServlet</servlet-class>
            </servlet>
            <servlet-mapping>
             <servlet-name>dispatcher</servlet-name>
             <url-pattern>/dispatcher</url-pattern>
            </servlet-mapping>

            <taglib>
             <taglib-uri>/mytaglib</taglib-uri>
             <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
            </taglib>

              </web-app>

          <taglib>中包含<taglib-uri>和<taglib-location>屬性。前者指定Tag Library標示符;后者指定Tag Library的描述文件(TLD)的位置。

          (4)在hello.jsp文件中加入hello標簽。prefix用來指定引用mytaglib標簽庫時的前綴,修改后如下:

          <%@ taglib uri="/mytaglib" prefix="mm"%>
          <html>
          <head>
           <title>Alec's Addressing</title>
          </head>
          <body>
           <b><mm:hello/><%=request.getAttribute("USER")%></b>
          </body>
          </html>

          經測試OK!

          8、創建并發布WAR文件。一般來說,在Web應用的開發階段,為了方便調試,采用開放式的目錄結構來發布Web應用,這樣方便更新或替換文件。產品發布時,應將整個Web應用打包為WAR文件,再進行發布。

          (1)MS-DOS下進入/helloapp目錄下鍵入如下命令:jar cvf helloapp.war *.*;

          (2)把helloapp.war拷貝到/webapps目錄下;

          (3)刪除原來的helloapp目錄;

          (4)啟動Tomcat服務器。

          Tomcat服務器啟動時,會把webapps下所有WAR文件自動展開為開放式的目錄結構,變為/webapps/helloapp目錄。
          文章來源:http://syneer1981.spaces.live.com/blog/cns!6F8B2C7500427759!120.entry?_c=BlogPart

          posted on 2007-04-16 00:13 大頭劍客 閱讀(1048) 評論(0)  編輯  收藏 所屬分類: 學習筆記

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          公告

          寫字樓里寫字間,寫字間里程序員;
          程序人員寫程序,又拿程序換酒錢;
          酒醒只在網上坐,酒醉還來網下眠;
          酒醉酒醒日復日,網上網下年復年;
          但愿老死電腦間,不愿鞠躬老板前;
          奔馳寶馬貴者趣,公交自行程序員;
          別人笑我忒瘋癲,我笑自己命太賤;
          不見滿街漂亮妹,哪個歸得程序員.
          不管前面是地雷陣還是萬丈深淵,
          我都將勇往直前,義無反顧,
          鞠躬盡瘁,死而后已。
          —— 朱镕基總理

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          學習園地

          最新隨筆

          搜索

          積分與排名

          最新評論

          主站蜘蛛池模板: 娄底市| 赤水市| 根河市| 绵竹市| 蒲城县| 商水县| 神木县| 潞城市| 长沙市| 青河县| 屯留县| 黑龙江省| 田东县| 安顺市| 晋州市| 辛集市| 曲松县| 越西县| 上蔡县| 安泽县| 息烽县| 登封市| 衢州市| 怀柔区| 宜宾县| 齐河县| 石景山区| 荔波县| 望都县| 安丘市| 通海县| 舒城县| 平江县| 华池县| 四子王旗| 中卫市| 开鲁县| 达拉特旗| 新乡市| 济宁市| 玛曲县|