1.为什么要 ?
学习Java,深入理解其技术原理!!!
便于布署,编译为class文件,或打为war包。
在一些场合我们不能直接利用IDE帮我们完成这项工作,譬如在Openfire的二次开发过程中,整个项目利用ant,手工编写build.xml文件编译,其中包含许多jsp文件,我们必须将其编译为servlet,并动态生成一些配置文件,然后内嵌的Jetty才能正常按我们的意愿工作。
2.编译时需要用到的类库:
jasper.jar;servlet-api.jar;el-api.jar;catalina.jar;catalina-ant.jar;jasper-el.jar;jasper-jdt.jar;
tomcat-juli.jar;jsp-api.jar;
以上类库一般在bin、lib目录下。
我们将需要的类库考入lib下
编译类:jasper.jar中的org.apache.jasper.JspC类
可能少了ant包,需要下载!
3.编译参数:
编译参数说明:
-compile 表示要编译生成的java文件
-d ./ 定义输出的路径为当前目录 即在此定义输出servlet的目录
-p netjava.cn :定义包名为netjava 指定包名
-d classes :编译后存放目录
-javaEncoding GBK :编码为GBK
-webapp webapp:编译webapp目录下的jsp
执行命令:
java -cp jasper.jar;servlet-api.jar;el-api.jar;catalina.jar;catalina-ant.jar;jasper-el.jar;jasper-jdt.jar;
tomcat-juli.jar;jsp-api.jar;ant.jar org.apache.jasper.JspC
<java classname="org.apache.jasper.JspC" fork="true">
<classpath>
<pathelement location="${java.home}/../lib/tools.jar"/>
<pathelement path="${compile.dir}"/>
<path refid="jspc.dependencies"/>
</classpath>
<arg line="-uriroot '${jspc.jsp.src.dir}'"/> <!--表示会把指定目录下的所有jsp都转换成servlet-->
<arg line="-d '${jspc.java.dest.dir}'"/> <!--定义输出的路径-->
<arg line="-p org.jivesoftware.openfire.admin"/> <!--定义包名-->
<arg line="-webinc '${jspc.dest.dir}/web.partial.xml'"/> <!--生成servlet的默认配置-->
</java>
4.编写一个测试jsp文件进行编译
首先,编写测试用jsp文件:netjava.jsp;
下lib(放了以上类库)的目录下,新建一个webapp目录,将netjava.jsp拷入;
执行完整的编译命令:
java -cp jasper.jar;servlet-api.jar;el-api.jar;catalina.jar;ant.jar;catalina-ant.jar;jasper-el.jar;
jasper-jdt.jar;tomcat-juli.jar;jsp-api.jar; org.apache.jasper.JspC -webapp webapp -uriroot
webapp -compile -webxml web.xml -d classes -javaEncoding GBK -p netjava.cn
结果:
生成web.xml文件和classes目录.
5.在tomcat的webapps下新建一个目录,netjava(不一定要同名)
在其下新建WEB-INF目录,将上面生成的web.xml和classes目录考入
6.OK,在IE里测试下!(根据web.xml中配置的servlet名)
一般是http://localhost:8080/netjava/netjava.jsp
7.打war包:
在netjava目录下执行:
jar -cvf netjavacompile.war -c WEB-INF\
将生成的war入到webapps下,服务器会自动加载
摘自:http://m.cnblogs.com/39814/1367526.html?full=1