我的环境是tomcat6+jdk6+sqlserver2000,tomcat配好后可以显示欢迎界面,可是我测试了一个连接数据库的jsp时候显示如下错误 
HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: Unable to compile class for JSP 
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:574) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
root cause java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence. 
org.apache.jasper.xmlparser.UTF8Reader.invalidByte(UTF8Reader.java:621) 
org.apache.jasper.xmlparser.UTF8Reader.read(UTF8Reader.java:492) 
org.apache.jasper.xmlparser.XMLEncodingDetector.load(XMLEncodingDetector.java:1012) 
org.apache.jasper.xmlparser.XMLEncodingDetector.skipString(XMLEncodingDetector.java:963) 
org.apache.jasper.xmlparser.XMLEncodingDetector.scanXMLDecl(XMLEncodingDetector.java:1221) 
org.apache.jasper.xmlparser.XMLEncodingDetector.getEncoding(XMLEncodingDetector.java:123) 
org.apache.jasper.xmlparser.XMLEncodingDetector.getEncoding(XMLEncodingDetector.java:111) 
org.apache.jasper.compiler.ParserController.determineSyntaxAndEncoding(ParserController.java:309) 
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:173) 
org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) 
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:167) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:306) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273) 
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
============
测试连接的jsp代码如下
<%@ page import="java.lang.*, java.io.*, java.sql.*, java.util.*" contentType="text/html;charset=gb2312" %>
  <html>
  <body>
  <% Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
   String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
   //pubs 为你的数据库的
   String user="sa";
   String password="admin";
   Connection conn= DriverManager.getConnection(url,user,password);
   Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
   String sql="select job_id,job_desc from jobs";
   ResultSet rs=stmt.executeQuery(sql);
   while(rs.next()) { %>
    您的第一个字段内容为:<%=rs.getString(1)%><br>
    您的第二个字段内容为:<%=rs.getString(2)%><br>
  <% } %>
  <% out.print("数据库操作成功,恭喜你"); %>
  <% rs.close();
   stmt.close();
   conn.close();
  %>
  </body>
  </html>

解决方案 »

  1.   

    感觉又是源文件编码问题,系统认为你的源文件是utf-8的,结果发现文件头格式不符。可能是在UE等编辑器中编辑破坏了文件结构,建议用Eclipse创建新文件,并将内容复制过去。
      

  2.   

    从数据库中读出来的数据可能是utf-8格式的,而你的jsp指定contentType="text/html;charset=gb2312",把从数据库中读出来的数据的编码转化下,或弄个过滤器什么的。
      

  3.   

    contentType="text/html;charset=gb2312" 改成 contentType="text/html;charset=UTF-8"试试看。
      

  4.   

    源文件编码问题.改成utf-8试试。
      

  5.   

    还是不行啊,我把编码改成utf—8运行后出现了这些
    <%@ page import="java.lang.*, java.io.*, java.sql.*, java.util.*" contentType="text/html;charset=utf-8" %>  <html>  <body>  <% Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";    //pubs 为你的数据库的   String user="sa";    String password="admin";    Connection conn= DriverManager.getConnection(url,user,password);    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);    String sql="select job_id,job_desc from jobs";    ResultSet rs=stmt.executeQuery(sql);    while(rs.next()) { %>    您的第一个字段内容为:<%=rs.getString(1)%><br>    您的第二个字段内容为:<%=rs.getString(2)%><br>  <% } %>  <% out.print("数据库操作成功,恭喜你"); %>  <% rs.close();    stmt.close();    conn.close();   %>  </body>  </html>
    这是怎么回事啊
      

  6.   

    大家注意,该页面的错误是:无法编译jsp(org.apache.jasper.JasperException: Unable to compile class for JSP 
    导致无法编译JSP的原因是JSP文件的第一个字节不符合UTF-8格式(java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence. )所以,我认为,还是文件本身的问题,而不是 contentType="text/html;charset=gb2312" 的问题。
    我们现在的项目一般要求文件编码格式、界面的ContentType,数据库编码全部采用UTF-8,
    但UTF-8文件有一个非常痛苦的地方,就是很多编辑器(想UltraEdit,EditPlus),在编辑UTF-8文件时,会给JSP文件带上BOM。
    如果一个文件有了BOM头,你会发现,即便你在UE中把内容情况后保存,文件还是有3字节大小(请检查是否为这种情况),
    带BOM头的JSP文件,tomcat可能无法编译。解决方案:
    1、按照我前面说的,在Eclipse中新建一个文件,选择UTF-8编码格式,将原文件用UE打开,拷贝所有内容到新文件,同时,更改contentType="text/html;charset=UTF-8"。
    2、直接在UE中建立一个新文件,拷贝原文件的所有内容到新文件,contentType不变。尝试一下,应该可以解决问题。
      

  7.   

    谢谢大家的回答, 不知道怎么回事还是不行, 现在报错的内容成了这样了,我这次用的tomcat5.5,急死人啊
    --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: /sql_test.jsp(1,7) Invalid directive
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:516)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1557)
    org.apache.jasper.compiler.Parser.parse(Parser.java:127)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:212)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:156)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:299)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs
      

  8.   

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    你吧pageEncoding="UTF-8" 加上去
      

  9.   

    或者
    <%@ page language="java" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%>