
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
五、编译示例应用
如果你想深入研究一下本文的示例应用,可以解开WAR文件提取它的内容。你会发现根目录下有一个aspectwerkz.xml文件,构造应用时它会被复制到WEB-INF/classes目录。Servlet和advice的源文件在WEB-INF/src目录下,另外还有一个构建这些类的ANT脚本。
在运行这个示例程序之前,你还要对它进行后期编译。下面是具体的操作步骤:
⑴ 在命令行窗口中,转到解开WAR文件的目录。
⑵ 输入下面的命令调用AW编译器:aspectwerkz -offline aspectwerkz.xml WEB-INF/classes -cp %TOMCAT_HOME%\common\lib\servlet.jar。如后期编译顺利通过,应看到下面的输出:
( 1 s )
SUCCESS: WEB-INF\classes
在构建文件中有一个名称为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); } } |
| <advice-def name="persist" class="example.PersistenceAdvice" deployment-model="perJVM"/> |
| <aspect name="servlet"> <pointcut-def name="all" type="method" pattern="* example.*Servlet.doGet(..)"/> <bind-advice pointcut="all"> <advice-ref name="persist"/> </bind-advice> </aspect> |
| package example; import javax.servlet.http.*; import org.codehaus.aspectwerkz.advice.*; import org.codehaus.aspectwerkz.joinpoint.*; public class PersistenceAdvice extends AroundAdvice { public PersistenceAdvice() { super(); } public Object execute(final JoinPoint joinPoint) throws Throwable { MethodJoinPoint jp =(MethodJoinPoint) joinPoint; final Object result = joinPoint.proceed(); Object[] parameters = jp.getParameters(); if (parameters[0] instanceof HttpServletRequest) { HttpServletRequest request =(HttpServletRequest) parameters[0]; if (request.getAttribute("person") != null) { Person contact =(Person) request.getAttribute("person"); ContactManager persistent = new ContactManager(); String fileName =(request.getRealPath("/")+"contacts.txt"); persistent.save(contact, fileName); } } return result; } } |