`
alanland
  • 浏览: 641204 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

来自:YuLimin的日志

 

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规范的特性,慢慢测试之。

 

 

 

源地址:http://www.webspherechina.net/home/space.php?uid=2864&do=blog&id=50719

分享到:
评论

相关推荐

    J2SE6.0_Api_CN.zip_J2SE6.0_Api_CN_J2se6.0_apidoc_j2se 6.0_APIDOC

    Java 2 Platform, Standard Edition (J2SE) 6.0 API中文版是Java开发者的重要参考资料,它提供了Java编程语言和Java平台核心类库的详细文档。这个压缩包`J2SE6.0_Api_CN.zip`包含了J2SE 6.0的API中文文档,方便中国...

    upload.jar for J2SE 6.0

    《Java Web 上传功能详解——基于upload.jar for J2SE 6.0》 在Java Web开发中,处理用户上传文件是一项常见的需求。"upload.jar for J2SE 6.0" 是一个专为sun java jdk 1.6.0平台设计的类库,它提供了方便的文件...

    J2SE6.0中文版.rar

    这个“J2SE6.0中文版.rar”压缩包提供了J2SE 6.0的中文版文档,旨在帮助中文用户更好地理解和使用这一版本的Java。 1. **新特性** - **增强的Swing组件**:J2SE 6.0对Swing UI库进行了大量优化,包括更好的布局...

    J2SE6.0-API(中文)-冷冻大雪.chm和java api1.6中文文档.chm

    J2SE(Java Standard Edition)6.0版本是Java平台的一个重要里程碑,为开发者带来了许多新特性、增强和优化。这个压缩包包含三个重要的资源:《J2SE6.0-API(中文)-冷冻大雪.chm》、《java api1.6中文文档.chm》...

    AIX-JDK8-JRE8_64位.rar

    标题"AIX-JDK8-JRE8_64位.rar"所指的是一款针对AIX操作系统的Java Development Kit(JDK)和Java Runtime Environment(JRE)的64位版本安装包。AIX,全称Advanced Interactive eXecutive,是由IBM开发的一种强大的...

    J2SE6.0 API(冷冬大雪)

    J2SE6.0 API(冷冬大雪),目前应该说比较好的j2se,api大全,讲的非常详细,翻译准确,0分资源,欢迎下载!

    tomcat6.0 & jdk1.6 集成

    "Tomcat6.0 & JDK1.6集成"是指将这两个组件协同安装和配置,以便在Java环境中运行基于Servlet和JSP的Web应用程序。以下是对这个主题的详细讲解: 首先,JDK1.6是Oracle公司发布的一个旧版本的Java开发工具包,包含...

    JDK1.6加Tomcat6.0的配置问题.txt

    ### JDK1.6与Tomcat6.0配置详解 #### 一、环境配置背景 在进行Web应用开发时,正确地配置开发环境是至关重要的一步。对于使用Java语言进行开发的项目来说,JDK(Java Development Kit)和Tomcat作为核心组件之一,...

    JDK6.0+JRE.zip

    JDK Java SE Development kit(JDK) java开发工具包 JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和...

    jdk6.0和tomcat6.0经典配置

    《JDK 6.0与Tomcat 6.0的经典配置详解》 在Java Web开发中,JDK和Tomcat是两个至关重要的组件。本文将详细介绍如何安装、配置JDK 6.0和Tomcat 6.0,以及如何调试JSP和Servlet,帮助开发者构建一个稳定的工作环境。 ...

    JDK6.0+中文文档-lytim24.part1.rar

    java6.0文档chm版,分成三部分,分别为JDK6.0+中文文档-lytim24.part1.rar、JDK6.0+中文文档-lytim24.part2.rar、JDK6.0+中文文档-lytim24.part3.rar

    eclipse支持jdk1.7+tomcat6.0以上版本

    ### Eclipse支持JDK 1.7与Tomcat 6.0及以上版本的知识点详解 #### 一、Eclipse JEE Luna SR2版本介绍 在理解如何配置Eclipse以支持JDK 1.7及更高版本,并与Tomcat 6.0及后续版本集成之前,我们先来了解一下Eclipse...

    jdk与jre的区别.

    ### JDK与JRE的区别 #### 一、JDK与JRE的基本概念 ##### JDK(Java Development Kit) JDK,即Java开发工具包,是面向开发人员使用的软件开发工具包(SDK)。它包含了编译、调试和运行Java应用程序所需的所有工具...

    linux下tomcat6.0与jdk安装详细步骤 .doc

    在Linux环境下,部署Java应用程序服务器如Tomcat常常是系统管理员的日常工作之一。本文将详细介绍如何在Linux上安装Tomcat 6.0以及JDK 6 Update 13,这是一个适用于系统上线的基础步骤。 首先,我们需要从官方网站...

    安装和配置jdk6.0和tomcat6.0

    【安装和配置 JDK6.0】 Java Development Kit (JDK) 是 Java 语言的开发工具包,包含了编译器、调试器以及运行环境等必备组件。JDK6.0 是 Oracle 公司发布的一个版本,提供了对 Java SE 6 平台的支持。以下是安装和...

    Apache Tomcat 8.5的安装配置 、JDK 1.8的安装

    Apache Tomcat 8.5是流行的开源Web应用服务器,它用于部署Java Servlets和JavaServer Pages (JSP)。在本文中,我们将详细介绍如何在Linux系统上安装和配置Apache Tomcat 8.5以及JDK 1.8。 首先,让我们来安装JDK ...

    jdk-7u45和jre-7u71.zip

    在给定的压缩包文件"jdk-7u45和jre-7u71.zip"中,包含了两个主要的组件:jdk-7u45-windows-x64.exe和jre-7u71-windows-x64.exe,分别对应于Java SE 7的第45个更新版本的JDK和第71个更新版本的JRE,均为64位Windows...

    upload.jar for J2SE 1.4.2

    这是在 sun java jdk 1.4.2 平台上开发的一个类库文件,解决上传文件到 java web server 的问题。 和最早的版本相比,该版本修正了当 request.getgetCharacterEncoding() 为 null 时所导致的 NullException 。

    tomcat6.0.48+jdk1.7或jdk1.8或jdk1.6

    标题中的"tomcat6.0.48+jdk1.7或jdk1.8或jdk1.6"指的是一个配置环境,其中Tomcat是Apache软件基金会的一个开源Java Servlet容器,版本为6.0.48,它主要用于部署和运行Java Web应用程序。而JDK(Java Development Kit...

Global site tag (gtag.js) - Google Analytics