文章正文
网站优化-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,若离线请留言!
热门阅读
-
运动筋膜学 Robert Schleip,Amanda Baker主编 北京:人民卫生出版社 PDF 9787117244343 出版时间:2017.pdf
运动筋膜学 Robert Schleip,Amanda Baker主编 北京:人民卫生出版社 PDF 9787117244343 出版时间:2017.pdf ...
-
医学启源 (金)张元素原著 北京:人民军医出版社 PDF 9787509127193 2009.pdf
医学启源 (金)张元素原著 北京:人民军医出版社 PDF 9787509127193 2009.pdf ...
-
圆运动的古中医学 续 彭子益编 北京:中国中医药出版社 PDF 9787802316461 2009.pdf
圆运动的古中医学 续 彭子益编 北京:中国中医药出版社 PDF 9787802316461 2009.pdf ...
-
阎明复回忆录 1-2 全两册 阎明复著 北京:人民出版社 PDF 9787010149356 出版时间:2015.pdf
阎明复回忆录 1-2 全两册 阎明复著 北京:人民出版社 PDF 9787010149356 出版时间:2015.pdf ...
-
文物保护学 王蕙贞编著 北京:文物出版社 PDF 9787501025657 2009.pdf
文物保护学 王蕙贞编著 北京:文物出版社 PDF 9787501025657 2009.pdf ...
-
针道摸象 王文德著 北京:中国中医药出版社 PDF 9787513203456 2011.pdf
针道摸象 王文德著 北京:中国中医药出版社 PDF 9787513203456 2011.pdf ...
-
印会河中医学基础讲稿 印会河著 北京:人民卫生出版社 PDF 9787117094740 2008.pdf
印会河中医学基础讲稿 印会河著 北京:人民卫生出版社 PDF 9787117094740 2008.pdf ...
-
中医十大类方 黄煌编著 南京:江苏科学技术出版社 PDF 9787534573996 出版时间:2010.pdf
中医十大类方 黄煌编著 南京:江苏科学技术出版社 PDF 9787534573996 出版时间:2010.pdf ...
-
30天学通Java项目案例开发 吴亚峰编著 北京:电子工业出版社 PDF 9787121090240 2009.pdf
30天学通Java项目案例开发 吴亚峰编著 北京:电子工业出版社 PDF 9787121090240 2009.pdf ...
-
辜鸿铭英译经典 《大学》《中庸》 中英双语评述本 辜鸿铭译;王京涛注 北京:中华书局 PDF 9787101119176 2017.pdf
辜鸿铭英译经典 《大学》《中庸》 中英双语评述本 辜鸿铭译;王京涛注 北京:中华书局 PDF 9787101119176 2017.pdf ...