Java中基于Aspectwerkz的AOP(2)
四、安装
本文将以一个简单的Web应用程序为例,它用Ant编译,部署在Tomcat 4+ Servlet容器上。下面我们假定读者己准备好上述环境,包括JVM 1.3+,同时Tomcat被设置成从webapps文件夹自动部署应用,自动将WAR扩展到目录(这是Tomcat默认的操作方式,因此只要你尚未修改Tomcat的运行方式,下面的范例可直接运行)。我们将把Tomcat的安装位置称为%TOMCAT_HOME%。
⑴ 从http://apectwerkz.codehaus.org/下载Aspectwerkz,解开压缩到适当的位置。我们将把这个位置称为%ASPECTWERKZ_HOME%。
⑵ 设置%ASPECTWERKZ_HOME%环境变量。
⑶ 将Aspectwerkz加入到PATH环境变量,即设置set PATH=%PATH%;%ASPECTWERKZ_HOME%inaspectwerkz
⑷ 下载本文的示范程序,将它放入%TOMCAT_HOME%webapps文件夹。
⑸ 将Aspectwerkz的运行时类加入到Tomcat的classpath。你可以将它的JAR文件放入示例应用的WEB-INFlib文件夹,或放入%TOMCAT_HOME%commonlib。
五、编译示例应用
如果你想深入研究一下本文的示例应用,可以解开WAR文件提取它的内容。你会发现根目录下有一个aspectwerkz.xml文件,构造应用时它会被复制到WEB-INF/classes目录。Servlet和advice的源文件在WEB-INF/src目录下,另外还有一个构建这些类的ANT脚本。
在运行这个示例程序之前,你还要对它进行后期编译。下面是具体的操作步骤:
⑴ 在命令行窗口中,转到解开WAR文件的目录。
⑵ 输入下面的命令调用AW编译器:aspectwerkz -offline aspectwerkz.xml WEB-INF/classes -cp %TOMCAT_HOME%commonlibservlet.jar。如后期编译顺利通过,应看到下面的输出:
( 1 s )
SUCCESS: WEB-INFclasses
在构建文件中有一个名称为war的ANT任务,你可以用它重新创建WAR文件。
六、运行示例应用
首先启动(或重新启动)Tomcat,然后在浏览器中打开http://localhost:8080/demo/。
页面打开后,可以看到一个带二个输入框的HTML表单,一个输入名字,一个输入邮件地址。输入一些数据,然后点击按钮提交表单,出现一个页面显示出联系人信息和一个指向联系人清单的链接。
七、代码分析
JSP页面就不分析了,现在我们对它不感兴趣。我们来看看AOPServlet的代码。
package example;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AOPServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Person person = new Person();
if (request.getParameter("name") != null) {
person.setName(
request.getParameter("name"));
}
if (request.getParameter("email") != null) {
person.setEmail(
request.getParameter("email"));
}
request.setAttribute("person", person);
RequestDispatcher rd =request.getRequestDispatcher("/view.jsp");
rd.forward(request, response);
}
}
在这个例子中,Servlet的代码己尽量精简,只包含一些必不可少的代码,如创建了一个绑定请求参数的对象等,但没有持久化操作,不需要额外的imports,它只实现了作为Servlet必须实现的最基本的操作。