文章正文
网站优化-jsp静态化
【文章】2020-04-23
简介网站优化-jsp静态化
编写JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文章标题——${id}</title>
</head>
<body>现在时间是${time},你访问的文章id为${id}
</body>
</html>2. 编写对应controller
package com.xiaochangwei.html;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* 接收用户请求,生成或者直接返回html
*
* @author xiaochangwei
*
*/
@WebServlet("/JspStatic")
public class JspStatic extends HttpServlet {
private static final long serialVersionUID = 1L;
public JspStatic() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("id") != null) {
String fileName = "article_" + request.getParameter("id") + ".html";
String filePath = getServletContext().getRealPath("/") + fileName;
File chapterFile = new File(filePath);
if (chapterFile.exists()) {
System.out.println("html页面存在,直接跳转");
response.sendRedirect(fileName);
return;
}
System.out.println("新生成html页面");
//TODO 这里可调用service查询页面上需要的数据,然后封装到request里面
request.setAttribute("time", new java.util.Date());
request.setAttribute("id", request.getParameter("id"));
new CreateStaticHTMLPage().create(request, response, getServletContext(), fileName, filePath,
"/articleTemplate.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}具体生成html的代码如下:
package com.xiaochangwei.html;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* 创建HTML静态页面
*
* @author xiaochangwei
*
*/
public class CreateStaticHTMLPage {
/**
* 生成静态HTML页面的方法
*
* @param request
* 请求对象
* @param response
* 响应对象
* @param servletContext
* Servlet上下文
* @param fileName
* 文件名称
* @param fileFullPath
* 文件完整路径
* @param jspPath
* 需要生成静态文件的JSP路径(相对即可)
* @throws IOException
* @throws ServletException
*/
public void create(HttpServletRequest request, HttpServletResponse response,
ServletContext servletContext, String fileName, String fileFullPath, String jspPath)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");// 设置HTML结果流编码(即HTML文件编码)
RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);// 得到JSP资源
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 用于从ServletOutputStream中接收资源
final ServletOutputStream servletOuputStream = new ServletOutputStream() {// 用于从HttpServletResponse中接收资源
public void write(byte[] b, int off, int len) {
byteArrayOutputStream.write(b, off, len);
}
public void write(int b) {
byteArrayOutputStream.write(b);
}
};
final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));// 把转换字节流转换成字符流
HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response) {// 用于从response获取结果流资源(重写了两个方法)
public ServletOutputStream getOutputStream() {
return servletOuputStream;
}
public PrintWriter getWriter() {
return printWriter;
}
};
rd.include(request, httpServletResponse);// 发送结果流
printWriter.flush();// 刷新缓冲区,把缓冲区的数据输出
FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath);
byteArrayOutputStream.writeTo(fileOutputStream);// 把byteArrayOuputStream中的资源全部写入到fileOuputStream中
fileOutputStream.close();// 关闭输出流,并释放相关资源
response.sendRedirect(fileName);// 发送指定文件流到客户端
}
}
打赏支持
感谢您的支持,加油!
打开微信扫码打赏,你说多少就多少
找书费时,联系客服快速获取!
在线客服8:30-22:30,若离线请留言!
获取教程,请联系在线客服!
在线客服8:30-22:30,若离线请留言!
热门阅读
-
诗余画谱 (明)汪氏原编;张宏宇整理 开封:河南大学出版社 PDF 7810911627 2004.pdf
诗余画谱 (明)汪氏原编;张宏宇整理 开封:河南大学出版社 PDF 7810911627 2004.pdf ...
-
电磁学通论 第2卷 英文 (英)詹姆斯·C.麦克斯韦(JAMESCLERKMAXWELL)著 北京:高等教育出版社 PDF 9787040488326 出版时间:2017.pdf
电磁学通论 第2卷 英文 (英)詹姆斯·C.麦克斯韦(JAMESCLERKMAXWELL)著 北京:高等教育出版社 PDF 9787040488326 出版时间:2017.pdf ...
-
电磁学通论 第1卷 英文 詹姆斯·麦克斯韦 北京:高等教育出版社 PDF 9787040485042 出版时间:2017.pdf
电磁学通论 第1卷 英文 詹姆斯·麦克斯韦 北京:高等教育出版社 PDF 9787040485042 出版时间:2017.pdf ...
-
转型时代与幽暗意识 张灏自选集 学人名家自选集 张灏著;任锋编校 上海:上海人民出版社 PDF 9787208149625 出版时间:2018.pdf
转型时代与幽暗意识 张灏自选集 学人名家自选集 张灏著;任锋编校 上海:上海人民出版社 PDF 9787208149625 出版时间:2018.pdf ...
-
远离贫穷 直销事业的财富魅力 肖卫编译 北京市:大众文艺出版社 PDF 7801717392 2005.07.pdf
远离贫穷 直销事业的财富魅力 肖卫编译 北京市:大众文艺出版社 PDF 7801717392 2005.07.pdf ...
-
生死烙印 福建分社 北京:中国华侨出版社 PDF 9787511372314 2018.pdf
生死烙印 福建分社 北京:中国华侨出版社 PDF 9787511372314 2018.pdf ...
-
烙印 臧克家著 北京:人民文学出版社 PDF 7020032583 2000.pdf
烙印 臧克家著 北京:人民文学出版社 PDF 7020032583 2000.pdf ...
-
野兽的烙印 (英国)吉卜林著;文美惠译 济南:山东文艺出版社 PDF 7532916588 1999.pdf
野兽的烙印 (英国)吉卜林著;文美惠译 济南:山东文艺出版社 PDF 7532916588 1999.pdf ...
-
故事烙印 速记最新考研英语大纲词汇 李峻编著 合肥:中国科学技术大学出版社 PDF 7312015093 2003.pdf
故事烙印 速记最新考研英语大纲词汇 李峻编著 合肥:中国科学技术大学出版社 PDF 7312015093 2003.pdf ...
-
文学文本解读 王耀辉著 武汉:华中师范大学出版社 PDF 7562219982 1999.pdf
文学文本解读 王耀辉著 武汉:华中师范大学出版社 PDF 7562219982 1999.pdf ...