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) 編輯 收藏 所屬分類: 學習筆記