一、 配置eclipes开发环境
首先,下载需要的插件:
[说明] 现在最高版本的ajdt支持到eclipse
2、下载完成后解压进行安装:help -> softwareupdate -> find and install -> …from local….
3、进行配置window -> perspective 配置aspectj: 不需要特别配置 配置lomboz: A、设置jdk tools.jar位置,为安装的j2sdk目录 B、配置server definition:选择Apache Tomcat : tomcat5.0.x,设置其Server lib和project lib,可以把%tomcat_home%/common/lib一些相关的包都放进去,有可能是必须放,注意,某些版本据说可能是 \servers,tomcat5.0.x配置文件tomcat50x.server文件,将两处-Djava.endorsed.dirs=, 修改为如下: -Djava.endorsed.dirs="${serverRootDirectory}/common/endorsed"
4、配置window -> customize perspective,将aspectj和lomboz相关的项目都给添加到new中,这样就可以通过“新建“来建立相应的工程文件。
二、 集成AspectJ到Web工程中
5、新建一个AspectJ工程
6、在此工程中新建一个Lomboz J2EE Module
7、新建一个Servlet,并设置其url-mapping
/* * Created on * * @Author:Jonathan Q. Bo from tju.msnrl * MyBlog:http://blog.csdn.net/jonathan_q_bo * */ package org.tju.msnrl.jonathan.aspectj;
import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/** * @author Administrator * 2005-8-3 14:46:22 */ public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //TODO Method stub generated by Lomboz ServletOutputStream out = response.getOutputStream( ); out.println("<h1>Hello World from an aspect-oriented Servlet!</h1>"); } }
8、新建一个Aspect,拦截其doGet(..),在其执行之前和之后作相应的advice
/* * Created on * * @Author:Jonathan Q. Bo from tju.msnrl * MyBlog:http://blog.csdn.net/jonathan_q_bo * */ package org.tju.msnrl.jonathan.aspectj;
import java.io.IOException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/** * @author Administrator * 2005-8-3 15:43:54 */
public aspect HelloWorldAspect {
public pointcut captureHttpRequest(HttpServletRequest request, HttpServletResponse response) : execution(public void HelloWorld.doGet(HttpServletRequest, HttpServletResponse)) && args(request, response);
before(HttpServletRequest request, HttpServletResponse response) throws IOException : captureHttpRequest(request, response) { response.setContentType("text/html"); ServletOutputStream out = response.getOutputStream( ); out.println("<html>"); out.println("<head><title>Adding a title using AspectJ!</title></head>"); out.println("<body>"); }
after(HttpServletRequest request, HttpServletResponse response) throws IOException : captureHttpRequest(request, response) { ServletOutputStream out = response.getOutputStream( ); out.println("</body>"); out.println("</html>"); }
}
9、部署工程,默认会将工程打包成war文件部署,试验发现,war文件执行时会报错,所以,需要改写build.xml文件,原build.xml文件将编译好的文件统一放到dist文件夹中,然后对其打包war,简单修改,只需要将打包过程去掉,将dist文件夹直接拷贝到tomcat_home/webapps/下就可以了
<project name="webmodulebuilder" default="deploy" basedir=".">
<!-- set global properties for this build --> <property file="build.properties"/> <property name="dist" value="../../dist" /> <property name="deploy.dir" value="C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/rbac" /> <property name="web" value="../" />
<target name="init"> <!-- Create the dist directory structure used by compile and copy the deployment descriptors into it--> <mkdir dir="${dist}"/> <mkdir dir="${dist}/WEB-INF"/> <mkdir dir="${dist}/WEB-INF/classes"/> <mkdir dir="${dist}/WEB-INF/lib"/> <copy todir="${dist}"> <fileset dir="${web}"> <include name="**/*.*"/> <exclude name="**/*.java"/> <exclude name="**/jsp_servlet/*.class"/> <exclude name="**/build.xml"/> <exclude name="**/deploy.xml"/> <exclude name="**/build.properties"/> <exclude name="**/servers.xml"/> <exclude name="**/targets.xml"/> <exclude name="**/*.war"/> </fileset> </copy> <copy todir="${dist}/WEB-INF/classes"> <fileset dir="${project.dir}/${bin.dir}"> <include name="**/*.*"/> <exclude name="**/jsp_servlet/*.class"/> <exclude name="**/*.java"/> </fileset> </copy>
</target>
<target name="deploy" depends="undeploy,init" > <mkdir dir="${deploy.dir}/rbac"/> <copy todir="${deploy.dir}/rbac"> <fileset dir="${dist}"> <include name="**/*.*"/> </fileset> </copy>
<!-- Create the distribution directory --> <!--<delete file="${war}.war" failonerror="false" /> <jar jarfile="${war}.war" basedir="${dist}" manifest="${dist}/META-INF/MANIFEST.MF"/> <copy file="${war}.war" todir="${deploy.dir}"/>--> <!--<delete file="${war}.war" failonerror="false" />--> <!--<delete dir="${dist}" failonerror="false" />-->
</target>
<target name="deployTool"> <ant antfile="./deploy.xml" dir="." target="deploy" inheritall="true"> </ant> </target>
<target name="undeploy"> <!-- Sometimes you can undeploy with deleting the module file but it is best dealt on an appserver basis at undeployTool target --> </target> <target name="undeployTool"> <ant antfile="./undeploy.xml" dir="." target="undeploy" inheritall="true"> </ant> </target>
</project>
10、打开J2EE Lamboz View,选中Lomboz J2ee Module -> 部署 deploy -> 运行服务器 Run server
11、在浏览器中输入地址访问,会出现如下结果,
Hello World from an aspect-oriented Servlet!
成功! |
|