`
thtwin
  • 浏览: 167167 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Servlet读取XML文件实现JSP简单分页

阅读更多
                   

1.数据库内容:
建立数据库:pagetest
c:\>mysql -uroot -p
*******
mysql>create database pagetest ;
创建用户:thtwinj2ee
mysql>grant all privileges on pagetest.* to thtwinj2ee@'%' identified by '123' with grant option ;
创建表:
mysql>create table user(userId int auto_increment,userName varchar(20),primary key(userId)) ;
插入相应的测试数据
mysql> select * from user limit 6,12 ;
+--------+-------------+
| userid | userName    |
+--------+-------------+
|      7 | thtwin      |
|      8 | jsp         |
|      9 | servlet     |
|     10 | ajax        |
|     11 | mysql       |
|     12 | tomcat      |
|     13 | myeclipse   |
|     14 | jsp分页总结 |
|     15 | jsp分页总结 |
|     16 | jsp分页总结 |
|     17 | jsp分页总结 |
|     18 | jsp分页总结 |
+--------+-------------+
12 rows in set (0.00 sec)



2.Servlet方面的准备
思路:
pageSize(每页的数据条数):从pagesize.xml文件中通过GetPageSizeSevlet来读取(其中应该注意的是pagesize.xml文件路径问题和对GetPageSizeSevlet的配置)详细查看web.xml文件与GetPageSizeSevlet.java文件

其它的Servlet没有什么突出的,代码给出如下(User.java与DBConn.java没有帖):

pagesize.xml

<?xml version="1.0" encoding="UTF-8"?>
<page-config>
    <page-size>5</page-size>
</page-config>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>GetPageSizeSevlet</servlet-name>
    <servlet-class>cn.hld.edu.servlet.GetPageSizeSevlet</servlet-class>
   
    <init-param>
       <!--pagesize.xml存放路径,在Servlet中通过mypageconfig来读取-->
        <param-name>mypageconfig</param-name>
        <param-value>/WEB-INF/pagesize.xml</param-value>
    </init-param> 
    <!--必须加上下面这个属性配置,不然取不到pageSize-->
    <load-on-startup>2</load-on-startup> 
   
  </servlet>
 
              <servlet>
                <servlet-name>getUserData</servlet-name>
                <servlet-class>cn.hld.edu.servlet.GetDataServlet</servlet-class>
              </servlet>
           
            <servlet-mapping>
                <servlet-name>getUserData</servlet-name>
                <url-pattern>/getUserData</url-pattern>
            </servlet-mapping>

  <servlet-mapping>
    <servlet-name>GetPageSizeSevlet</servlet-name>
    <url-pattern>/GetPageSizeSevlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
GetPageSizeSevlet.java

package cn.hld.edu.servlet;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

public class GetPageSizeSevlet extends HttpServlet
{

    private static int pageSize = 0 ;
   
   
    public static int getPageSize()
    {
        return pageSize;
    }

    public static void setPageSize(int pageSize)
    {
        //注意此处与一般的类成员的区别!
        GetPageSizeSevlet.pageSize = pageSize;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
       
    }

    @Override
    public void init() throws ServletException
    {
        initPageSize() ;
    }
   
    public void initPageSize()
    {
            //String xmlDir = System.getProperty("user.dir") ;
            //xmlDir +=  this.getInitParameter("mypageconfig") ;
            String xmlDir = this.getServletConfig().getServletContext().getRealPath("/");
            xmlDir += this.getInitParameter("mypageconfig") ;
System.out.println("读取到的XML文件的路径为:  " + xmlDir);
//读取到的XML文件的路径为:  D:\Tomcat 5.5\webapps\Pagination\/WEB-INF/pagesize.xml

            /*
            System.getProperties().getProperty("user.dir")user.dir是死的
                       
            InputStream is = null ;
            is = this.getServletContext().getResourceAsStream("xmlDir") ;              
            SAXBuilder saxBuilder = new SAXBuilder(false) ;
           
            读取XML文件用dom4j
            public void readXml(String path){
                SAXReader xml=new SAXReader();
                try{
                    Document doc=xml.read(path);
                        System.out.println("根节点:"+dom.getRootElement().getName());
                        Element ele=dom.getRootElement();
                        List list=ele.elements();
                        Iterator iter=list.iterator();
                }catch(Exception e){e.printStackTrace();}
            }
            */
            Document doc = null ;
            DocumentBuilderFactory df = DocumentBuilderFactory.newInstance() ;
           
            try
            {
                DocumentBuilder db = df.newDocumentBuilder() ;
                doc = db.parse(new File(xmlDir)) ;
                String strPageSize = doc.getElementsByTagName("page-size").item(0).getFirstChild().getNodeValue() ;
                pageSize = Integer.parseInt(strPageSize) ;
            }
            catch(Exception e)
            {
                e.printStackTrace() ;
            }
           
    }  

}
GetDataServlet.java

package cn.hld.edu.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 cn.hld.edu.dao.GetUserDataDao;

public class GetDataServlet extends HttpServlet
{
    HttpSession session = null ;
    int curPage = 1 ;
    int pageSize = 0 ;
    int allPages = 0 ;
    int allCount = 0 ;
    int position = 0 ;
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        //别人建议不要用session
        //session = req.getSession() ;
        String strCurPage = req.getParameter("curPage") ;
        try
        {
            curPage = Integer.parseInt(strCurPage) ;
        }
        catch(NumberFormatException e)
        {
            //System.out.println("curPage类型转换错误!");
            curPage = 1 ;
        }
        //从servlet中读取数据web.xml配置servlet时必须加上<load-on-startup>这个属性
        this.pageSize = GetPageSizeSevlet.getPageSize() ;
        this.allCount = GetUserDataDao.getAllPages() ;
       
        //进行相应的校正
        this.correct();
       
        this.position = (curPage-1) * pageSize ;
       
        List userList = new ArrayList() ;
        userList = GetUserDataDao.getUserListByCurPage(position,pageSize) ;
       
        Map map = new HashMap() ;
        map.put("userList", userList) ;
        map.put("curPage", curPage) ;
        map.put("allPages", allPages) ;
       
       
        //session.setAttribute("userList", userList) ;
        //session.setAttribute("map", map) ;
        req.setAttribute("map", map) ;
        req.getRequestDispatcher("index.jsp").forward(req, res) ;
       
       
    }

    public void correct()
    {
        if(allCount % pageSize == 0 )
        {
            allPages = allCount / pageSize ;
        }
        else
        {
            allPages = allCount / pageSize + 1 ;
        }
       
        if(this.curPage <= 0)
        {
            this.curPage = 1 ;
        }
        else if(this.curPage > this.allPages)
        {
            this.curPage = this.allPages ;
        }
    }
    @Override
    protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
    {
        doGet(arg0,arg1) ;
    }

}
GetUserDataDao.java

package cn.hld.edu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import cn.hld.edu.vo.User;

public class GetUserDataDao
{
    public static List getUserListByCurPage(int position,int pageSize)
    {
        List list = new ArrayList() ;
        PreparedStatement pstmt = null ;
        ResultSet rs = null ;
       
        Connection conn = null ;
        conn = DBConn.getConn() ;      

        String sql = "select * from user limit ?,?" ;
        try
        {
            pstmt = conn.prepareStatement(sql) ;
            //之前还忘记了,设的时候是从1开始
            pstmt.setInt(1, position) ;
            pstmt.setInt(2, pageSize) ;
            rs = pstmt.executeQuery() ;
            while(rs.next())
            {
                User user = new User() ;
                //之前还忘记了,取的时候是从1开始
                user.setUserId(rs.getInt(1)) ;
                user.setUserName(rs.getString(2)) ;
                list.add(user) ;
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace() ;
            System.out.println("分页查询出错!");
        }
        return list ;
    }
   
    public static int getAllPages()
    {
        int allPages = 0 ;
       
        Connection conn = null ;   
        conn = DBConn.getConn() ;
        try
        {
            Statement stmt = conn.createStatement() ;
            ResultSet rs = stmt.executeQuery("select count(*) from user") ;
            rs.next() ;
            allPages = rs.getInt(1) ;
        }
        catch(Exception e)
        {
            e.printStackTrace() ;
        }
       
        return allPages ;
    }
}
       
3.JSP的展现方面源代码如下(数字分页实现不好!):

index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="cn.hld.edu.vo.*,java.util.List,java.util.Iterator,java.util.Map,java.util.HashMap"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <style type="text/css">
  a
  {
    text-decoration:none ;
    margin:5px ;
  }
  a:hover
  {
    background:#5ef8fc ;
   
  }
  </style>

  </head>
 
  <body>
    <table border="1">
    <tr>
        <td>用户编号</td>
        <td colspan="5">用户名</td>
    </tr>
    <%
        Map map = (Map)request.getAttribute("map") ;

        int curPage = Integer.parseInt(map.get("curPage").toString()) ;
        int allPages = Integer.parseInt(map.get("allPages").toString()) ;
        List userList = (List)map.get("userList") ;
        Iterator it = userList.iterator() ;
        while(it.hasNext())
        {
            User user = (User)it.next() ;
    %>
    <tr>
        <td><%=user.getUserId()%></td>
        <td colspan="5"><%=user.getUserName()%></td>
    </tr>
    <%
        }
    %>
    <tr>
        <td>共<%=allPages %>页</td>
        <td>第<%=curPage %>页</td>
        <td><a href="getUserData?curPage=<%=(curPage - 1) %>">上一页</a></td>
        <td>
            <script language="javascript">
               
                for(var i = <%=curPage %> ; i <= <%=(curPage + 5 > allPages?allPages:curPage + 5)%> ; i++)
                {
                    document.write("<a href=\'getUserData?curPage=" + i + "\'>" + i + "<//a>") ;
                }
               
            </script>
           
        </td>
        <td><a href="getUserData?curPage=<%=(curPage + 1) %>">下一页</a></td>
        <td>
            <form action="getUserData" method="get">
                <select name="curPage">
                <%
                    for(int i = 1 ; i <= allPages ; i++)
                    {
                       
                %>
                    <option value="<%=i %>" <%=(i==curPage?"selected":"") %>><%=i %></option>
                <%
                    }
                %>
                </select>
                <input type="submit" value="Go"/>
            </form>
        </td>
    </tr>


    </table>
  </body>
</html>
  • Pagination.rar (478.8 KB)
  • 描述: Servlet读取XML文件实现JSP简单分页
  • 下载次数: 45
分享到:
评论

相关推荐

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例:matlab程序代码项目案例论文代码 多篇RMPC 鲁棒模型预测控制Paper-code-implementation.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3cd_02_0716.pdf

    lusted_3cd_02_0716

    pepeljugoski_01_0107.pdf

    pepeljugoski_01_0107

Global site tag (gtag.js) - Google Analytics