`

jsp生成静态页(jsp+servlet+xml)

阅读更多

package ningxia.bl.admin.contentrele;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Calendar;
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 ningxia.dao.admin.contentrele.ContentTreleMysql;
import ningxia.dao.admin.newsclassmang.NewsClassMysql;
import ningxia.dao.admin.newsmang.NewsMysql;
import ningxia.utils.db.DBConnectionDAO;
import ningxia.vo.admin.NewsBean;
import ningxia.vo.admin.NewsClassBean;
import ningxia.vo.admin.PageBean;
import ningxia.vo.SessionABC;
public class StaticPageServlet extends HttpServlet
{
private Connection conn;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
//System.out.println("**********project start***********");
String id = request.getParameter("static");
//System.out.println("The id is "+id);
int pageno = new Integer(request.getParameter("pageno")).intValue();
boolean commitflg = false;
try
{

//System.out.println("*************ready data out*********");
//建立到数据库的链接
this.conn = DBConnectionDAO.getConnection();
conn.setAutoCommit(false);
//实例化ContentTreleMysql()类
ContentTreleMysql contenttrelemysql = new ContentTreleMysql(conn);
NewsClassMysql newsclassmysql = new NewsClassMysql(conn);

NewsBean news = new NewsBean();
news = contenttrelemysql.FindNew(id);
//System.out.println("**********The For Cycle is start*********");
/**
* 读取数据库存储的新闻记录
*/
String newsid = news.getNews_id();
//System.out.println("---------The newsid is "+newsid+"-----------------");
String title = news.getNews_title();//读取新闻标题
String newssubtitle = news.getNews_subtitle();//读取新闻副标题
String newsauthor = news.getNews_author();//读取新闻作者姓名
String newsaddtime = news.getNews_addtime();//新闻添加时间
String newssource = news.getNews_source();//新闻采集地点
String newscontent = news.getNews_content();//新闻内容
String classid = news.getNews_classid();//新闻所属栏目ID
String newstemppath = news.getNews_newstemppath();//新闻模板路径
String newstempname = news.getNews_newstemplet();//读取新闻模文件名
String newsvideoflg = news.getNews_videoflg();
//System.out.println("The video flg is "+newsvideoflg);
int newslevel = news.getNews_level();//取得该新闻的栏目深度

//判断是否是视频新闻
String videourl = "";
String videodisplay = "";
if(newsvideoflg.equals("1")==true)
{
//该新闻是视频新闻
videodisplay = "block";
videourl = news.getNews_videosavepath()+news.getNews_videoname();
//System.out.println("The video url is "+videourl);
}
else
{
videodisplay = "none";
videourl = "";
}

//控制新闻标题的长度
String newstitle = "";
if(title.length()>=12)
{
newstitle = title.substring(0,11)+"......";
}
else
{
newstitle = title;
}


//根据newslevel来判断生成的静态页引用样式的路径
String path = "";String pathurl = "";
for(int i = 1;i<=newslevel;i++)
{
path = path + "../";
}
pathurl = path+"../";

//根据newslevel来判断
String newsclassid = "";String pareid = "";
newsclassid = news.getNews_classid();
pareid = newsclassid.substring(0,3);
//System.out.println("The pareid is "+pareid);
String pareclasscname = newsclassmysql.FindNewsClassCnameByClassID(pareid);
//System.out.println("The classcnname is "+classcname);
String classcnname = newsclassmysql.FindNewsClassCnameByClassID(newsclassid);

//初始化NewsClassBean
NewsClassBean newsclass = new NewsClassBean();
newsclass = contenttrelemysql.FindClassId(classid);
//String newsclass_enname = newsclass.getNewsclass_enname();//查询栏目英文名称
String newsclass_savefilepath = newsclass.getNewsclass_savefilepath();//查询新闻栏目保存的路径
String filepath = request.getRealPath("/")+newstemppath+newstempname;

String templateC;
//调用时间函数
Calendar calendar = Calendar.getInstance();
String filename = String.valueOf(calendar.getTimeInMillis());
/**
* 下面的程序用来对静态页面生成并分页
* 判断新闻记录种的</p>数量来分页,每页30行字符
* 用allpagenum来判断页面大小
* 当pagenum取余数为0时则用整页显示
* 当pagenum取余数不为0时则用pagenum+1页显示
*/

int line = 10 ;//每页显示10行
String arr[] = {};
//当分页标志即有</p>也有</br>时进行判断分页数
if(newscontent.split("</p>").length<=10&&newscontent.length()>=700&&newscontent.split("</br>").length>=10)
{
//用</br>来计算分页的页数
arr = newscontent.split("</br>");
}
else
if(newscontent.split("</br>").length<=10&&newscontent.length()>=700&&newscontent.split("</p>").length>=10)
{
//用</p>来计算分页的页数
arr = newscontent.split("</p>");
}
else
{
arr = newscontent.split("</p>");
}

//将数组内容按照</p>进行分割
int pagenum =arr.length/line;//需要多少页来显示数据
int length =arr.length;//数组长度
int other = arr.length%line;//最后一页所剩的行数
if(other!=0)
{
pagenum+=1;
}
/**
* 将静态页所在路径,静态页文件名称,静态页所属栏目ID存入数据库
*/
String staticfilename = filename+"_0.htm";//首页文件名
String staticfilepath = newsclass_savefilepath;//首页路径
String lp = filename+"_"+(pagenum-1)+".htm";//末页文件名
news.setNews_staticpagepath(staticfilepath);
news.setNews_staticfilename(staticfilename);
news.setNews_staticpagenum(pagenum);
contenttrelemysql.AddStaticPage(news);
/**
* 开始生成静态页面
*/
int q = 0;
String c;
String page ="";
int h = line;
for(int k=1;k<=pagenum;k++)
{
String a = "<a href="+filename+"_"+(k-1)+".htm>"+k+"</a>";
page =page+a;
}
for(int j=1;j<=pagenum;j++)
{
if((j==pagenum)&&(other!=0))
{
//最后一页
//取得剩余行数
for(int n=q;n<=length-1;n++)
{
//System.out.println("The Q is "+q);
//循环取出数据
content+=arr[n];
}
//替换模板页
FileInputStream fileinputstream = new FileInputStream(filepath);//读取模块文件
int lenght = fileinputstream.available();
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes);
fileinputstream.close();
templateContent = new String(bytes);
templateContent = templateContent.replaceAll("###path###", path);
templateContent = templateContent.replaceAll("###pathurl###", pathurl);
templateContent = templateContent.replaceAll("###newsId###", newsid);
templateContent = templateContent.replaceAll("###pareclassid###", pareid);
templateContent = templateContent.replaceAll("###pareclasscnname###", pareclasscname);
templateContent = templateContent.replaceAll("###newsclassid###", newsclassid);
templateContent = templateContent.replaceAll("###classcnname###", classcnname);
templateContent = templateContent.replaceAll("###newstitle###", newstitle);
templateContent = templateContent.replaceAll("###newssubtitle###", newssubtitle);
templateContent = templateContent.replaceAll("###newsauthor###", newsauthor);
templateContent = templateContent.replaceAll("###newsaddtime###", newsaddtime);
templateContent = templateContent.replaceAll("###newssource###", newssource);
templateContent = templateContent.replaceAll("###videodisplay###", videodisplay);
templateContent = templateContent.replaceAll("###videourl###", videourl);
templateContent = templateContent.replaceAll("###newscontent###", content);
templateContent = templateContent.replaceAll("###first###", staticfilename);
templateContent = templateContent.replaceAll("###number###", page);
templateContent = templateContent.replaceAll("###last###", lp);
String fileame_m = filename +"_"+(j-1)+".htm";
//System.out.println("The fileame is "+fileame);
String file = request.getRealPath("/")+newsclass_savefilepath+"/"+fileame_m;//生成html文件并存储绝对路径
//System.out.println("The file is "+file);
FileOutputStream fileoutputstream = new FileOutputStream(file);//建立文件输出流
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
//System.out.println("This is the ++++"+j+"++++"+content);
}
else
{

//System.out.println("h is "+h);
for(int m=q;;)
{
content+=arr[m];
m++;
q=m;

if(q>=h)
{
//替换模板页
FileInputStream fileinputstream = new FileInputStream(filepath);//读取模块文件
int lenght = fileinputstream.available();
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes);
fileinputstream.close();
templateContent = new String(bytes);
templateContent = templateContent.replaceAll("###path###", path);
templateContent = templateContent.replaceAll("###pathurl###", pathurl);
templateContent = templateContent.replaceAll("###newsId###", newsid);
templateContent = templateContent.replaceAll("###pareclassid###", pareid);
templateContent = templateContent.replaceAll("###pareclasscnname###", pareclasscname);
templateContent = templateContent.replaceAll("###newsclassid###", newsclassid);
templateContent = templateContent.replaceAll("###classcnname###", classcnname);
templateContent = templateContent.replaceAll("###newstitle###", newstitle);
templateContent = templateContent.replaceAll("###newssubtitle###", newssubtitle);
templateContent = templateContent.replaceAll("###newsauthor###", newsauthor);
templateContent = templateContent.replaceAll("###newsaddtime###", newsaddtime);
templateContent = templateContent.replaceAll("###newssource###", newssource);
templateContent = templateContent.replaceAll("###videodisplay###", videodisplay);
templateContent = templateContent.replaceAll("###videourl###", videourl);
templateContent = templateContent.replaceAll("###newscontent###", content);
templateContent = templateContent.replaceAll("###first###", staticfilename);
templateContent = templateContent.replaceAll("###number###", page);
templateContent = templateContent.replaceAll("###last###", lp);
String fileame_m = filename +"_"+(j-1)+".htm";
String file = request.getRealPath("/")+newsclass_savefilepath+"/"+fileame_m;//生成html文件并存储绝对路径
FileOutputStream fileoutputstream = new FileOutputStream(file);//建立文件输出流
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
c;
h=line+h;
break;
}

}
}
}
NewsMysql newsmysql = new NewsMysql(conn);
PageBean pagebean = new PageBean();
pagebean = newsmysql.FindNewsByPage(pageno, classid);
conn.commit();
session.setAttribute(SessionABC.NEWSPAGEINFO, pagebean);
response.sendRedirect("admin/admin_newsmang.jsp");
}
catch (Exception e)
{
out.print(e.getMessage());
}
finally
{
if (conn != null)
{
try {
if (commitflg)
conn.rollback();
conn.close();
}
catch (SQLException sqe)
{
sqe.printStackTrace();
session.setAttribute("SessionABC.ERRORMSG", "数据库连接关闭时发生错误");
response.sendRedirect("admin/error.jsp");
}
}
}
}
}
在xml中添加StaticPageServlet.do就可以了!试试吧


生成静态文件的代码.其实我还是比较赞成使用freemarker生成静态页或是使用服务器端读取jsp页来生成静态页。

package com.ntsky.cms.template;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import com.ntsky.framework.util.FileUtil;
import com.ntsky.framework.util.StringUtil;

import com.ntsky.cms.exception.BuildHtmlException;
/**
* 模板工具类
* @author Administrator
*
*/
public class TemplateManager {

public static Logger logger = Logger.getLogger(TemplateManager.class.getName());

private static TemplateManager templateManager = null;
private Configuration configuration = null;

public TemplateManager(){
// 设置freemarker的参数
configuration = new Configuration();
// setDirectoryForTemplateLoading("/template");
configuration.setObjectWrapper(new DefaultObjectWrapper());
configuration.setDefaultEncoding("UTF-8");
}

/**
* 取得模板处理的实例
* @return templateManager 模板处理实例
*/
public synchronized static TemplateManager getInstance(){
if( templateManager == null ){
templateManager = new TemplateManager();
}
return templateManager;
}

/**
* 生成静态文件<br/>
* [概要]<br/>
* <p>读取模板文件生成静态文件</p>
*
* [详细]<br/>
* <ol>
* <li>取得模板文件</li>
* <li>设置生成文件路径</li>
* <li>载入objectMap中的内容生成文件</li>
* </ol>
*
* @param templateFolder 模板相对于classpath的路径
* @param templateFileName 模版名称
* @param htmlFolder 要生成的静态文件的目录
* @param htmlFileName 要生成的文件名
* @param objectMap 模板中对象集合
* @return boolean 是否生成成功
*/
public void buildFile(String templateFolder,String templateFileName,String htmlFolder,String htmlFileName,Map objectMap) throws BuildHtmlException{
this.buildFile(templateFolder,templateFileName,StringUtil.applyRelativePath(htmlFolder,htmlFileName),objectMap);
}

/**
* 生成静态文件<br/>
* [概要]<br/>
* <p>读取模板文件生成静态文件</p>
*
* [详细]<br/>
* <ol>
* <li>取得模板文件</li>
* <li>设置生成文件路径</li>
* <li>载入objectMap中的内容生成文件</li>
* </ol>
*
* @param templateFolder 模板相对于classpath的路径
* @param templateFileName 模版名称
* @param htmlFilePath 要生成的静态文件的路径
* @param objectMap 模板中对象集合
* @return boolean 是否生成成功
*/
public void buildFile(String templateFolder,String templateFileName,String htmlFilePath,Map objectMap) throws BuildHtmlException{
Writer out = null;
try {
//configuration.setClassForTemplateLoading(this.getClass(), templateFolder);
configuration.setDirectoryForTemplateLoading(new File(templateFolder));
Template template = configuration.getTemplate(templateFileName);
template.setEncoding("UTF-8");
//创建生成文件目录
File htmlFile = new File(htmlFilePath);
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile),"UTF-8"));
template.process(objectMap,out);
out.flush();
} catch (TemplateException ex){
logger.error("Build Error"+templateFileName,ex);
throw new BuildHtmlException(ex.getMessage());
} catch (IOException e) {
logger.error("Build Error"+templateFileName,e);
throw new BuildHtmlException(e.getMessage());
}
finally{
try {
out.close();
} catch (IOException e) {
logger.error(e.getMessage(),e);
}
}
}

/**
* 生成多个文件
*
* @param templateFolder 模板目录
* @param templateMap 模板和文件对应的映射
* @param objectMap 对象Map
*/
public void buildFiles(String templateFolder, Map templateMap, Map objectMap){
Set set = templateMap.entrySet();
Iterator iterator = set.iterator();
Map.Entry entry = null;
String templateFileName = null;
String filePath = null;
while (iterator.hasNext()) {
entry = (Map.Entry) iterator.next();
templateFileName = (String)entry.getKey();
filePath = (String)entry.getValue();
this.buildFile(templateFolder,templateFileName,filePath,objectMap);
}
}
}

 

来源:http://hi.baidu.com/yidongshuma/blog/item/4deb9d07ed5a4c77030881a5.html

分享到:
评论

相关推荐

    JSP源码——jsp+servlet+javaBean实现MVC_jspmvc.zip

    【JSP源码——jsp+servlet+javaBean实现MVC】是基于Java Web技术构建的一种经典MVC(Model-View-Controller)模式的应用实例。在Web开发中,MVC模式被广泛采用,它将应用程序的业务逻辑、数据处理和用户界面分离,...

    jsp+Servlet+javaBean实现登录注册

    本项目“jsp+Servlet+javaBean实现登录注册”采用经典的Web开发技术栈,包括JavaServer Pages (JSP)、Servlet以及JavaBeans,结合MySQL数据库,利用集成开发环境myEclipse进行开发。下面将详细阐述这些知识点。 1. ...

    个人空间(jsp页面+javabean+servlet)

    在IT行业中,Web开发是一个广泛领域,而"个人空间(jsp页面+javabean+servlet)"则是一个典型的Java Web应用程序的构建方式。这个项目利用了Java Server Pages (JSP)、JavaBeans(Javabean)以及Servlet技术,来创建一...

    JSP+Servlet+MySql实现商城项目

    通过JSP,开发者能够将静态内容与动态数据结合起来,使得页面内容可以根据用户的请求和服务器的数据动态变化。例如,在商品详情页,JSP可以获取商品数据库中的信息并展示在页面上。 **Servlet** Servlet是Java编程...

    基于JSP+Servlet+JavaBean+Dao开发模式——学生体质管理系统{2018.2的IDEA加8.0的MySQL和9.0.11的Tomcat实现}

    比如,JSP页面位于`WEB-INF`下的`jsp`目录,`web.xml`部署描述符文件位于`WEB-INF`目录,用于配置Servlet和过滤器。 此外,项目依赖于IDEA集成开发环境,MySQL 8.0作为后端数据库存储学生体质数据,而Tomcat 9.0.11...

    jsp生成静态页面资料.rar

    JSP页面在首次请求时会被服务器编译成Servlet,然后执行生成HTML,并将其保存为静态文件。后续的请求会直接返回这个静态HTML,而非再次执行JSP。 4. **实现方式** - **预渲染**:在部署应用时或用户首次访问前,...

    Jsp+Servlet+JavaBean实例

    JSP的核心思想是将静态内容和动态内容分离,使得网页设计者可以专注于页面的布局,而开发者则负责处理业务逻辑。 **Servlet** 是Java平台上的CGI(Common Gateway Interface)替代品,主要用于扩展服务器功能,处理...

    jsp生成静态页

    四、实现JSP静态化的策略 1. 使用过滤器(Filter):通过配置一个过滤器,可以在用户请求JSP页面后自动将其转换为静态HTML并存储在指定目录下。 2. 依赖于Web服务器:某些Web服务器如Apache HTTP Server有内置的功能...

    AJAX+JSP+Servlet网络版俄罗斯方块

    总结来说,"AJAX+JSP+Servlet网络版俄罗斯方块"项目利用了AJAX进行无刷新的数据交互,JSP呈现动态界面,Servlet处理后端逻辑,共同构建了一个实时、互动的在线游戏环境。这种技术组合展示了Web开发中的高效协作,为...

    JSP+JDBC+Servlet实现ATM机的源码

    **JSP+JDBC+Servlet实现ATM机的源码详解** 在IT行业中,开发一个ATM(自动取款机)模拟系统是学习Web应用程序设计的常见实践项目。本项目结合了Java的JSP(JavaServer Pages)、Servlet和JDBC(Java Database ...

    JSP+JavaBean+Servlet工作原理

    **标签库**(Tag Libraries)在JSP中扮演重要角色,例如JSTL(JavaServer Pages Standard Tag Library)提供了一系列用于处理常见任务的标签,如循环、条件判断、XML处理等,使得JSP代码更简洁,降低了维护难度。...

    JSP文件生成静态页面

    但是,对于基础的JSP静态化,上述过滤器方法已经足够实现目标。 总结起来,"JSP文件生成静态页面"是一个旨在优化Web应用性能的技术,通过过滤器在请求处理阶段生成HTML并转发给客户端,降低了服务器处理动态请求的...

    学校实训JSP项目-网上购物系统(JavaBean+Servlet+jsp).zip

    2. **jsp**目录:包含所有的JSP页面,如index.jsp(首页)、login.jsp(登录页)、cart.jsp(购物车页)等。 3. **java**目录:存放JavaBean和Servlet的源代码文件。 4. **lib**目录:包含项目运行所需的外部库,如...

    jsp+servlet网上书店

    3. **JSP(JavaServer Pages)**:JSP是Java的一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而在服务器端生成动态内容。JSP页面在服务器上被编译成Servlet执行,返回生成的HTML到客户端浏览器。...

    基于jsp+Servlet+mybatis实现简单增删改查的图书信息系统

    在本项目中,我们主要探讨的是如何利用Java技术栈,特别是jsp、Servlet和MyBatis,来构建一个简单的图书信息管理系统。这个系统具备基础的图书信息增删改查(CRUD)功能,并且实现了分页展示,同时也包含了用户登录...

    jsp+servlet+jdbc案例

    【标题】"jsp+servlet+jdbc案例"涉及的是在Web开发中使用Java技术栈构建一个基于Browser/Server(B/S)架构的应用。JSP(JavaServer Pages)是用于创建动态网页的Java技术,它允许开发者将Java代码嵌入HTML或XML文...

    jsp+servlet+mysql实现的新闻发布管理系统项目源码.zip

    该项目是一个基于JSP、Servlet和MySQL的新闻发布管理系统,旨在提供一个功能完善的平台,用于发布、管理及查询新闻信息。在Java Web开发中,这样的系统是一个经典的实战案例,它涵盖了前端展示、后端处理以及数据库...

    jsp+servlet+mysql图书权限管理系统

    具体功能可能包括Servlet类、JSP页面、静态资源(如CSS、JavaScript)、配置文件(如web.xml)等。如果`Rbps`是一个目录,那么通常会包含项目的所有相关文件,按照一定的结构组织,如`WEB-INF`目录用于存放Servlet类...

    简易JSP+servlet投票系统

    源代码中可能包括JSP文件(扩展名为.jsp)、Servlet类(Java文件,扩展名为.java)、以及可能的配置文件(如web.xml,定义了Servlet和过滤器的映射)。此外,还可能包含静态资源,如CSS样式表和JavaScript文件,用于...

    jsp+servlet+el+jquery+ajax增删改mysql

    本项目是一个基于J2EE的简单Web应用程序,主要使用了JSP(JavaServer Pages)、Servlet、EL(Expression Language)以及jQuery和Ajax技术,实现了对MySQL数据库的无刷新增删改操作。这个demo是初学者理解这些技术...

Global site tag (gtag.js) - Google Analytics