各位大侠,帮兄弟看看这个错误:
   exception org.apache.jasper.JasperException: Unable to compile class for JSP
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:661)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.lyq.util.HibernateFilter.doFilter(HibernateFilter.java:36)
com.lyq.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:35)com.lyq.util.HibernateFilter.doFilter代码如下:package com.lyq.util;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * Hibenrate过滤器
 * 用于初始化Session工厂及获取Session对象
 * 通过ThreadLocal进行管理Session
 * @author Li Yong Qiang
 */
public class HibernateFilter implements Filter{
// ThreadLocal对象
private static ThreadLocal threadLocal = new ThreadLocal();
// SessionFactory对象
private static SessionFactory factory = null;
@Override
public void destroy() {
if(!factory.isClosed()){
factory.close();
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
chain.doFilter(request, response);
} finally{
Session session = (Session)threadLocal.get();
if(session != null){
if(session.isOpen()){
session.close();
}
threadLocal.remove();
}
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
//初始化SessionFactory
try {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
 * 获取Session
 * @return Session
 */
public static Session getSession() {
Session session = (Session)threadLocal.get();
if (session == null) {
session = factory.openSession();
threadLocal.set(session);
}
return session;
}
}            在线等待,先谢谢了!

解决方案 »

  1.   

    不是filter的问题,是你的jsp错了,
    org.apache.jasper.JasperException: Unable to compile class for JSP
    很明显么,jsp编译不通过
      

  2.   

    jsp编译的时候没有报错啊,如果有错也能看得到,根据catch出的显示的问题是HibernateFilter和CharacterEncodingFilter,但是就是不清楚问题出在哪儿?谢谢回帖!
      

  3.   

    你的异常信息很明显是jsp的问题,在tomcat运行的时候需要把jsp编程成java类缓存在tomcat/work目录下,在这一步的时候出错了,跟filter没有任何关系
      

  4.   

    谢谢回帖,哥们儿一直做C系列的开发的,对JSP仅局限于了解(对java C/S的东西较清晰),没做过像样的东西,我想问如果是JSP有问题,ECLIPSE常规会有显示的啊,并且发布的时候也有提示啊,可我这个项目是编译过了的啊,不吝赐教!方便的话留个qq。
      

  5.   

    jsp编译错误,因为jsp上的java代码片断有错误编辑器是不会提醒的,你把jsp上java片段复制到一个.java的文件里,引入相关包后再看看编辑器给出什么样的提示就可以了
      

  6.   

     通常jsp的很多错误eclipse编辑器是不能识别的,有时候还会把正确的代码识别成错误的,因为jsp代码使用的东西很多,例如:html,js,css,jsp自定义标签,jstl,struts标签,java代码等等.尤其是这些东西互相嵌套使用的时候,所以编辑器通常很难识别准确
      

  7.   

    有浏览器调试的话可以按F12调试一下,明显jsp错误了。
      

  8.   

    最终发现时XML文件解析JAR版本不统一,导致无法读取hibernate配置文件,SessionFactory 始终为NULL所致。谢谢各位的回复!