我想写个留言页面,出现以下错误:
2010-3-24 11:21:43 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 31 in the jsp file: /addMessage.jsp
Generated servlet error:
msg cannot be resolved
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:414)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    只写了2个类,一个是messageVO 类,javaBean的,比较简单,不列出来,一个是链接数据库的:public class MessageBean {
    private Connection con; MessageVO msg; public MessageBean() {
    String CLASSFORNAME = "com.mysql.jdbc.Driver";
    String URL = "jdbc:mysql//localhost:8888/test/";
    String username = "root";
    String password = "123456"; try {
    Class.forName(CLASSFORNAME);
    con = DriverManager.getConnection(URL,username,password);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } public void setMsg(MessageVO msg) {
    this.msg = msg;
    } public void addMessage() throws Exception {
    try {
    PreparedStatement stm = con.prepareStatement("insert into messagevo values(?,?,?,?,?,?)");
    stm.setInt(1, msg.getId());
    stm.setString(2, msg.getTitle());
    stm.setString(3, msg.getName());
    if ((msg.getEmail()).length() == 0)
    stm.setString(4, null);
    else
    stm.setString(4, msg.getEmail());
    stm.setString(5, msg.getContent());
    stm.setDate(6, new java.sql.Date(new java.util.Date().getTime())); try {
    stm.executeQuery();
    } catch (SQLException e) {
    e.printStackTrace();
    } con.close();
    } catch (Exception e) {
    e.printStackTrace();
    throw e;
    }
    }

    public Collection  getMessage() throws Exception {
    Collection<MessageVO> ret = new ArrayList<MessageVO>();
    try {
    Statement stm = con.createStatement();
    ResultSet result = stm.executeQuery("select count(*) from message");
    int message_count = 0;
    if(result.next()) {
    message_count = result.getInt(1);
    result.close();
    }

    if(message_count > 0) {
    result = stm.executeQuery("select * from message order by Date desc");
    while (result.next()) {
    String title = result.getString("Title");
    String name = result.getString("Name");
    String email = result.getString("Email");
    String content = result.getString("Content");
    java.sql.Date date = result.getDate("Date");
    MessageVO message = new MessageVO();
    message.setName(name);
    message.setTitle(title);
    message.setContent(content);
    message.setDate(date);
    message.setEmail(email);
    ret.add(message);
    }
    result.close();
    stm.close();
    }
    con.close();
    }
    catch(Exception e) {
    e.printStackTrace();
    throw e;
    }
    return ret;
    }
    }
      

  2.   

    Unable to compile class for JSP页面写错了
    把你jsp页面贴出来看下
      

  3.   

    以下是addMessage.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page import="java.sql.*,com.efound.data.javaBean.*,java.util.*" errorPage="../error.jsp" %>
    <jsp:useBean id="messageVO" class="com.efound.data.javaBean.MessageVO" scope="page">
    <jsp:setProperty name="messageVO" property="*"/>
    </jsp:useBean>
    <jsp:useBean id="messageBean" class="com.efound.data.javaBean.MessageBean" scope="page"/>
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>添加信息表</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
        <% 
         try {
         messageBean.setMsg(msg);
         messageBean.addMessage();
         }
         catch(Exception e) {
         e.printStackTrace();
         }
        %>
        <jsp:forward page="viewMessages.jsp"/>
      </body>
    </html>
      

  4.   

    以下是register.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'register.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
    <body>
    <TD>
    <TABLE align="center" border=1 cellspacing="0" cellpadding="0"
    bordercolordark="#CCCC99" bordercolorlight="#CCCC99">

    <FORM ACTION="addMessage.jsp">


    <TR>
    <TD>
    姓名:
    </TD>
    <TD bgcolor="#CCCC99">
    <input type="text" name="name" size=25>
    </TD>
    </TR>
     
    <TR>
    <TD bgcolor="#CCCC99">
    E-mail:
    </TD>
    <TD bgcolor="#CCCC99">
    <input type="text" name="email" size=25>
    </TD>
    </TR>

    <TR>
    <TD>
    主题:
    </TD>
    <TD bgcolor="#CCCC99">
    <input type="text" name="title" size=25>
    </TD>
    </TR>

    <TR>
    <TD align="top" bgcolor="#CCCC99">
    留言:
    </TD>
    <TD>
    <textarea name="content" rows=7 cols=25></textarea>
    </TD>
    </TR>

    <TR>
    <TD colspan=3>
    <TABLE align="center" width="100%" cellspacing="0" cellpadding="0"
    bordercolordark="#CCCC99" bordercolorlight="#CCCC99">
    <TR>
    <TD align="center" bgcolor="#CCCC99">
    <input type="submit" value="提交留言">
    </TD>
    <TD align="center">
    <a href="viewMessages.jsp"><font size=2>查看留言 </font></a>
    </TD>
    <TD align="center" bgcolor="#CCCC99">
    <input type="reset" value="重新填写">
    </TD>
    </TR>
    </TABLE>
    </TD>
    </TR>

    </FORM>
    </TABLE>
    </TD>
    </body>
    </html>
      

  5.   

    以下是viewMessage.jsp页面,总的就这3个页面
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page import="java.sql.*,com.efound.data.javaBean.*,java.util.*" %>
    <jsp:useBean id="messgaeBean" class="com.efound.data.javaBean.MessageBean" scope="page"/>
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>显示留言消息</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
        <p align="center">所有访客留言</p>
        <hr>
        <% 
         int message_count=0;
         Collection messages=messageBean.getMessage();
         Iterator it=messages.iterator();
         while(it.hasNext()) {
         MessageVO message=(MessageVO)it.next();
        %>
        <TABLE width="100%" align="center" border=1 brcolor=99ccff cellspacing="0" cellpadding="0"
        bordercolordark="#000000" bordercolorlight="#CCCC99">
        
        <tr><td bgcolor="#CCCC99"><font size=2>主题:</font></td>
        <td colspan=3><%=message.getTitle() %></td></tr>
        <tr><td bgcolor="#CCCC99"><font size=2>留言人:</font></td>
        <td><%=message.getName() %></td>
        <td bgcolor="#CCCC99"><font size=2>E-mail:</font></td>
        <td>
        <% 
         out.println("<a href=mailto:"+message.getEmail()+">"+message.getEmail()+"</a>");
        %>
        </td>
        </tr>
        
        <tr><td bgcolor="#CCCC99"><font size=2>留言时间:</font></td><td colspan=3>
        <% 
         out.println("<font size=2>"+message.getDate().toLocaleString()+"</font>");
        %>
        </td></tr>
        
        <tr><td align="center">
        <% 
         out.println("("+message_count+")");
        %>
        </td>
        
        <td colspan=3><%=message.getContent() %>
        </td></tr>
        </TABLE>
        <% 
         out.println("<hr>");
         message_count++;
         }
        %>
        <p align="center"><a href="index.html">我要留言</a></p>
      </body>
    </html>
      

  6.   

    看addMessage.jsp 就好了应该是你boby 里面java 写错了
    你先把body 里面java 代码全删了,再多调试几下
      

  7.   

    报错第几行,可以看jsp翻译后的java文件。行数与之对应
      

  8.   

    以下是jsp页面出错信息:
    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 31 in the jsp file: /addMessage.jsp
    Generated servlet error:
    msg cannot be resolved
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
    root cause org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 31 in the jsp file: /addMessage.jsp
    Generated servlet error:
    msg cannot be resolved
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:414)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
      

  9.   

    把你addMessage.jsp中java 全部删除最愚蠢的办法
    排除法
      

  10.   

    /addMessage.jsp.................................................
      

  11.   

    An error occurred at line: 31 in the jsp file: /addMessage.jsp
    Generated servlet error:
    msg cannot be resolved
    这句不是已经说的很清楚了么?msg变量找不到,在addMessage.jsp这个文件里。
    就是
    try {
    messageBean.setMsg(msg);
    messageBean.addMessage();
    }
    这段代码出错了。
    你这里用了msg,但那里也没声明msg这个变量
      

  12.   

    不是说错误是这个嘛31 in the jsp file: /addMessage.jsp