回答一个“不借助工具,自己编写javaweb项目 如何编译部署,运行”的问题。
首先了解一下下面几个概念,讲得不太准确:
1、JVM
JVM是class以及jar(实际上就是很多个class压缩在一起)的运行环境,特征就是java和javaw命令,通过这两个命令,你可以执行class和jar文件。你可以通过-classpath参数指定你需要加载的jar文件
2、JDK
JDK就是JAVA的命令行开发环境,内置了JVM,特征就是javac命令,这个命令允许你将.java源文件批量或者单个编译成.class文件,从而可以通过JVM的java命令执行。在编译时你可以通过-classpath参数指定你的源代码依赖的jar文件。
3、Tomcat等JEE中间件
JEE中间件主要是为了让JAVA程序能够提供http服务、向客户展现html及相关资源而准备的一个运行环境,通常已经包含了JDK(或者像tomcat一样需要配置JDK所在路径).这个运行环境的特征是能够让你部署一个war包,运行环境能够自动加载WEB-INF/classes下的.class文件和WEB-INF/lib下jar文件。当用户通过浏览器访问中间件中你的war包所部署的路径时,中间件能够按照J2EE标准调用你的war包中的class和jsp页面,并将执行结果返回给浏览器。 在这种情况下你只需要将你的.java文件编译好放到WEB-INF/classes目录下。
然后说说纯文本JAVA WEB开发,有这么几种类型:
1、纯文本只有JSP
如果项目中只有jsp页面,就很稀松平常了,你只需要在tomcat的webapps下新建一个目录,然后在里面新建.jsp文件,就可以通过类似于http://localhost:8080/app/a.jsp的方式执行这个jsp文件了。早期的JAVA WEB项目都差不多是这么干的,那时候IDE的用处确实不大。别的技术像ASP和PHP之类十几年了一直是用这种纯文本的方式来编写代码,效率和有IDE没太大差别。
2、除了JSP还有辅助JAVA类
如果除了JSP以外,你还需要一些JAVA类来辅助JSP页面,这时候你必须手工新建.java文件,然后用通过文本编辑器(记事本/vi/UE等)打开他,往里面手工写代码。你将代码写完后,还需要将这个.java文件编译成.class,然后才能放到WEB-INF/classes下执行,
有两种方式完成编译动作:
方式一:JDK+构建工具(ANT或者MAVEN),通过配置ANT调用JDK中的javac命令将你的JAVA代码编译成class并放置到你的WEB-INF/classes目录下
方式二:ANT实际上也是将你的配置转换成javac命令中的各种参数,所以你也可以直接在命令行输出javac,然后javac就会提示你需要提供什么样的参数以及各种参数有什么用途,你可以根据提示自己调用javac编译.java文件成.class文件。
两种方式效率都有点低,所以你还需要有一个.bat(或者.sh)批处理文件来帮助你每隔几十秒就自动编译一下指定目录下的.java文件。
你可能需要写的辅助JAVA类有:
一、全局性的ServletFilter(例如用于用户权限检查)
二、复杂输出的Servlet(jsp不适合用来动态向浏览器提供图片等资源,这时候写Servlet)
三、在JSP中使用的Tag类,以减少JSP中大量的<%%>代码。
这种类不会很多,一般项目能有二三十个就差不多了,所以最初写辅助类的痛苦时期过去以后,开发效率就和使用IDE没什么区别了
3、除了JSP还有大量JAVA类
你的系统比较庞大了,需要一些框架性的东西来进行总体约束,然后在按照框架的要求来编写大量的JAVA类,通过这些JAVA类来完成浏览器端的请求。
这时候你的系统状态已经比较类型与SSH这种形态了,每个页面都会有对应的Action/Controller,以及FormBean/Model,或者还有专门的Service/BL类和DAO类。
这样你的系统中就会有大量的.java文件需要编译成.class,而且要引用的jar数量也显著增加,这时候你作为一个没有IDE的人,痛苦就要来了:
大量的时间花在等待编译上了,无论是使用构建工具的增量编译功能还是自己写一个更强大的批处理文件来扫描改动过的类,每次编译都需要一点时间,并且都不是非常可靠。特别是“减量编译”通常都支持不好,可能会有潜在的错误。
如果每次都使用全部重新编译以得到可靠的编译结果,那么最好的做法是让你每个JAVA类都一次写完一次编译成功,如果多出几个错误或者多修改几次,你会发现编译用的时间就显著大于你写代码的时间。
这种情况下纯文本和IDE的开发效率会有显著的区别。
如果我必须在这种痛苦的纯文本条件下工作,我会先写一个JAVA类,让这个JAVA类单独开一个进程运行,这个进程会自动扫描相应目录下的java文件增/改/删,
然后调用sun.tools.javac.Main类来进行编译,如果只是新增和修改则只单独编译几个类,如果有删除则全部重新编译。
那么Eclipse做了些什么?
1、Eclipse提供了WEB项目工程向导,帮助你快速创建项目
2、Eclipse将你的WEB-INF/lib下的jar文件管理起来,并对其中的class类进行了索引,以便于你快速查看相关类的位置、继承关系、引用关系。
3、Eclipse提供一个完善的增量编译器,所写即所得。Eclipse当年能够胜出的一个重要原因就在他的编译器,Eclipse的JDT实现了自己的编译器(因此Eclipse甚至都不需要JDK,只要有JVM就可以了),能够快速、增量地将你对代码的修改反映到class文件上。这是当时的JBuilder望尘莫及的,当时每次改完类都得重新编译一下,那个痛苦呀,当时我在公司引进Eclipse的时候,两个月之内大家就全部抛弃JBuilder X了(当时花了钱买了正版)。
4、提供了完善的调试功能,基于IDE的调试效率会远高于命令行调试。
5、提供了语法加亮、语法提示、中间件管理等辅助工具。
分享到:
相关推荐
### 如何将一个Web项目手工配置为Struts2框架 #### Struts2简介 Struts2是基于MVC(Model-View-Controller)设计模式的一个开源...以上就是将一个Web项目手工配置为Struts2的具体步骤及详细解释。希望对你有所帮助!
**方案一:JDK1.5 + Resin3.0 纯手工搭建** 1. **安装JDK1.5**: 首先,你需要下载并安装Java Development Kit (JDK) 的1.5版本。JDK提供了运行Java应用程序所需的环境,包括Java虚拟机(JVM)和Java编译器。按照...
此外,面试官还会关注Java开发环境的搭建,如安装JDK、Eclipse、Web服务器(如Tomcat),以及配置环境变量等。 4. 数据类型和面向对象:面试中可能会考察Java的基本数据类型,例如,int占用4个字节。面向对象的特性...
**3.11.2 Eclipse+MyEclipse开发helloapp的Web应用** 使用IDE(如Eclipse)可以方便地创建、调试和部署Web应用。 **3.12 手工部署开发式目录结构** 直接将应用文件放置在指定目录下完成部署。 **3.12.1 在server....
- **3.11.2 Eclipse + MyEclipse 开发 helloapp 的 Web 应用**:介绍如何使用 Eclipse IDE 构建简单的 Web 应用。 **3.12 手工部署开发式目录结构** - 如何手动配置 Tomcat 来部署 Web 应用。 **3.13 利用 Tomcat ...
- **Web多媒体**:网络世界不仅限于纯文本,而是融合了声音、图像、动画等多种媒体形式,使得信息呈现更加丰富多彩。 - **Web交互性**:用户不再仅仅是信息的接收者,还可以与页面进行互动,比如填写表单、参与调查...
本书共分为9个专题,涵盖了13个案例,每个专题都围绕一个特定的功能或技术点展开,通过具体的项目实例,讲解如何使用JSP开发Web应用程序。这样的安排有助于读者从实践中学习,逐步掌握JSP的开发技巧。 #### 专题一...
- **导入项目**:将E.J.P.Model项目导入到开发环境中,通常可通过IDEA或Eclipse等开发工具进行。 - **配置数据库连接**:设置数据库连接参数,包括数据库地址、用户名、密码等信息。 - **定义数据结构**:在E.J.P...
- **开发工具**: 推荐使用 Eclipse 进行开发,需要配置 Eclipse 的相关插件支持。 - **开发步骤**: - 制作 HTML 模板。 - 编写 Java 控制代码。 - 创建 Application 类。 - 使用 web.xml 进行配置。 - **示例**:...
2. 传统的房屋租售管理模式主要依靠管理人员纯手工记录的相关信息,比较繁琐,不方便查找,也非常容易出现错误。因此,需要设计和实现一个房屋租售信息管理系统,以提高房屋租售的管理效率,实现房屋租售行业的现代...
接下来,我们将创建一个纯手工的Web应用。这涉及创建基本的目录结构,包括`WEB-INF`、`jsp`和`src`目录。在`src`目录下,我们会编写Action类,这是Struts 2中的业务逻辑组件。Action类负责处理用户请求,通常继承自`...
Basic4android(简称B4A)是一个简单然而功能非常强大的Android应用开发环境。Basic4android语言类似于Visual Basic语言,支持更多的对象。Basic4android将代码编译成Android原生(native)应用,无需其它运行环境的...