当前位置:编程学习 > JAVA >>

servlet 打开网页报错500

自己编写了一个简单的servlet 编译正常 打开网页时提示:
HTTP Status 500 - Error instantiating servlet class HelloWorldTest

type Exception report

message Error instantiating servlet class HelloWorldTest

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class HelloWorldTest
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)

root cause

java.lang.UnsupportedClassVersionError: HelloWorldTest : Unsupported major.minor version 51.0 (unable to load class HelloWorldTest)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2908)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.



源程序如下:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out=resp.getWriter();
out.write("<html><head><title>nihao</title></head><body>hello world!</body></html>");
out.flush();
out.close();
}
}




web.xml配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">
<servlet>
<servlet-name>myfristservlet</servlet-name>
        <servlet-class>HelloWorldTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myfristservlet</servlet-name>
        <url-pattern>/myfristservlet</url-pattern>
    </servlet-mapping>
   
</web-app>

麻烦大家看看是什么错误?
HTTP Status 500 servlet --------------------编程问答-------------------- out.write("<html><head><title>nihao</title></head><body>hello world!</body></html>");
这句改成:
out.print("<html><head><title>nihao</title></head><body>hello world!</body></html>");
然后试试,500编译器应该会报错的,你发那个报错会更有效。 --------------------编程问答-------------------- 你报错的真正原因是因为你使用高版本的 JDK 编译的 Java class 文件试图在较低版本的 JVM 上运行,把你的jdk换成高。。。。或把你的编译器改成低的。。。。 --------------------编程问答-------------------- 楼上正解 --------------------编程问答--------------------
引用 2 楼 chengxu2011 的回复:
你报错的真正原因是因为你使用高版本的 JDK 编译的 Java class 文件试图在较低版本的 JVM 上运行,把你的jdk换成高。。。。或把你的编译器改成低的。。。。


我看下本机的版本好行没啥问题,之前在dos 和eclipse 下的程序都能正常运行。

您说的修改版本 具体是指修改哪块? --------------------编程问答-------------------- 右击你的项目点击buildpath选择configure build path 看到这是你的jdk我的是1.7的。然选择你的项目,然后按alt+enter健选择java compiler 看到这个 看一下你额编译器收多少主要看Compiler complicnce level:我的是1.5的 比1.7低 你看下你的编译器的是否比jdk大的。。。 --------------------编程问答--------------------
引用 5 楼 chengxu2011 的回复:
右击你的项目点击buildpath选择configure build path 看到这是你的jdk我的是1.7的。然选择你的项目,然后按alt+enter健选择java compiler 看到这个 看一下你额编译器收多少主要看Compiler complicnce level:我的是1.5的 比1.7低 你看下你的编译器的是否比jdk大的。。。


两个都是1.7




我怀疑是tomcat的问题。
下午我下载一个tomcat的插件配置到eclipse中,通过eclpise启动就可以正常打开了。 --------------------编程问答-------------------- 就是JDK版本编译问题 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- jre版本问题 --------------------编程问答--------------------
引用 7 楼 sunflower_cheney 的回复:
就是JDK版本编译问题

具体怎么修改? --------------------编程问答--------------------
引用 9 楼 jumpheightway 的回复:
jre版本问题

具体怎么修改? --------------------编程问答--------------------  兄弟,当前这个类是用jdk高版本编译的,而你此时却用低jdk 来访问,故此出现的错误。首先你把缓存清掉,再重现把,java类编译成class 再进行访问。 --------------------编程问答--------------------
引用 12 楼 mengjunquan 的回复:
兄弟,当前这个类是用jdk高版本编译的,而你此时却用低jdk 来访问,故此出现的错误。首先你把缓存清掉,再重现把,java类编译成class 再进行访问。



+++++ --------------------编程问答--------------------
引用 12 楼 mengjunquan 的回复:
兄弟,当前这个类是用jdk高版本编译的,而你此时却用低jdk 来访问,故此出现的错误。首先你把缓存清掉,再重现把,java类编译成class 再进行访问。


我是直接将eclipse下的class拷贝到tomcat 相应webapp目录下的。
你说的低版本jdk调用,具体指哪里的jdk版本?
4楼 6楼 有我jdk版本的截图,都是1.7。 --------------------编程问答--------------------
--------------------编程问答-------------------- 额,重写doGet什么的有没有写错哦 --------------------编程问答-------------------- 提示这个就是 你的jsp出错了,看看那里写错了。 --------------------编程问答--------------------
引用 15 楼 mengjunquan 的回复:

楼主不仅要给项目配置JDK还要给tomcat配JDK啊 只有这二者的JDK版本一致才行。 --------------------编程问答--------------------
引用 15 楼 mengjunquan 的回复:


兄弟 ,能截图稍微大点吗。或者说下这个设置在哪个目录下? --------------------编程问答--------------------
引用 18 楼 a597926661 的回复:
引用 15 楼 mengjunquan 的回复:
楼主不仅要给项目配置JDK还要给tomcat配JDK啊 只有这二者的JDK版本一致才行。

tomcat 的jdk在哪配置?怎么查看当前tomcat的jdk版本?
问题应该就出在这 tomcat的jdk版本配置低 --------------------编程问答--------------------
引用 20 楼 lwjok2007 的回复:
引用 18 楼 a597926661 的回复:
引用 15 楼 mengjunquan 的回复:
楼主不仅要给项目配置JDK还要给tomcat配JDK啊 只有这二者的JDK版本一致才行。
tomcat 的jdk在哪配置?怎么查看当前tomcat的jdk版本?
问题应该就出在这 tomcat的jdk版本配置低

Eclipse安装插件的tomcat可以按照15楼的截图配置 
这个东西吧 楼主可以百度 这样在这说有点麻烦 --------------------编程问答--------------------
引用 21 楼 a597926661 的回复:
引用 20 楼 lwjok2007 的回复:引用 18 楼 a597926661 的回复:
引用 15 楼 mengjunquan 的回复:
楼主不仅要给项目配置JDK还要给tomcat配JDK啊 只有这二者的JDK版本一致才行。
tomcat 的jdk在哪配置?怎么查看当前tomcat的jdk版本?
问题应该就出在这 tomcat的jdk版本配置低
Eclip……


15楼是 window-Preferences-tomcat-JVM Settings的配置吗?
我的界面截图如下显示是1.7的 --------------------编程问答-------------------- 1,兄弟,首先你再次确定一下,你使用的时Eclipse 不是MyEclipse 对吧!

2、当你把web项目建立好后,不是需要新建一个Servers,tomcat 服务的吗?这个时候服务建立好后,你双击你刚才新建的服务,就会弹出我所截出的图,再Runtime Environment 打开后,就会弹出,有设置jdk的地方。

我截图传不上去,所以用别人机子截图的 --------------------编程问答--------------------
引用 23 楼 mengjunquan 的回复:
1,兄弟,首先你再次确定一下,你使用的时Eclipse 不是MyEclipse 对吧!

2、当你把web项目建立好后,不是需要新建一个Servers,tomcat 服务的吗?这个时候服务建立好后,你双击你刚才新建的服务,就会弹出我所截出的图,再Runtime Environment 打开后,就会弹出,有设置jdk的地方。

我截图传不上去,所以用别人机子截图的
……


1,使用的是 eclipse
2,我不是直接在eclipse 下新建的web 项目 而是java project。新建一个class实现一个servlert然后保存,再到workspace下将 .class 文件拷贝到tomcat下我建好的webapp。
所以我没有找到你发的截图。

我在eclipse 安装了tomcat插件,通过启动tomcat 打开网页就正常了。
手动启动tomcat的bin目录下startup.bat打开网页就会报我上边的错误。 --------------------编程问答--------------------
引用 24 楼 lwjok2007 的回复:
引用 23 楼 mengjunquan 的回复:
1,兄弟,首先你再次确定一下,你使用的时Eclipse 不是MyEclipse 对吧!

2、当你把web项目建立好后,不是需要新建一个Servers,tomcat 服务的吗?这个时候服务建立好后,你双击你刚才新建的服务,就会弹出我所截出的图,再Runtime Environment 打开后,就会弹出,有设置jdk的地方。

我截图传不上……

这种情况的话你需要配置环境变量了 直接启动tomcat的话tomcat会读取环境变量 默认使用环境变量中配置的JDK 也可以去修改启动tomcat的批处理文件 这个风险略大 不推荐 --------------------编程问答--------------------
引用 25 楼 a597926661 的回复:
引用 24 楼 lwjok2007 的回复:引用 23 楼 mengjunquan 的回复:
1,兄弟,首先你再次确定一下,你使用的时Eclipse 不是MyEclipse 对吧!

2、当你把web项目建立好后,不是需要新建一个Servers,tomcat 服务的吗?这个时候服务建立好后,你双击你刚才新建的服务,就会弹出我所截出的图,再Runtime Enviro……


本机配置的环境变量 classpath 为jdk1.7的。
我通过eclipse的tomcat插件能正常启动tomcat 并且打开网站是正常的 。只要使用tomcat下bin/stratup.bat启动打开网页报错就会出现我发的错误。所以我也怀疑是tomcat的问题。我使用的tomcat 是apache-tomcat-7.0.34。 --------------------编程问答-------------------- classpath?楼主好好配一下path  应该确定的是你tomcat用的jdk跟你编译项目的jdk是不一版本的
我说点题外话:JDK应该是向后兼容的 所以1.5编译的class可以跑在1.6的JDK创建的JVM上 除非必须 还是建议用低版本的JDK开发编译。而且现在企业应用比较多的还是1.5吧,当然android是必须1.6及以上版本。 --------------------编程问答--------------------
引用 27 楼 a597926661 的回复:
classpath?楼主好好配一下path  应该确定的是你tomcat用的jdk跟你编译项目的jdk是不一版本的
我说点题外话:JDK应该是向后兼容的 所以1.5编译的class可以跑在1.6的JDK创建的JVM上 除非必须 还是建议用低版本的JDK开发编译。而且现在企业应用比较多的还是1.5吧,当然android是必须1.6及以上版本。


好的,实在不行我就试下1.5的。
是path 不是classpath我写错了。
path里面配置的jdk是1.7的:C:\Java\jdk1.7.0_10\bin; --------------------编程问答-------------------- 下载一个高版本的jre去替换你tomcat中使用的jre就行了
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,