页面静态化

来源:互联网 发布:高效程序员的45个 pdf 编辑:程序博客网 时间:2024/05/23 18:54

  1. 效率方面,访问html页面时,服务器找到页面后直接返回,不会再进行后台处理,速度快很多很多,同时也是解决高并发,降低服务器资源占用最有效的方式。

2.静态网页化可以提高速度不管是aspphpjsp.net等动态程序,都需要读取调用数据库内容,才能显示数据,相对于流量比较大,就增加了数据库的读取次数,占用很大的服务器资源,影响网站速度。而采用网站做成静态的,直接除去了读取数据库的操作,减少了环节,还提高了网站反映速度。 

3.静态网页化有利于搜索引擎的收录从网站优化来分析,搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高,目前一些门户网站,如新浪搜狐网易阿里巴巴、百度、慧聪等,页面大多都采用静态或伪静态网页来显示,更便于搜索引擎抓取与排名。

    4. 静态网页化有利于网站稳定 

1、从安全角度讲,静态网页不宜遭到黑客攻击,但也说不定,黑客能耐大着呢 

2、从网站稳定性来讲,如果程序、数据库出了问题,会直接影响网站的访问,而静态网页就避免了如此情况,不会因为程序等,而损失网站数据,影响正常打开。


articleTemplate.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

 

<title>文章标题——${id}</title>

</head>

<body>现在时间是${time},你访问的文章id${id}

</body>

</html>

 

 

JspStatic.java

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;

 

import CreateStaticHTMLPage.CreateStaticHTMLPage;

 

/**

 *

 * 接收用户请求,生成或者直接返回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);

    }

 

}

 

CreateStaticHTMLPage.java

package CreateStaticHTMLPage;

 

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=UTF-8");// 设置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);// 发送指定文件流到客户端

    }

}


然后我们访问地址输上去

 

访问后他的地址就会变成后缀为.html形式的

 

 

而控制台就会显示这是一个新生成的

 

 

然后再看文件目录就会发现多了一个html的文件

 

当我们再次访问的时候,后台就会显示页面已存在,直接跳转

 

 

在用静态化页面方面也要注意信息的更新,某条信息有修改时,为了及时反映到html页面,需要重新生成html页面,操作方式即删除现有html重新生成一个




原创粉丝点击