用Ant实现HelloServlet程序

    我们都知道Eclipse是一款针对Java开发的优秀的IDE,可说是近乎完美,但我们仍然有理由脱离Eclipse来进行Java程序的开发。
    我们的理由主要有三点:
    1、使用IDE无疑会掩盖开发过程中的某些细节,而我们恰是喜欢捕捉细节的DIY爱好者
    2、从某种程序上来说,脱离鼠标可以提高我们的工作效率,很多事实也很好的验证了这一点
    3、Eclipse的启动显得异常的慢,而且在操作时有时还会冷不丁的卡一下,很是突然
    4、鼠标点击操作不能很顺利地被记录并组织,不具有可再现性,这无疑是一个致命的打击
    当然,很想补充一下第三点,可能本人平时做坏事太多,Eclipse竟然会在我点它几下后未经充许私自关掉,而且都不给错误提示看。嗯,好吧,那就不用你了。
    脱离了IDE,该找到一个项目管理工具吧。我们知道在写C程序时有make工具可用,写Java程序当然也应该有这样的工具,它就是Ant。
    可以说Ant是make工具的补充和完善版本,继承了make的思想,完善了make的缺陷。跟make一样,它需要一个文件来说明规则,不同的是Ant用的是build.xml文件。好了,这是一个xml文件,我们不用再去纠结语法了。
    好了,下面来看看我们是怎么来用Ant完成HelloServlet的吧。
    首先,让我们来安装Ant。xxooxxoo...,请读者自行享受DIY的乐趣。
    再先,我们需要一份Ant的User Manual文件,请戳此处:http://icarus.cs.weber.edu/~dab/cs3230/Ant.pdf


    好了,先喝口水,让我们开始吧。
    build.xml的思想继承自Makefile文件,一个项目由若干个目标组成,而这些目标之间存在着这样那样的依赖关系(注意:一个目标可以不与其它目标产生任何关系,这是Ant可以接受的)。在这里我们的终极目标是显示说明的,写在根标签<project>的default属性里。
    我们先来看一下build.xml的几个重要标签吧。
    property:这是一个定义属性值的标签,name指定属性的名字,value指定属性的值。

              好,我们先来定义一个“变量”。


<property name="src.dir" value="src" />


              对于这个标签的使用,很显然的,再讲下去会侮辱到我们的智商。

    target:可以说这是build.xml中最常用的一个标签,它的作用类似于Makefile中的目标文件,不过在这里它的意思是目标而非确定的文件,所谓目标,就是一组操作。


<target name="prepare" depends="clean">
    <mkdir dir="${webapp.classes}" />
</target>


            这一段xml文件定义了一个名为prepare的目标,它依赖于另一个目标clean。我们把目标实现放在标签体中,此处的mkdir功能即建立一个文件夹,dir给出文件夹名字。嗯,有一点儿java web开发经验的我们都知道${webapp.classes}就是引用的property的值了。
    按理说有了make的思想再加上对property和target标签的理解,在User Manual的辅助下,我们便可以写出一个像样的build.xml文件来了。为了让一切看上去更顺利更合理一点儿,我们决定还是应该多补充一点看上去本该理所当然的知识。

    好吧,这里是一些文件目录等的相关操作,够简洁,够明了。


<mkdir dir="/some/directory" />
<move file="form.file" tofile="to.file" />
<delete dir="/some/directory" />


    再来几个java相关的操作。


<javac srcdir="source/directory" destdir="destent/directory" />
<war destfile="somewhere/dest.war" webxml="another/web.xml">
    <fileset dir="somefiles" />
    <lib dir="liblablabla" />
    <classes dir="classesblablabla" />
</war>


        war文件即为我们要得到的整个工程的打包文件,属性webxml指定了配置文件的位置。


    好了,我们要进行HelloServlet开发了,首先我们要选择一种目录组织方式,如果你在犹豫不决,那就这样吧
        HelloServlet
            ├── src
            └── WebContent
                ├── classes     (项目需要自动生成的目录)
                ├── lib
                └── WEB-INF
    不得不说的是,并不是所有的人都喜欢DIY。对于像我这种不喜欢DIY的家伙(好吧,我先叛变一会儿),那这里才是开始。这是step by step的开始。

    我们先建立package,然后编辑HelloServlet文件。


mkdir -p src/com/pysnow/helloservlet && vim src/com/pysnow/helloservlet/HelloServlet.java

package com.pysnow.helloservlet;

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


public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("Hello, Servlet");
    }
}



    在程序里面我们用到了javax.servlet,于是乎我们把javaee-api-6.0.jar拷到WebContent/lib里面,当然,如果你拷贝的是servlet-api.jar文件,说明你知道该怎么做。

    然后写一个web.xml来配置我们的工程。


vim WebContent/WEB-INF/web.xml


<?xml version="1.0" encoding="utf-8"?>
<web-app>
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.pysnow.helloservlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>


    到此为止,我们的项目就已经五脏俱全了。是不是有一点突然,没办法,第一个入门程序都是以简短著称的,意犹未尽也只能点到为止了。

    现在我们来写Ant依赖的build.xml文件。


<?xml version="1.0"?>
<project name="helloservlet" default="war" basedir=".">
    <property name="src.dir" value="src" />
    <property name="webapp.dir" value="WebContent" />
    <property name="webapp.classes" value="${webapp.dir}/classes" />
    <property name="webapp.lib" value="${webapp.dir}/lib" />


    <path id="project.class.path">
        <fileset dir="${webapp.lib}">
            <include name="*.jar" />
        </fileset>
    </path>


    <target name="clean"
            description="delete the temporary directory">
        <delete dir="${webapp.classes}" />
    </target>


    <target name="prepare" depends="clean"
            description="make the needed directory">
        <mkdir dir="${webapp.classes}" />
    </target>


    <target name="compile" depends="prepare"
            description="compile the java files">
        <javac srcdir="${src.dir}" destdir="${webapp.classes}">
            <classpath refid="project.class.path" />
        </javac>
    </target>


    <target name="war" depends="compile"
            description="war the project files">
        <war destfile="${basedir}/HelloServlet.war"
             webxml="${webapp.dir}/WEB-INF/web.xml">
             <lib dir="${webapp.lib}" />
             <classes dir="${webapp.classes}" />
        </war>
    </target>
</project>


    这里有一个新的标签<path>,因为javac时用到了外部的jar包,所以用path指定了外部jar包的位置,即我们先前放在lib文件夹底下的jar文件。


    好了,该做的都已经做完了,接下来的工作就交给Ant吧。
    Ant<Cr>
    blablablabla...
    Build Success
    完成了,我们看到在根目录下有一个HelloServlet.war文件,这个就是我们需要的文件。把它放到tomcat/webapps底下并启动tomcat,打开浏览器输入localhost:8080/HelloServlet/hello就可以看到Hello, Servlet了。
    嗯,果然神奇。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值