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 大头剑客 阅读(1041) 评论(0)  编辑  收藏 所属分类: 学习笔记


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱;
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年;
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员;
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员.
不管前面是地雷阵还是万丈深渊,
我都将勇往直前,义无反顾,
鞠躬尽瘁,死而后已。
—— 朱镕基总理

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

学习园地

最新随笔

搜索

积分与排名

最新评论