页面静态化
来源:互联网 发布:共青团中央 知乎 编辑:程序博客网 时间:2024/06/06 12:23
页面静态化,其实就是将动态生成的jsp页面,变成静态的HTML页面,让用户直接访问。有一下几方面好处:
1,首先就是访问速度,不需要去访问数据库,或者缓存来获取哪些数据,浏览器直接加载渲染html页即可。所以可以大大的提高访问效率;
2,从网站优化来分析,搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高。
3,从安全角度讲,静态网页不宜遭到黑客攻击,如果黑客不知道你网站的后台、网站采用程序、数据库的地址,静态网页, 更不容易受到黑客的攻击。
4,从网站稳定性来讲,如果程序、数据库出了问题,会直接影响网站的访问,而静态网页就避免了如此情况,不会因为程序等,而损失网站数据,影响正常打开,损失用户体验,影响网站信任度。
实现逻辑:
一,首先需要我们将一些需要静态化的页面进行分类,哪些经常不变内容的页面都需要静态化,例如,在电商里边的商店,店铺信息页;商品,货物信息页 等等。这些页面一旦发布了,后来改变的相对来说频率比较低,所以生成静态页面相对来说,可以大大提高用户的访问速度(不需要访问数据库,来动态生成jsp页面)。
二,将动态和静态分离开,例如:页面中用户信息,搜索栏等。这些信息需要从服务器获取,而那些静态页面一般放在云服务器上,例如上篇说到的阿里的OSS服务器,这里就设计到跨域问题,利用JSONP,来进行静态页面和动态页面,不同域直接的整合。
三,有些页面并不一定非要来静态化,但是为了避免地址暴露过多的信息,受到不法分子的攻击,URL伪静态也可以帮助我们,使页面看起来就像静态页面一样,这里提供一个URLRwrite,很简单好用,原理只是一个Filter。
案例
package com.controller;import java.io.File;import java.io.IOException;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.controller.CreateStaticHTMLPage;import com.dao.EmpDao;public class Servlet extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int nowpage = 1; if(request.getParameter("chapterId")!= null){ //静态页面名称 String chapterFileName = "Emp_"+request.getParameter("chapterId")+".html"; //页面保存路径 String chapterFilePath = getServletContext().getRealPath("/") + chapterFileName; File chapterFile = new File(chapterFilePath); if(chapterFile.exists()){//如果有这个文件就告诉浏览器转向 System.out.println("有此静态页面"); response.sendRedirect(chapterFileName); return; } System.out.println("没有此静态页面"); //存放业务处理后得到的信息 int pageSize = Integer.parseInt(request.getParameter("chapterId")); EmpDao ed = new EmpDao(); String param = null; ArrayList al = ed.selectEmp(nowpage, pageSize, param); request.setAttribute("list", al); //新建静态页面 new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(), chapterFileName, chapterFilePath, "/empRead.jsp"); } }}
创建静态页面
package com.controller;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;public class CreateStaticHTMLPage { public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response,ServletContext servletContext,String fileName,String fileFullPath,String jspPath) throws ServletException, IOException{ //设置HTML结果流编码(即HTML文件编码) response.setContentType("text/html;charset=utf-8"); //得到JSP资源 RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath); //用于从ServletOutputStream中接收资源 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); //用于从HttpServletResponse中接收资源 final ServletOutputStream servletOuputStream = new ServletOutputStream(){ 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); //把byteArrayOuputStream中的资源全部写入到fileOuputStream中 byteArrayOutputStream.writeTo(fileOutputStream); //关闭输出流,并释放相关资源 fileOutputStream.close(); //发送指定文件流到客户端 response.sendRedirect(fileName); } }
web.xml
<servlet> <servlet-name>demoServlet</servlet-name> <servlet-class>com.controller.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>demoServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="emp.do"> <input name="chapterId" type="text" value="5"/> <input type="submit" value="提交"/> </form> </body></html>
empRead.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'empRead.jsp' starting page</title> </head> <body> <table border="1" cellpadding="1"> <tr> <td>员工编号</td> <td>员工姓名</td> <td>员工薪水</td> <td>员工奖金</td> <td>员工上级编号</td> <td>员工入职日期</td> </tr> <c:forEach items="${list }" var="e"> <tr> <td>${e.empno }</td> <td>${e.ename }</td> <td>${e.sal }</td> <td>${e.comm }</td> <td>${e.mgr }</td> <td>${e.hiredate }</td> </tr> </c:forEach> </table> </body></html>
- 页面静态化【伪静态】
- php 静态化页面 生成静态页面
- 动态页面静态化
- 动态页面静态化
- jsp页面静态化
- freemark页面静态化
- 页面静态化
- 动态页面静态化
- freemarker页面静态化
- JSP页面静态化
- 动态页面静态化
- 页面静态化--总结
- jsp页面静态化
- l静态化页面
- php页面静态化
- 页面静态化
- aspx页面静态化
- PHP页面静态化
- Oracle创建WM_CONCAT函数
- PAT乙级1037. 在霍格沃茨找零钱(20)
- 初次用construct 2做游戏的总结
- BZOJ 3224 普通二叉树
- 不是吧 这么难?
- 页面静态化
- HDU 6208 The Dominator of Strings
- MAX1032简介及应用
- codeforces749A(python)
- Django创建项目
- spark2 dataframe map报错
- python 里装饰器
- 采用CPLD的MAX1032采样控制的实现方法
- 常用linux命令