package com.lh.myblog;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.lh.myblog.Blog;
import com.lh.myblog.SessionFactory;public class DbOperate {
public List getBlogs(int showCount) throws HibernateException {
Session session = SessionFactory.currentSession();
List list=null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery("from Blog order by visitcount desc");
if (showCount>0){
query.setMaxResults(showCount);
}
list = query.list();
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
throw e;
}
SessionFactory.closeSession();
return list;
}
// public static void main(String args[]) {
// DbOperate db = new DbOperate();
// List list = new ArrayList();
// list = db.getBlogs(10);
// for(int i=0;i<list.size();i++) {
// System.out.println(list.get(i));
// }
//
// }
}
此类经过独立测试无任何问题,但是在servlet类中:
package com.lh.myblog;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.lh.myblog.Blog;
import com.lh.myblog.DbOperate;public class FirstAction extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DbOperate db = new DbOperate(); //***************************************************
List blogList=db.getBlogs(10);
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
out.println("<response>");
Blog curBlog=null;
for (int i=0;i<blogList.size();i++){
curBlog = (Blog)blogList.get(i);
out.println("<blog>");
out.println("<id>" + curBlog.getId() + "</id>");
out.println("<name>" + curBlog.getSubject() + "</name>");
out.println("</blog>");
}
out.println("</response>");
out.close();
} protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
this.doGet(arg0,arg1);
}
}
被***********标记的那一行出现错误!debug的时候直接在Eclipse错误页面,错误提示是:
找不到 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 307 的源
鲜红色字样,实在是搞不定了,问了很多人都没能解决这个问题,哪位大侠若能妙手指点一二,他日定将登门拜访!
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.lh.myblog.Blog;
import com.lh.myblog.SessionFactory;public class DbOperate {
public List getBlogs(int showCount) throws HibernateException {
Session session = SessionFactory.currentSession();
List list=null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery("from Blog order by visitcount desc");
if (showCount>0){
query.setMaxResults(showCount);
}
list = query.list();
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
throw e;
}
SessionFactory.closeSession();
return list;
}
// public static void main(String args[]) {
// DbOperate db = new DbOperate();
// List list = new ArrayList();
// list = db.getBlogs(10);
// for(int i=0;i<list.size();i++) {
// System.out.println(list.get(i));
// }
//
// }
}
此类经过独立测试无任何问题,但是在servlet类中:
package com.lh.myblog;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.lh.myblog.Blog;
import com.lh.myblog.DbOperate;public class FirstAction extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DbOperate db = new DbOperate(); //***************************************************
List blogList=db.getBlogs(10);
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
out.println("<response>");
Blog curBlog=null;
for (int i=0;i<blogList.size();i++){
curBlog = (Blog)blogList.get(i);
out.println("<blog>");
out.println("<id>" + curBlog.getId() + "</id>");
out.println("<name>" + curBlog.getSubject() + "</name>");
out.println("</blog>");
}
out.println("</response>");
out.close();
} protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
this.doGet(arg0,arg1);
}
}
被***********标记的那一行出现错误!debug的时候直接在Eclipse错误页面,错误提示是:
找不到 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 307 的源
鲜红色字样,实在是搞不定了,问了很多人都没能解决这个问题,哪位大侠若能妙手指点一二,他日定将登门拜访!
public List getBlogs(int showCount) throws HibernateException
{
List list = new ArrayList();
String hql = "from Blog order by visitcount desc";
try{
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery(hql);
if (showCount> 0){
query.setFirstResult(0); //这句代码你怎么会没有呢,我认为分页查询总要个起始行吧
query.setMaxResults(showCount);
} list = query.list();
tx.commit();
}catch (HibernateException e){}
finally
{
session.close();
}
return list;
}
}我理解你的代码是调用getBlogs()方法实现Hibernate分页查询,你用用我上面的代码看看,应该没问题。我用着没问题!
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
红色,但是不影响查询结果,也不知道是不是跟这个有关。
这个方法主要是用来查询Blog中人气排名前10位的记录,所以query.setFirstResult(0);这句不要也可以的,谢谢楼上两位:)
继续ing……
log4j配置有问题吗?
里面随便写几行
ex:log4j.rootLogger=DEBUG,stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1}-%m%n在看看报什么错
万分感谢楼上两位!
你的类里面没有无参构造方法啊