笔者使用了Servlet来处理请求,当访问newhome.lzw时,会调用Servlet来处理请求
阅读本博文时,因为这些代码不单单是为了实现分页显示的,所以不要觉得太多。可以从NewHome.java的 //分页显示 以下的部分直接开始阅读,遇到相关函数时再在其他java文件查找,实现分页显示的实际代码不长、不难!
web.xml
<servlet>
<servlet-name>newhome</servlet-name>
<servlet-class>onload.NewHome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>newhome</servlet-name>
<url-pattern>/newhome.lzw</url-pattern>
</servlet-mapping>
BaseDao.java
package dao;
import java.util.List;
import org.hibernate.Session;
public interface BaseDao {
public Session getSession();
public void closeSession();
public List search(String hql);
}
BaseDaoImpl.java
package dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class BaseDaoImpl implements BaseDao {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
public void init(){
//加载配置文件
Configuration configuration = new Configuration().configure();
//向Hibernate注册相关服务
@SuppressWarnings("deprecation")
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
//创建会话工厂
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//打开会话
session = sessionFactory.openSession();
this.transaction = session.beginTransaction();
}
public Transaction getTran(){
return transaction;
}
@Override
public Session getSession() {
// TODO Auto-generated method stub
init();
return session;
}
@Override
public void closeSession() {
// TODO Auto-generated method stub
session.close();
}
@Override
public List search(String hql) {
// TODO Auto-generated method stub
Session session = null;
session = getSession();
List alist = null;
alist = session.createQuery(hql).list();
session.close();
return alist;
}
}
GoodsDao.java
package dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import conn.Goods;
public class GoodsDao extends BaseDaoImpl{
@SuppressWarnings("unchecked")
public List<Goods> display(String sql) {
List<Goods> list = super.search("FROM Goods "+sql);
return list;
}
public List<Goods> pageshow(int pagesize,int pagenow,String sql){
List<Goods> alist = display(sql);
List<Goods> blist = new ArrayList<Goods>();
for(int i=pagesize*(pagenow-1);i>=0&&i<pagesize*pagenow&&i<alist.size();i++){
blist.add(alist.get(i));
}
return blist;
}
}
NewHome.java
package onload;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import operation.ShowGoods;
import org.apache.struts2.ServletActionContext;
import conn.Goods;
import conn.SubType;
import conn.SuperType;
import dao.BaseDaoImpl;
import dao.GoodsDao;
public class NewHome extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//实现主页左侧分类列表值的获取
HttpSession session = request.getSession();
if(session.getAttribute("sublist")==null){
BaseDaoImpl BD = new BaseDaoImpl();
//得到大分类的列表
@SuppressWarnings("unchecked")
List<SuperType> suplist = BD.search("From SuperType");
//创建一个列表数组
Object sublist[] = new Object[suplist.size()];
for(int i=0,b=1;i<suplist.size();i++,b++){
//得到该大分类的小分类的列表
@SuppressWarnings("unchecked")
List<SubType> sub = BD.search("From SubType where superType='"+b+"'");
//将该小分类列表放入列表数组中
sublist[i]=sub;
}
session.setAttribute("sublist",sublist);
session.setAttribute("suplist",suplist);
}
//分页显示
int pagesize=6; //每页显示的数量
int pagenow; //当前页
String s_pagenow=request.getParameter("pagenow");
if(s_pagenow!=null){
pagenow=Integer.parseInt(s_pagenow);
}else{
pagenow=1; //首次访问时显示第一页的内容
}
GoodsDao dao=new GoodsDao();
String s=request.getParameter("sql");
String sql;
if(s==null){
sql="";
}else{
sql=s;
}
try {
//得到按sql排列,页面大小为pagesize,页数为pagenow的数据,数据类型为列表
List<Goods> pagelist=dao.pageshow(pagesize,pagenow,sql);
if(session.getAttribute("list")!=null){
session.removeAttribute("list"); //多次访问该页面时,比如点击下一页,要更新list的值,当然,这里完全可以不用移除list而是直接更新它
}
session.setAttribute("list", pagelist);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(session.getAttribute("pagenow")!=null){
session.removeAttribute("pagenow");
session.removeAttribute("sql");
}
session.setAttribute("pagenow", pagenow);
session.setAttribute("sql",sql );
//Servlet跳转页面
//getServletConfig().getServletContext().getRequestDispatcher("/NewHome.jsp").forward(request, response);
response.sendRedirect(request.getContextPath()+"/NewHome.jsp");
return;
}
}
NewHome.jsp
<div id="right">
<hr>
<table>
<tr>
<td><a href="">按好评度排列</a></td>
<td><a href="newhome.lzw?sql=order by sale desc">按销量sale排列</a></td>
<td><a href="newhome.lzw?sql=order by id asc">按id排列</a></td>
</tr>
</table>
<table border="1" align="center" width="60%" cellpadding="0" cellspacing="0">
<tr>
<c:forEach var="list" items="${list }" begin="0" end="2" varStatus="s">
<td>
<table width=300>
<tr height="20">
<td rowSpan=5 width="150"> <a href="goodsdetail.lzw?id=${list.id}" target="_blank" >
<img src="images/goods/${list.picture }" width="140" height="100"/> </a></td>
<td width="100">id:</td>
<td width="50">${list.id }</td>
</tr>
<tr>
<td>goodsname:</td>
<td>${list.goodsname }</td>
</tr>
<tr>
<td>price:</td>
<td>${list.price }</td>
</tr>
<tr>
<td>sale:</td>
<td>${list.sale }</td>
</tr>
<tr>
<td>inventory:</td>
<td>${list.inventory }</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</td>
</c:forEach>
<tr>
<c:forEach var="list" items="${list }" begin="3" end="6">
<td>
<table width=300>
<tr height="20">
<td rowSpan=5 width="150"> <a href="goodsdetail.lzw?id=${list.id}" target="_blank" >
<img src="images/goods/${list.picture }" width="140" height="100"/></a></td>
<td width="100">id:</td>
<td width="50">${list.id }</td>
</tr>
<tr>
<td>goodsname:</td>
<td>${list.goodsname }</td>
</tr>
<tr>
<td>price:</td>
<td>${list.price }</td>
</tr>
<tr>
<td>sale:</td>
<td>${list.sale }</td>
</tr>
<tr>
<td>inventory:</td>
<td>${list.inventory }</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</td>
</c:forEach>
</tr>
</table>
<hr>
<table align="center">
<tr>
<td width=250 align="left"><a href="newhome.lzw?pagenow=${pagenow-1 }&sql=${sql }">上一页</a></td>
<td width=250 align="right"><a href="newhome.lzw?pagenow=${pagenow+1 }&sql=${sql }">下一页</a></td>
</tr>
</table>
</div>