大家都做过SQL分页,可能做静态页分页的不多,这个东西做业务系统用不到,但是做小型企业网站用的比较多,其实像这种小型网站真是没啥技术含量,无非是文章管理,产品介绍,在线留言之类的,逻辑太过简单,也就用到了在线编辑器和前台静态化(不过也有很多公司还是直接从数据库中读的) PHP中有个Smarty模板,JAVA中有Velocity和FreeMarker,其实生成静态页和freemarker没有啥关系,你用txt,xml都行,直接也String都可以的,废话不多说了,开始。
效果图:
JAR包清单
commons-io-1.4.jar
commons-lang-2.4.jar
freemarker.jar
1.首先建立文章实体类
public class Article implements Serializable { public int id; public String title; public String context; public Date createDate; // get.. set.. public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } }
为什么不用private,其实根本无所谓,没破坏啥封装,看long大发的Android javaeye客户端代码不也是public的吗!
2. 建立ArticleDao,里面有2个方法,一个是获取所以文章(这里采用循环数据),另一个获取分页数据.
/** * 拿到所有文章 * @return List<Article> */ public static List<Article> getAllArticles() { List<Article> lstArticle = new ArrayList<Article>(); for (int i = 1; i <= 33; i++) { Article a = new Article(); a.id = i; a.title = "Title_" + i; a.context = "Context_" + i; a.createDate = new Date(); lstArticle.add(a); } return lstArticle; } /** * 根据当前页和每页大小拿到分页数据 * * @param pageNo * 当前页 * @param pageSize * 每页大小 * @param lstArticle * 数据 * @return List<Article> */ public static List<Article> getDataByPageNo(int pageNo, int pageSize, List<Article> lstArticle) { int totalpage = pageNo * pageSize > lstArticle.size() ? lstArticle.size() : pageNo * pageSize; return lstArticle.subList((pageNo - 1) * pageSize, totalpage); }
3.编写ArticleService层
* 思路,先调用ArticleDao.getAllArticle() 拿到所有数据,然后算出有多少页,再从第1页开始取数据
比如现在取第一页的数据,就开始生成一个xxx_1.html,接下来去第2页数据,就开始生成xxx_2.html
那么这样就可以有分页功能了哦 :)
public class ArticleService { /** * 默认存放路径 */ private static String DEFAULT_DIRECTORY_NAME = "Article"; private static Configuration cfg = FreeMarkerManager.getInstance().getConfiguration(); /** * 发布静态页 * * @param pageSize * 每页显示多少条 * @param directory * 存放目录名字 * @throws Exception */ public static void releaseArticle(int pageSize, String directory) throws Exception { // 删除文件后再重建 File file = new File("c:/ " + directory + "/"); FileUtils.deleteDirectory(file); file.mkdirs(); // 拿到所有数据 List<Article> lstArticle = ArticleDao.getAllArticles(); if (lstArticle != null && lstArticle.size() > 0) { // 得到一共有多少页数据 PageModel<Article> pms = new PageModel<Article>(1, pageSize, null, lstArticle.size()); long totalPage = pms.getTotalpage(); Template tmp = cfg.getTemplate("TestList.ftl"); // 将每页的数据生成静态页 for (int i = 1; i <= totalPage; i++) { PageModel<Article> pm = new PageModel<Article>(i, pageSize, ArticleDao.getDataByPageNo(i, pageSize, lstArticle), lstArticle.size()); Map<String, Object> root = new HashMap<String, Object>(); root.put("pm", pm); Writer out = new FileWriter("c:/ " + directory + "/t_" + i + ".html"); tmp.process(root, out); } } } /** * 发布静态页 * * @param pageSize * 每页显示多少条 * @throws Exception */ public static void releaseArticle(int pageSize) throws Exception { releaseArticle(pageSize, DEFAULT_DIRECTORY_NAME); } /** * 发布静态页 * * @throws Exception */ public static void releaseArticle() throws Exception { releaseArticle(10, DEFAULT_DIRECTORY_NAME); } }
4. 对应的模板文件 .ftl
<#macro isDisabled comparePage> <#if "${comparePage}" == "${pm.pageNo}"><#t> disabled="disabled" href="#"<#t> <#else> href="t_${comparePage}.html"<#t> </#if> </#macro> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <body> <center> <#list pm.getList() as article> <a href="#">${article.id} ${article.title} ${article.context} ${article.createDate?if_exists?string("yyyy-MM-dd HH:mm:ss")}</a><br/> </#list><br/><br/> <a <@isDisabled comparePage="1" />>首页</a> <#t> <a <@isDisabled comparePage="${pm.previousPageNo}" />>上一页</a> <#t> <a <@isDisabled comparePage="${pm.nextPageNo}" />>下一页</a> <#t> <a <@isDisabled comparePage="${pm.bottomPages}" />>尾页</a> <#t> ${pm.pageNo}/${pm.bottomPages} <#t> 共${pm.totalRecord}条记录 </center> </body> </html>
相关推荐
生成静态页面和分页主要的原理是通过动态网站技术将数据和HTML模板结合,最终输出为独立的HTML文件,提供给用户快速访问。这一过程涉及的主要技术包括服务器端脚本语言(如PHP、ASP.NET、JSP等)、模板引擎以及...
动态生成静态分页的核心在于将数据库中的新闻数据按照分页规则,逐页生成独立的HTML文件。这一过程通常在后台完成,例如在网站更新新闻或者定期维护时自动执行。这样做的好处包括: 1. **提升加载速度**:静态HTML...
总的来说,通用静态页面生成系统结合了参数化数据获取、JSP分页技术,旨在提供一个高效、可定制的解决方案,以生成静态网页,提升网站性能。无论是开发还是运维,都能从中获益,实现更优质的网站管理和用户体验。
9. **安全与性能**:需要注意的是,动态生成大文件可能会消耗大量服务器资源,因此需要考虑分页导出、异步处理等优化策略。另外,如果图片来自用户上传,务必进行安全检查,防止恶意文件注入。 总的来说,这个实例...
JSP(JavaServer Pages)是Java平台上的动态网页技术,允许开发人员将静态内容与Java代码结合起来,以生成动态网页。在JSP中,可以使用脚本元素(Scriptlets)、表达式、指令等来处理业务逻辑和数据。 ### SQL ...
`<jsp:include>`是一个动作标签,用于在运行时将一个静态或动态资源插入到JSP页面中。 2. **分页原理**: 数据分页通常包括两个主要部分:前端的分页展示和后端的数据查询。前端负责显示分页链接,后端根据用户的...
在JSP中实现分页的主要思路是:首先确定每页显示的数据数量(例如10条记录),然后根据用户请求的页码来计算出应该从数据库中查询哪些数据。通常,这个过程涉及到了SQL语句的`LIMIT`关键字来限制返回的结果集大小。 ...
JSP通过JavaServlet技术进行编译,最终转化为Servlet执行,提供了与静态HTML页面相融合的动态内容生成能力。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的核心功能在于帮助开发者...
1. **创建JSP页面**:在JSP页面中,设置一个区域用来显示分页内容,并预留用于显示分页控件的位置。 2. **编写Ajax请求**:使用JavaScript(例如jQuery库)编写Ajax请求,当用户操作分页控件时,向服务器发送请求。 ...
JSP(JavaServer Pages)作为Java的一种视图技术,提供了强大的功能来实现用户界面的动态生成。本篇文章将深入探讨JSP中的分页算法,帮助开发者更好地理解和运用这一关键技能。 首先,理解分页的基本概念。分页是将...
- **调用组件**:在JSP或Servlet中调用分页组件的方法,传入当前页码和每页记录数。 - **展示结果**:组件会返回分页后的数据,开发者将其渲染到页面上,同时生成分页导航链接。 5. **标签库(Tag Library)** ...
5. 分页:利用Servlet计算总页数,执行分页查询,JSP展示分页结果和导航。 6. EL和JSTL:在JSP中简化表达式和标签的使用,提高代码可读性。 以上就是使用jsp、servlet和javabean实现登录和分页功能的详细步骤和关键...
本项目“Ajax静态分页”就是利用Ajax实现的一种轻量级的分页解决方案。 首先,我们需要了解Ajax的基础。Ajax的核心是XMLHttpRequest对象,它允许JavaScript向服务器发送HTTP请求并接收响应。通过创建XMLHttpRequest...
4. **用户体验**:提供“跳转至第X页”的功能,并显示当前页和总页数。 通过以上步骤,我们可以用JSP有效地实现分页显示数据库中的数据,提供流畅的用户体验,同时减轻服务器的压力。在实际项目中,还可以结合前端...
1. **JSP(JavaServer Pages)**:JSP是Java技术在Web开发中的应用,它允许开发者将静态HTML与动态Java代码结合,用于生成动态网页。在这个程序中,JSP主要用于视图层的展示,将后台处理的数据以页面形式展现给用户...
JSP是Java的一个子技术,它允许开发者将HTML静态页面与Java代码结合,动态生成网页内容。在JSP页面中,开发者可以编写Java脚本来处理业务逻辑,同时使用HTML、CSS和JavaScript来控制页面布局和交互。 分页的核心...
在Java Web开发中,分页通常通过查询数据库时指定页码和每页条目数量实现。可以使用SQL的LIMIT和OFFSET或者存储过程来实现,也可以借助于框架如MyBatis的分页插件。 4. **Ajax(Asynchronous JavaScript and XML)*...
本知识点主要聚焦于"1-JSP+JDBC_假分页",这是一种在Java Web开发中实现简单分页的方法,适用于初学者快速理解和实践。 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,以...
- **静态分页**: 预先计算好所有页码,将每个页面的数据存储为单独的HTML文件,用户请求时直接加载对应页面。 - **动态分页**: 在服务器端动态生成每一页,根据用户的请求参数(如页码)调整查询范围,返回对应...