Tomcat下創(chuàng)建和發(fā)布Web應(yīng)用

           

              前面我們把Tomcat+JDK1.5+MySQL+Eclipse架構(gòu)搭起來(lái)了,接下去的工作是舉一個(gè)小例子讓初學(xué)者明白如何創(chuàng)建和發(fā)布Web應(yīng)用,有了一個(gè)總的框架,這樣大家在做JSP和Servlet的時(shí)候就不會(huì)有一種破損殘缺、缺乏系統(tǒng)的感覺(jué),我的學(xué)習(xí)方式歷來(lái)是由粗到細(xì),先看樹(shù)木再俯瞰森林會(huì)把我弄瘋的......

          1、首先創(chuàng)建Web應(yīng)用的目錄結(jié)構(gòu),我這里在Tomcat的/webapps下面創(chuàng)建一個(gè)Web應(yīng)用的目錄helloapp,這是Web應(yīng)用的根目錄,所有JSP和HTML文件都存放在此目錄下;它下一級(jí)有個(gè)WEB-INF文件夾,它存放web.xml文件和classes、lib文件夾,詳細(xì)后面再說(shuō),先建了。

          2、介紹web.xml文件。這是一個(gè)發(fā)布描述文件,用來(lái)配置發(fā)布信息,包括:Servlet定義;Servlet初始化參數(shù);Servlet以及JSP的映射;安全域配置參數(shù);welcome文件清單;資源引用;環(huán)境變量的定義。閑話少說(shuō),創(chuàng)建web.xml文件,內(nèi)容如下:

          <?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>中放著關(guān)于Web應(yīng)用的配置元素。

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

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

          其中,path指定訪問(wèn)該Web應(yīng)用的URL入口;docBase指定Web應(yīng)用的文件路徑;reloadable如果為true,一旦class文件被更新,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用,當(dāng)然這樣會(huì)加重服務(wù)器運(yùn)行負(fù)荷。

          4、部署HTML文件。在helloapp下創(chuàng)建index.html文件,內(nèi)容如下:

          <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。創(chuàng)建兩個(gè)JSP文件,一個(gè)login.jsp,一個(gè)hello.jsp。前者顯示登陸頁(yè)面,要求輸入用戶名和口令,這個(gè)頁(yè)面鏈接到名為DispatcherServlet的Servlet。后者被這個(gè)Servlet調(diào)用,顯示hello頁(yè)面。如前面所說(shuō),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文件內(nèi)容。

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

          這是hello.jsp文件內(nèi)容。

          6、部署Servlet。創(chuàng)建名為DispatcherServlet.java的文件編譯成Servlet,它調(diào)用HttpServletRequest對(duì)象的getParameter方法讀取提交的loginForm表單數(shù)據(jù),獲取用戶名和口令,然后將用戶名和口令保存在HttpServletRequest對(duì)象的屬性中,在把請(qǐng)求轉(zhuǎn)發(fā)給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);

            //將請(qǐng)求定向到目標(biāo)文件
            ServletContext context=getServletContext();

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

           public void destroy(){
           }
          }

          上述是DispatcherServlet.java文件,用來(lái)編譯成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>

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

          7、部署JSP Tag Library

          Tag Library向用戶提供了自定義JSP標(biāo)簽的功能。我們定義一個(gè)名為mytaglib的標(biāo)簽庫(kù),包含一個(gè)簡(jiǎn)單的hello標(biāo)簽,它能將JSP頁(yè)面中所有的<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標(biāo)簽的類。

          (2)創(chuàng)建Tag Library的描述文件mytaglib.tld文件,這個(gè)文件定義mytaglib標(biāo)簽庫(kù)和hello標(biāo)簽。它存放為/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標(biāo)示符;后者指定Tag Library的描述文件(TLD)的位置。

          (4)在hello.jsp文件中加入hello標(biāo)簽。prefix用來(lái)指定引用mytaglib標(biāo)簽庫(kù)時(shí)的前綴,修改后如下:

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

          經(jīng)測(cè)試OK!

          8、創(chuàng)建并發(fā)布WAR文件。一般來(lái)說(shuō),在Web應(yīng)用的開(kāi)發(fā)階段,為了方便調(diào)試,采用開(kāi)放式的目錄結(jié)構(gòu)來(lái)發(fā)布Web應(yīng)用,這樣方便更新或替換文件。產(chǎn)品發(fā)布時(shí),應(yīng)將整個(gè)Web應(yīng)用打包為WAR文件,再進(jìn)行發(fā)布。

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

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

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

          (4)啟動(dòng)Tomcat服務(wù)器。

          Tomcat服務(wù)器啟動(dòng)時(shí),會(huì)把webapps下所有WAR文件自動(dòng)展開(kāi)為開(kāi)放式的目錄結(jié)構(gòu),變?yōu)?webapps/helloapp目錄。
          文章來(lái)源:http://syneer1981.spaces.live.com/blog/cns!6F8B2C7500427759!120.entry?_c=BlogPart

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          公告

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

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          學(xué)習(xí)園地

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          主站蜘蛛池模板: 陈巴尔虎旗| 清镇市| 开远市| 山丹县| 永兴县| 隆子县| 辽宁省| 友谊县| 兴仁县| 汉中市| 本溪市| 荥阳市| 西林县| 竹北市| 盘山县| 胶州市| 洞口县| 比如县| 通江县| 伊宁市| 开远市| 方城县| 龙江县| 北川| 自贡市| 湛江市| 尤溪县| 郎溪县| 盐城市| 英吉沙县| 万宁市| 高雄市| 花垣县| 邮箱| 公主岭市| 遂宁市| 广州市| 砚山县| 陇南市| 葵青区| 阿克|