`
mmBlue
  • 浏览: 167263 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jsp生成静态页并分页

阅读更多

大家都做过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>
  • 大小: 74.6 KB
分享到:
评论
1 楼 yaoguanyuan 2012-04-30  
按照上面这个例子,要是再加上查询应如何实现,能示范一下吗

相关推荐

    生成静态页面和分页主要的原理

    生成静态页面和分页主要的原理是通过动态网站技术将数据和HTML模板结合,最终输出为独立的HTML文件,提供给用户快速访问。这一过程涉及的主要技术包括服务器端脚本语言(如PHP、ASP.NET、JSP等)、模板引擎以及...

    新闻页静态生成分页

    动态生成静态分页的核心在于将数据库中的新闻数据按照分页规则,逐页生成独立的HTML文件。这一过程通常在后台完成,例如在网站更新新闻或者定期维护时自动执行。这样做的好处包括: 1. **提升加载速度**:静态HTML...

    通用静态页面生成系统

    总的来说,通用静态页面生成系统结合了参数化数据获取、JSP分页技术,旨在提供一个高效、可定制的解决方案,以生成静态网页,提升网站性能。无论是开发还是运维,都能从中获益,实现更优质的网站管理和用户体验。

    jsp生成XLS(excel)实例(带图片插入)

    9. **安全与性能**:需要注意的是,动态生成大文件可能会消耗大量服务器资源,因此需要考虑分页导出、异步处理等优化策略。另外,如果图片来自用户上传,务必进行安全检查,防止恶意文件注入。 总的来说,这个实例...

    jsp+sql server分页技术

    JSP(JavaServer Pages)是Java平台上的动态网页技术,允许开发人员将静态内容与Java代码结合起来,以生成动态网页。在JSP中,可以使用脚本元素(Scriptlets)、表达式、指令等来处理业务逻辑和数据。 ### SQL ...

    jsp数据分页源代码

    `&lt;jsp:include&gt;`是一个动作标签,用于在运行时将一个静态或动态资源插入到JSP页面中。 2. **分页原理**: 数据分页通常包括两个主要部分:前端的分页展示和后端的数据查询。前端负责显示分页链接,后端根据用户的...

    jsp 分页 值得看看 jsp 分页 jsp 分页 jsp 分页

    在JSP中实现分页的主要思路是:首先确定每页显示的数据数量(例如10条记录),然后根据用户请求的页码来计算出应该从数据库中查询哪些数据。通常,这个过程涉及到了SQL语句的`LIMIT`关键字来限制返回的结果集大小。 ...

    jsp +struts 分页经典

    JSP通过JavaServlet技术进行编译,最终转化为Servlet执行,提供了与静态HTML页面相融合的动态内容生成能力。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的核心功能在于帮助开发者...

    ajax+jsp分页控件

    1. **创建JSP页面**:在JSP页面中,设置一个区域用来显示分页内容,并预留用于显示分页控件的位置。 2. **编写Ajax请求**:使用JavaScript(例如jQuery库)编写Ajax请求,当用户操作分页控件时,向服务器发送请求。 ...

    jsp分页技术算法jsp分页技术算法

    JSP(JavaServer Pages)作为Java的一种视图技术,提供了强大的功能来实现用户界面的动态生成。本篇文章将深入探讨JSP中的分页算法,帮助开发者更好地理解和运用这一关键技能。 首先,理解分页的基本概念。分页是将...

    jsp 简捷 分页组件 简单配置可用

    - **调用组件**:在JSP或Servlet中调用分页组件的方法,传入当前页码和每页记录数。 - **展示结果**:组件会返回分页后的数据,开发者将其渲染到页面上,同时生成分页导航链接。 5. **标签库(Tag Library)** ...

    jsp+servlet+javabean实现登陆、分页功能

    5. 分页:利用Servlet计算总页数,执行分页查询,JSP展示分页结果和导航。 6. EL和JSTL:在JSP中简化表达式和标签的使用,提高代码可读性。 以上就是使用jsp、servlet和javabean实现登录和分页功能的详细步骤和关键...

    Ajax 静态 分页

    本项目“Ajax静态分页”就是利用Ajax实现的一种轻量级的分页解决方案。 首先,我们需要了解Ajax的基础。Ajax的核心是XMLHttpRequest对象,它允许JavaScript向服务器发送HTTP请求并接收响应。通过创建XMLHttpRequest...

    JSP实现分页显示数据库中的数据

    4. **用户体验**:提供“跳转至第X页”的功能,并显示当前页和总页数。 通过以上步骤,我们可以用JSP有效地实现分页显示数据库中的数据,提供流畅的用户体验,同时减轻服务器的压力。在实际项目中,还可以结合前端...

    简易的JSP信息管理程序,JSP+MVC+数据分页_增删改查Java源码

    1. **JSP(JavaServer Pages)**:JSP是Java技术在Web开发中的应用,它允许开发者将静态HTML与动态Java代码结合,用于生成动态网页。在这个程序中,JSP主要用于视图层的展示,将后台处理的数据以页面形式展现给用户...

    jsp分页打包下载 非常有用啊

    JSP是Java的一个子技术,它允许开发者将HTML静态页面与Java代码结合,动态生成网页内容。在JSP页面中,开发者可以编写Java脚本来处理业务逻辑,同时使用HTML、CSS和JavaScript来控制页面布局和交互。 分页的核心...

    java中级笔记+severlet jsp 分页 ajax等技术的笔记

    在Java Web开发中,分页通常通过查询数据库时指定页码和每页条目数量实现。可以使用SQL的LIMIT和OFFSET或者存储过程来实现,也可以借助于框架如MyBatis的分页插件。 4. **Ajax(Asynchronous JavaScript and XML)*...

    1-JSP+JDBC_假分页

    本知识点主要聚焦于"1-JSP+JDBC_假分页",这是一种在Java Web开发中实现简单分页的方法,适用于初学者快速理解和实践。 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,以...

    JSP分页大全,包含所有的JSP分页的详细说明

    - **静态分页**: 预先计算好所有页码,将每个页面的数据存储为单独的HTML文件,用户请求时直接加载对应页面。 - **动态分页**: 在服务器端动态生成每一页,根据用户的请求参数(如页码)调整查询范围,返回对应...

Global site tag (gtag.js) - Google Analytics