我的dao代码没一点问题,在jsp页面中加了
<%
   int rowCount=dao.getNum();
   ....
   List=dao.getUserTable(pageSize,pageNow);
   ....
%>
然后,无论打开这个站点内任何其他jsp都出现下面这个:
org.apache.jasper.JasperException: Unable to compile class for JSP: 
An error occurred at line: 22 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
Stacktrace:
 at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
 at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
 at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
 at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
 at java.lang.Thread.run(Unknown Source)
求解释,求改写,求各种求!!!!!!!
谢谢。。

解决方案 »

  1.   

    An error occurred at line: 22 in the generated java file
    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
    这里报错,怀疑是jsp中有错误,或者你删除work目录中的缓存试下呢。或者换个高版本的tomcat
      

  2.   

    用的是6.0版的tomcat,怎么删除work目录的缓存?谢谢
      

  3.   

    tomcat\work\localhost\工程名。 
      

  4.   

    把tomcat\work\localhost\工程名干掉。在重新部署发布。
      

  5.   

    look tomcat\work\localhost\工程名\xxx.jsp line: 22
      

  6.   

    打开JSP编译的Java文件,看一下22行什么错误
      

  7.   

    look tomcat\work\localhost\工程名\xxx_jsp.java line: 22
      

  8.   

     public void _jspInit() {
        _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
      }
    这个看不懂。。
      

  9.   

    楼主看一下是不是重复加载lib,或者加载多余的lib
      

  10.   

    因为项目中有像jsp-api.jar servlet-api.jar跟tomcat6的lib中同样的包,但版本比tomcat6的版本要低,在运行的时候,因为会优先加载项目中的包,所以产生了错误,把项目中和tomcat相同的包删除(必须删除,如果替换还会产生其他的错误),问题就可以解决了。google到得
    http://zhouhaitao.iteye.com/blog/985737
      

  11.   

    public int getNum(){
    int n=0;
    String sql="select count(*)  from users";
    try {
    conn=ConnectionFactory.getConnection();
    pstmt=conn.prepareStatement(sql);
    rs=pstmt.executeQuery();
    if(rs.next()){
    n=rs.getInt(1);
    }
    close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return n;
    }
    public List<UserBean> getTableUser(int pageNow,int pageSize){
    String sql="select top "+pageSize+" * from users where number not in(select top "+(pageNow-1)+" number from users) order by grade desc";
    List<UserBean> l=new ArrayList<UserBean>();
    try {
    conn=ConnectionFactory.getConnection();
    pstmt=conn.prepareStatement(sql);
    rs=pstmt.executeQuery();
    while(rs.next()){
    UserBean bean=new UserBean();
    bean.setNumber(rs.getString(1));
    bean.setPassword(rs.getString(2));
    bean.setName(rs.getString(3));
    bean.setSex(rs.getString(4));
    bean.setBorn(rs.getString(5));
    bean.setSubject(rs.getString(6));
    bean.setUrl(rs.getString(7));
    bean.setGrade(rs.getInt(8));
    bean.setDepartment(rs.getString(9));
    bean.setJob(rs.getString(10));
    bean.setState(rs.getString(11));
    l.add(bean);
    }
    UserBean bean=new UserBean();
    Iterator<UserBean> it=l.iterator();
    while(it.hasNext()){
    bean=(UserBean)it.next();
    System.out.println("+++++++++"+bean.getNumber());
    }
    close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return l;
      

  12.   

    jsp上页面的代码 全贴上来 
    原来的代码,不是jsp引擎生成的代码 ! 
      

  13.   

    这提示的错误是JSP代码错误吧,这个页面没能正常编译成class。检查一下页面代码吧。
      

  14.   

      JSP 页面顶部 
      <%@ page import="xx.xx.xx.dao"%>
       把dao类import进去
      
      

  15.   

    List=dao.getUserTable(pageSize,pageNow);List 是什么啊?
    难道不是 
    List list = dao.getUserTable(pageSize,pageNow);???
      

  16.   

    直接访问dao.getNum()没有对应的Connection,PreparedStatement等对象
      

  17.   

    上面说的对,
    你所用的List,DAO应该加入import中。