Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?

简介: Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?   当然首先是确定一下,是真实的,吃个定心丸先,不是谎言:) 下载了Tomcat 7 RC4,解压到 D:/OpenSource/Tomcat/7.0.0-RC4 目录下后 先将 JAVA_HOME 变量清除,如果你原先有设置 JAVA_HOME 变量的话,免得产生干扰 在命令行下,先取消

Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?

 

当然首先是确定一下,是真实的,吃个定心丸先,不是谎言:) 

下载了Tomcat 7 RC4,解压到 D:/OpenSource/Tomcat/7.0.0-RC4 目录下后 
先将 JAVA_HOME 变量清除,如果你原先有设置 JAVA_HOME 变量的话,免得产生干扰 
在命令行下,先取消 JAVA_HOME 变量 

set JAVA_HOME= 

然后设置 JRE_HOME 变量 

set JRE_HOME=D:/JRE/1.6.0 

再启动,就可以顺利开启了。。。。 
cd /d D:/OpenSource/Tomcat/7.0.0-RC4/bin 
D:/OpenSource/Tomcat/7.0.0-RC4/bin>startup.bat 

当然,也可以顺利地停止 
D:/OpenSource/Tomcat/7.0.0-RC4/bin>shutdown.bat 

对于习惯性设置 JAVA_HOME 变量的开发者来说,如果仅是将它改为 JRE 所在的路径,想来试试,就会报错。 

set JAVA_HOME=D:/JRE/1.6.0 

然后 startup.bat 想启动之 
cd /d D:/OpenSource/Tomcat/7.0.0-RC4/bin 
D:/OpenSource/Tomcat/7.0.0-RC4/bin>startup.bat 

嘿嘿,启不来了,呵呵,报告 JAVA_HOME 变量设置不对,应当指向JDK,而不是直接指向 JRE 路径了事 
The JAVA_HOME environment variable is not defined correctly 
This environment variable is needed to run this program 
NB: JAVA_HOME should point to a JDK not a JRE
 

可能会有疑问,不是明明文档里说只需要JRE 6.0的吗? 
Apache Tomcat 7.0 requires the Java 2 Standard Edition Runtime Environment (JRE) version 6.0 or later. 

但是,正如前面设置 JRE_HOME 变量所说的,不信,再翻开文档去看一下,里面说得很清楚是设置 JRE_HOME 变量,当然去看 setclasspath.bat 的脚本的具体内容可能更加能够了解清楚它 
Set an environment variable named JRE_HOME to the pathname of the directory into which you installed the JRE 

如果直接将 JRE 路径当作 JAVA_HOME,那则是习惯惹得错了,呵呵。不过话说回来,仅是配置 JRE_HOME 的情况比较少;都是设置过 JAVA_HOME 变量,然后 JRE_HOME 自己挂之,然后 PATH 里加上个 .;%JAVA_HOME%/bin 之类的。。。 

真实谎言,其实自从 Tomcat 5.5 开始,都说明只需要 JRE 就可以运行了。只不过 Tomcat 5.0 时候还是需要 JDK 1.3 才可以运行的。 

由于Tomcat 7必须是J2SE 6以上版本才可以运行,那就试一下J2SE 5,看会有什么情况 

set JAVA_HOME=D:/JRE/1.5.0 

然后 startup.bat 想启动之 
cd /d D:/OpenSource/Tomcat/7.0.0-RC4/bin 
D:/OpenSource/Tomcat/7.0.0-RC4/bin>startup.bat 
并加上 -verbose 进行跟踪,可以得到如下详细的错误信息 

Java代码 
  1. [Loaded java.io.IOException from shared objects file]  
  2. Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file  
  3.         at java.lang.ClassLoader.defineClass1(Native Method)  
  4.         at java.lang.ClassLoader.defineClass(Unknown Source)  
  5.         at java.security.SecureClassLoader.defineClass(Unknown Source)  
  6.         at java.net.URLClassLoader.defineClass(Unknown Source)  
  7.         at java.net.URLClassLoader.access$100(Unknown Source)  
  8.         at java.net.URLClassLoader$1.run(Unknown Source)  
  9.         at java.security.AccessController.doPrivileged(Native Method)  
  10.         at java.net.URLClassLoader.findClass(Unknown Source)  
  11.         at java.lang.ClassLoader.loadClass(Unknown Source)  
  12.         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)  
  13.         at java.lang.ClassLoader.loadClass(Unknown Source)  
  14.         at java.lang.ClassLoader.loadClassInternal(Unknown Source)  
  15. [Loaded java.lang.Shutdown from shared objects file]  
  16. [Loaded java.lang.Shutdown$Lock from shared objects file]  

实际上,启动脚本先会认 JAVA_HOME 变量,在找到 JAVA_HOME 的情况下,会将 JAVA_HOME 赋值给 JRE_HOME,如果有定义 JRE_HOME 变量的话,则 JRE_HOME 变量是最优先的,比如,你定义 
Java代码 
  1. JAVA_HOME=D:/JDK/1.6.0  
  2. JRE_HOME=D:/JRE/1.5.0  

是运行不起来的。 

其实从Tomcat 5.5开始就不通过JDK去编译JSP了,而是通过Eclipse JDT Java编译器来编译JSP文件。 

为了后面的试验方便,首先配置个管理用户,编辑 conf/tomcat-users.xml 配置文件, 
由于Tomcat 7重新定义了四个不同的角色来管理应用程序,而不是原来单一个manager角色,为此增加了角色为manager-gui的gui_admin用户,密码password 
Java代码 
  1. <role rolename="manager-gui"/>  
  2. <user username="gui_admin" password="password" roles="manager-gui"/>  

为此,你需要设置不同的角色处理不同的管理内容,具体如下: 
manager-gui - allows access to the HTML GUI and the status pages 
manager-script - allows access to the text interface and the status pages 
manager-jmx - allows access to the JMX proxy and the status pages 
manager-status - allows access to the status pages only
 

这样gui_admin可以访问进行管理 
Java代码 
  1. http://localhost:8080/manager/status  
  2. http://localhost:8080/manager/html  


测试一下无需web.xml配置文件来创建一个Web应用程序项目 Tomcat7 
通过注解编写一个Servlet,名为 AnnotationServlet.java 
Java代码 
  1. @WebServlet("/AnnotationServlet")  
  2. public class AnnotationServlet extends HttpServlet   
  3. {  
  4.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException   
  5.     {  
  6.         PrintWriter out = response.getWriter();  
  7.         out.println("Annotation Servlet in Tomcat 7");  
  8.         }  
  9.     }  
  10. }  

如果你用JDK 1.5来编译则会出错 
Java代码 
  1. javac -cp D:/OpenSource/Tomcat/7.0.0-RC4/lib/servlet-api.jar *.java  
  2. AnnotationServlet.java:4: 无法访问 javax.servlet.ServletException  
  3. 错误的类文件: D:/OpenSource/Tomcat/7.0.0-RC4/lib/servlet-api.jar(javax/servlet/ServletException.class)  
  4. 类文件具有错误的版本 50.0,应为 49.0  
  5. 请删除该文件或确保该文件位于正确的类路径子目录中。  
  6. import javax.servlet.ServletException;  
  7.                      ^  
  8. 1 错误  

用1.6编译后,直接部署,启动,整个项目就一个 AnnotationServlet.class,启动后照样访问 
Java代码 
  1. http://localhost:8080/Tomcat7/AnnotationServlet  


当然一个Web项目,少了web.xml文件估计也是玩不转的,试一下通过注解与没有注解的Servlet共同工作的场景,创建一个NoneAnnotationServlet.java 
并在web.xml里配置之 
Java代码 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  5.                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  6.   version="3.0">    
  7.     <display-name>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</display-name>  
  8.     <description>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</description>  
  9.     <servlet>  
  10.         <servlet-name>NoneAnnotationServlet</servlet-name>  
  11.         <servlet-class>NoneAnnotationServlet</servlet-class>  
  12.     </servlet>  
  13.   
  14.     <servlet-mapping>  
  15.         <servlet-name>NoneAnnotationServlet</servlet-name>  
  16.         <url-pattern>/NoneAnnotationServlet</url-pattern>  
  17.     </servlet-mapping>  
  18. </web-app>  

编译、部署后,都可以正常工作。 
Java代码 
  1. http://localhost:8080/Tomcat7/AnnotationServlet  
  2. http://localhost:8080/Tomcat7/NoneAnnotationServlet  


蒽哪,很和谐的说。Tomcat还有很多新的Servlet 3.0与Java EE 6规范的特性,慢慢测试之。
相关文章
|
2月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
36 0
|
3天前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
24 8
|
18天前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
21天前
|
Java 编译器 程序员
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
|
4天前
|
Java
No compiler detected, make sure you are running on top of a JDK instead of a JRE
No compiler detected, make sure you are running on top of a JDK instead of a JRE
11 1
|
10天前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
32 3
|
14天前
|
Java 编译器 测试技术
Java零基础教学(03):如何正确区别JDK、JRE和JVM??
【8月更文挑战第3天】Java零基础教学篇,手把手实践教学!
38 2
|
15天前
|
人工智能 Java 编译器
Java零基础(3) - 区别JDK、JRE和JVM
【8月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
36 1
|
4天前
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
4天前
|
Oracle Java 关系型数据库
在Centos7上安装JDK1.8和tomcat8.5的步骤和过程(亲测可用)
该博客文章提供了在CentOS 7系统上安装JDK 1.8和Tomcat 8.5的详细步骤,包括卸载系统自带的OpenJDK和安装Oracle JDK 1.8,以及Tomcat 8.5的安装过程。