Main.java:
package org.jsoft.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jsoft.topic.Topic; import org.jsoft.topic.TopicOP; public class Main extends HttpServlet { int pageSize = 24;//每页显示记录数 int startRow = 0; //开始显示记录的编号 int pageNo=0;//需要显示的页数 int counterStart=0;//每页页码的初始值 //每页页码记录的初始值 int counterEnd=0;//显示页码的最大值 //每页页面记录的最大值 int recordCount=0;//总记录数; int maxPage=0;//总页数 int prevStart=0;//前一页 int nextPage=0;//下一页 int lastRec=0; //最后一页记录的标记 int lastStartRecord=0;//最后一页开始显示记录的编号 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取需要显示的页数,由用户提交 if(request.getParameter("pageNo")==null){ //如果为空,则表示第1页 if(startRow == 0){ pageNo = startRow + 1; //设定为1 } }else{ pageNo = Integer.parseInt(request.getParameter("pageNo")); //获得用户提交的页数 startRow = (pageNo - 1) * pageSize; //获得开始显示的记录编号 } //因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示 //一定数量的页面链接 //设置显示页码的初始值!! if(pageNo % pageSize == 0){ counterStart = pageNo - (pageSize - 1); }else{ counterStart = pageNo - (pageNo % pageSize) + 1; } counterEnd = counterStart + (pageSize - 1); TopicOP topicOP=new TopicOP(); //获取总记录数 recordCount=topicOP.queryCountRecord(); List<Topic> list=topicOP.queryPageAll(startRow, pageSize); request.getSession().setAttribute("list",list); //获取总页数 if(recordCount % pageSize == 0){ maxPage = recordCount / pageSize; }else{ maxPage = recordCount/pageSize+1; } request.setAttribute("pageNo",pageNo); request.setAttribute("startRow",startRow); request.setAttribute("pageSize",pageSize); request.setAttribute("counterStart",counterStart); request.setAttribute("counterEnd",counterEnd); request.setAttribute("recordCount",recordCount); request.setAttribute("maxPage",maxPage); String loginusername=(String)request.getSession().getAttribute("username"); request.getSession().setAttribute("loginusername", loginusername); String[] userInformation=topicOP.queryUserInformation(loginusername); request.setAttribute("userInformation", userInformation); request.getRequestDispatcher("main.jsp").forward(request,response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
TopicOP.java:
package org.jsoft.topic; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import org.jsoft.util.MyConnection; public class TopicOP { Connection conn = null; Statement st = null; ResultSet rs = null; public List<Topic> queryALL() { List<Topic> list = new ArrayList<Topic>(); try { conn = MyConnection.getConnection(); st = conn.createStatement(); String sql="select" +" ttopic,tclickcount,ttime,username ,tid "+" FROM bbsuser b ,(select tid,userid,ttopic,ttime ,tclickcount "+"FROM bbstopic group by tid ) a "+"WHERE a.userid=b.userid"; rs = st.executeQuery(sql); while (rs.next()) { Topic topic = new Topic(); topic.setTclickcount(rs.getInt(2)); topic.setTid(rs.getInt(5)); topic.setTtopic(rs.getString(1)); topic.setUsername(rs.getString(4)); topic.setTtime(rs.getDate(3)); list.add(topic); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { MyConnection.close(rs, st, conn); } return list; } //查询要显示的页面的所有记录。limit条件。返回一个List。 public List queryPageAll(int startRow,int pageSize){ List<Topic> list = new ArrayList<Topic>(); try { conn = MyConnection.getConnection(); st = conn.createStatement(); rs = st.executeQuery("select" +" ttopic,tclickcount,ttime,username ,tid "+" FROM bbsuser b ,(select tid,userid,ttopic,ttime ,tclickcount "+"FROM bbstopic group by tid ) a "+"WHERE a.userid=b.userid ORDER BY a.tid ASC LIMIT " +startRow+", "+pageSize); while (rs.next()) { Topic topic = new Topic(); topic.setTclickcount(rs.getInt(2)); topic.setTid(rs.getInt(5)); topic.setTtopic(rs.getString(1)); topic.setUsername(rs.getString(4)); topic.setTtime(rs.getDate(3)); list.add(topic); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ MyConnection.close(rs, st, conn); } return list; } public Topic queryByID(int id) { Topic topic = new Topic(); topic.setTid(id); try { conn = MyConnection.getConnection(); st = conn.createStatement(); String sql = "SELECT tcontents,ttime,ttopic,username FROM bbstopic a,bbsuser b WHERE a.userid=b.userid and tid= " + id; rs = st.executeQuery(sql); if (rs.next()) { topic.setTtime(rs.getDate("ttime")); topic.setTcontents(rs.getString("tcontents")); topic.setTtopic(rs.getString("ttopic")); topic.setUsername(rs.getString("username")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return topic; } public int addTopic(int userid,String ttopic,String tcontents,String ttime) { int tag = 0; try { conn = MyConnection.getConnection(); st = conn.createStatement(); String sql = "INSERT INTO bbstopic(userid,ttopic,tcontents,ttime) VALUES("+userid+",'"+ttopic+"','"+tcontents+"','"+ttime+"')"; tag = st.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); } return tag; } public String[] queryUserInformation(String username){ Connection conn = null; Statement st = null; ResultSet rs = null; String[] str = new String[2]; try { conn = MyConnection.getConnection(); st = conn.createStatement(); String sql = "SELECT email FROM bbsuser WHERE username='"+username+"'"; rs = st.executeQuery(sql); while(rs.next()){ str[1] = rs.getString("email"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { MyConnection.close(rs, st, conn); } str[0]=username; return str; } //获取总记录数 public int queryCountRecord(){ Connection conn = null; Statement st = null; ResultSet rs = null; int recordCount = 0; try { conn = MyConnection.getConnection(); st = conn.createStatement(); rs = st.executeQuery("select count(*) from bbstopic") ; rs.next(); recordCount = rs.getInt(1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return recordCount; } //public static void main(String[] args) { // TopicOP op=new TopicOP(); //// op.queryByID(3); // op.queryCountRecord(); // //} }
jdbc.properties
url=jdbc:mysql:///bbs username=root password=root driverclass=com.mysql.jdbc.Driver
main.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page import="org.jsoft.topic.TopicOP" %> <% request.setCharacterEncoding("utf-8"); String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <% int pageNo=(Integer)request.getAttribute("pageNo"); int startRow=(Integer)request.getAttribute("startRow"); int pageSize=(Integer)request.getAttribute("pageSize"); int counterStart=(Integer)request.getAttribute("counterStart"); int counterEnd=(Integer)request.getAttribute("counterEnd"); int recordCount=(Integer)request.getAttribute("recordCount"); int maxPage=(Integer)request.getAttribute("maxPage"); int prevStart=0; int nextPage=0; int lastRec=0; int lastStartRecord=0; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'main.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/mainstyle.css"> </head> <body> <div id="container"> <div id="top"> <div id="topleft"></div> <div id="topmiddle"> <h1 id="topich1"><font color="#DAD3A9">欢迎来到雪狼论坛</font></h1> </div> <div id="topright"> <table id=userinformation border="1px"> <tr> <td id="userinformationtd1">用户名</td> <td id="userinformationtd2">${userInformation[0]}</td> </tr> <tr> <td>邮箱</td> <td>${userInformation[1]}</td> </tr> <tr> <td colspan="2" height="40px"> <a href="changeInformation.jsp" id="changePersonalInformation_a">亲,点此更改个人资料!!!</a> </td> </tr> </table> <div id="topicrightreply"> <a href="reply.jsp" id="topicrightreply_a">亲,点此可发帖哦!!!</a> </div> </div> </div> <div id="gap">假如你没有惊天动地的大事情可以做,那么就做一个小人物,给一个可爱的小孩作父母,给一对老人做孝顺的子女,给你的另一半一个简单而幸福的人生。</div> <div id="middle"> <div id="middleleft"></div> <div id="middlecenter"> <marquee><font color="r#EAD1A8">点击标题进行回复 点击标题进行回复 点击标题进行回复 点击标题进行回复 点击标题进行回复</font></marquee> <table align="center" border="1px"> <tr><td align="center" width="325px">帖 子 标 题</td><td align="center" width="175px">帖 子 作 者</td><td align="center" width="100px">发 表 时 间</td><td align="center" width="100px">点 击 次 数</td></tr> <tr><%="总共"+recordCount+"条记录 - 当前页:"+pageNo+"/"+maxPage %></tr> <c:forEach var = "topic" items="${list}"> <tr> <td align="center"><a href="ReplyTo?tid=${topic.tid }">${topic.ttopic }</a></td> <td align="center">${topic.username }</td> <td align="center">${topic.ttime }</td> <td align="center"> ${topic.tclickcount }</td> </tr> </c:forEach> </table> <div id="page"> <font size=4 > <% //显示第一页或者前一页的链接 //如果当前页不是第1页,则显示第一页和前一页的链接 if(pageNo != 1){ prevStart = pageNo - 1; out.print("<a href=Main?pageNo=1>第一页 </a>: "); out.print("<a href=Main?pageNo="+prevStart+">前一页</a>"); } %> [ <% //打印需要显示的页码 for(int c=counterStart;c<=counterEnd;c++){ if(c <maxPage){ if(c == pageNo){ if(c %pageSize == 0){ out.print(c); }else{ out.print(c+" ,"); } }else if(c % pageSize == 0){ out.print("<a href=Main?pageNo="+c+">"+c+"</a>"); }else{ out.print("<a href=Main?pageNo="+c+">"+c+"</a> , "); } }else{ if(pageNo == maxPage){ out.print(c); break; }else{ out.print("<a href=Main?pageNo="+c+">"+c+"</a>"); break; } } } %> ] <% if(pageNo < maxPage){ //如果当前页不是最后一页,则显示下一页链接 nextPage = pageNo + 1; out.print("<a href=Main?pageNo="+nextPage+">下一页</a>"); } %> <% //同时如果当前页不是最后一页,要显示最后一页的链接 if(pageNo < maxPage){ lastRec = recordCount % pageSize; if(lastRec == 0){ lastStartRecord = recordCount - pageSize; } else{ lastStartRecord = recordCount - lastRec; } out.print(":"); out.print("<a href=Main?pageNo="+maxPage+">最后一页</a>"); } %> </font> </div> </div> <div id="middleright"> <div id="backtopbutton"> <input type="button" width="100" height="100" onclick="location.href='#top'" value="回到顶部" /> </div> </div> </div> <div id="bottom"> <p>笑笑更幸福</p> <p> 某人上街买了一坛好酒,放在小院走廊上,第二天,他发现酒少了5分之1,便在酒桶上贴了不许偷酒四个字。 第三天酒又少了5分之2,他非常生气又贴了偷酒者重罚5个字。 第四天,酒还是被偷,他肺都快气炸了。他朋友知道了就对他说;你不会在酒桶上贴尿桶二字啊,看谁还偷喝。他觉得很有道理就照办了。第五天天他哭了。桶满了。 ……等等,故事还没完,第六天,他再一次在酒桶上贴了不许偷酒四个字。 那一天很多人都哭了。 </p> </div> </div> </body> </html>
相关推荐
本篇将深入探讨JSP(JavaServer Pages)结合分页技术和Servlet的实现方式,以及一个经典JSP分页代码的详细解析。 首先,我们需要理解JSP的基本概念。JSP是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java...
在这个“jsp + servlet分页代码”中,我们很显然关注的是如何实现数据库查询结果的分页展示。分页是一种有效的优化策略,它能帮助用户更方便地浏览大量数据,同时减轻服务器负载。 首先,我们需要理解JSP和Servlet...
在IT行业中,Web开发是至关重要的领域,而`jsp`(JavaServer Pages)和`servlet`是Java Web开发中的核心技术,常用于构建动态网站。本项目以"jsp+servlet实现增删改查"为主题,旨在利用这两者实现CRUD(Create、Read...
2. 调用后台服务:通过Servlet或Controller调用后台处理分页的方法,传递当前页和每页大小。 3. 渲染结果:后台返回分页后的数据列表,JSP页面遍历并渲染到HTML中。 **四、后台处理分页** 在Java后端,我们需要...
《基于JSP、Servlet、Filters、JS、CSS和JBean的新闻管理系统开发详解》 新闻管理系统是企业信息化建设中常见的应用之一,它可以帮助用户高效地发布、管理和检索新闻信息。本系统采用Java技术栈,结合JSP、Servlet...
1.新闻分类:(国际 娱乐 体育 等)新闻分类需要从数据库中动态取出(因为后台中有添加删除修改分类的功能), 可以只显示4—5个分类,后面加个“更多>>”链接,来罗列所有分类 2.新闻搜索:(可以选择分类)以新闻标题...
"Ajax + Servlet" 分页技术是结合了异步JavaScript和XML(Ajax)与Java Servlet技术来实现在不刷新整个页面的情况下动态加载分页内容。本文将深入探讨这种技术的实现原理和步骤。 首先,让我们理解Ajax的核心概念。...
统名称:jsp+servlet+javabean新闻发布系统 大家好,这是我搜集整理好并且测试通过的的一个新闻发布系统,有程序,设计详细文档和ppt演示,我现在把程序共享给大家,有需要完整文档的朋友请再联系我!! 系统角色:...
在这个名为"分页servlet+jsp+javabean+sqlserver"的项目中,开发者构建了一个基于JavaWeb的人才储备系统。系统的核心功能是实现数据的分页展示,利用Servlet进行服务器端处理,JSP作为视图层进行前端展示,而...
此外,AJAX还可以用于分页显示图书列表,用户滚动页面时,后台自动加载更多数据,提升用户体验。 **4. 数据库交互** 图书管理系统通常会使用关系型数据库(如MySQL、Oracle等)存储图书信息、用户信息等数据。...
在这个"Ext Gantt + jsp + servlet 工程实例"中,我们将探讨如何将Ext Gantt与Java后端技术,即JSP和Servlet相结合,构建一个完整的Web应用。 1. **Ext Gantt**: Ext Gantt是Ext JS组件库的一部分,提供了一套完整...
基于Servlet+jsp+SQL Server实现的音乐网站前后台管理系统(系统PPT+项目计划书+ER图设计+需求说明书)基于Servlet+jsp+SQL Server实现的音乐网站前后台管理系统(系统PPT+项目计划书+ER图设计+需求说明书)基于Servlet+...
Servlet在后台处理业务逻辑,接收并响应来自JSP的请求。例如,`StudentServlet.java`可能包含了处理添加、删除、更新和查询学生信息的逻辑。Servlet通过重写`doGet`和`doPost`方法来处理HTTP GET和POST请求。它们...
这个项目是一个基于Java Web技术的图书管理系统,主要使用了JSP(JavaServer Pages)和Servlet技术来构建前端和后端交互的平台。JSP是一种动态网页开发技术,它允许在HTML页面中嵌入Java代码,实现了视图与逻辑的...
在Java Web开发中,"基于jsp+servlet、使用原生ajax,实现单表增删改查、文件上传、条件查询和分页" 是一个常见的实战项目,非常适合初学者熟悉整个Web应用开发流程。这个项目主要涵盖了以下几个核心知识点: 1. **...
《基于Ajax、JSP、Servlet和MySQL的图书管理系统实现详解》 在当今信息化社会,图书管理系统作为信息资源的重要载体,其高效、便捷的管理方式至关重要。本系统采用现代Web技术,结合Ajax、JSP、Servlet和MySQL...
系统主要基于Java Web技术栈,包括JSP(JavaServer Pages)、SQL Server数据库、Servlet以及Struts框架。下面将详细介绍这些关键技术及其在系统中的应用。 1. JSP:JavaServer Pages是Java平台上的一种动态网页技术...
开发者可以在jsp页面中嵌入Java代码,通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)来访问后台传递的数据,如显示书籍列表、渲染购物车内容等。此外,jsp还可以通过转发或重定向来...
【标题】"easyui+jsp+servlet上手实例"是一个基于Java Web开发的教程,它主要介绍了如何结合EasyUI、JSP和Servlet技术来构建Web应用程序。EasyUI是一个基于jQuery的UI库,提供了丰富的组件,如数据网格(datagrid)...
【新闻心态】是一个基于JSP、Servlet和JavaBean技术实现的新闻发布系统,旨在提供一个简易而实用的平台,用于发布和管理新闻。该系统的核心功能包括新闻的添加、编辑、删除以及展示,对于初学者或者需要快速搭建新闻...