视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Javaweb页面静态化_html/css
2020-11-27 16:01:17 责编:小采
文档


1 说明

静态页面本身就比动态页面快很多倍,而且动态页面总是要去数据库查询,这会更加降低速度!

页面静态化是把动态页面生成的html保存到服务器的文件上,然后再有相同请求时,不再去执行动态页面,而是直接给用户响应上次已经生成的静态页面。而且静态页面还有助与搜索引擎找到你!

2 查看图书分类

我们先来写一个小例子,用来查看不同分类的图书。然后我们再去思考如何让动态页面静态化的问题。

index.jsp
 ">全部图书
">JavaSE分类
">JavaEE分类
">Java框架分类

public class BookServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {	BookService bookService = new BookService();	List bookList = null;	String param = request.getParameter("category");	if(param == null || param.isEmpty()) {	bookList = bookService.findAll();	} else {	int category = Integer.parseInt(param);	bookList = bookService.findByCategory(category);	}	request.setAttribute("bookList", bookList);	request.getRequestDispatcher("/show.jsp").forward(request, response);	}}

show.jsp
	
图书名称 图书单价 图书分类
${book.bname } ${book.price }

JavaSE分类

JavaEE分类

Java框架分类


3 分析

用户第一次访问页面时生成静态页面,然后让请求重定向到静态页面上去。当用户再次访问时,直接重定向到静态页面上去。

我们需要为不同的请求生成静态页面,例如用户访问BookServlet?category=1时,我们要生成静态页面,当用户访问BookServlet?category=2时,也要生成静态页面。即不同的参数生成不同的静态页面!

我们可以使用category为key,静态页面的路径为value,保存到一个Map中,然后再把Map保存到ServletContext中。没有对应的静态页面时,我们生成静态页面,再重定向到静态页面,如果存在静态页面,那么直接重定向即可。



public class StaticResponse extends HttpServletResponseWrapper {	private PrintWriter pw;	public StaticResponse(HttpServletResponse response, String filepath)	throws FileNotFoundException, UnsupportedEncodingException {	super(response);	pw = new PrintWriter(filepath, "UTF-8");	}	public PrintWriter getWriter() throws IOException {	return pw;	}	public void close() throws IOException {	pw.close();	}}

public class StaticFilter implements Filter {	private ServletContext sc;	public void destroy() {	}	public void doFilter(ServletRequest request, ServletResponse response,	FilterChain chain) throws IOException, ServletException {	HttpServletRequest req = (HttpServletRequest) request;	HttpServletResponse res = (HttpServletResponse) response;	String key = "key_" + request.getParameter("category");	Map map = (Map) sc.getAttribute("pages");	if(map == null) {	map = new HashMap();	sc.setAttribute("pages", map);	}	if(map.containsKey(key)) {	res.sendRedirect(req.getContextPath() + "/staticPages/" + map.get(key));	return;	}	String html = key + ".html";	String realPath = sc.getRealPath("/staticPages/" + html);	StaticResponse sr = new StaticResponse(res, realPath);	chain.doFilter(request, sr);	sr.close();	res.sendRedirect(req.getContextPath() + "/staticPages/" + html);	map.put(key, html);	}	public void init(FilterConfig fConfig) throws ServletException {	this.sc = fConfig.getServletContext();	}}

下载本文
显示全文
专题