Java web页面静态化_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:50:30
Original
1202 people have browsed it

1 说明

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

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

2 查看图书分类

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

index.jsp

  <a href="<c:url%20value='/BookServlet'/>">全部图书</a><br><a href="<c:url%20value='/BookServlet?category=1'/>">JavaSE分类</a><br><a href="<c:url%20value='/BookServlet?category=2'/>">JavaEE分类</a><br><a href="<c:url%20value='/BookServlet?category=3'/>">Java框架分类</a><br>  
Copy after login

public class BookServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		BookService bookService = new BookService();		List<book> 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);	}}</book>
Copy after login

show.jsp

Copy after login
图书名称 图书单价 图书分类
${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();	}}
Copy after login

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<string> map = (Map<string string>) sc.getAttribute("pages");		if(map == null) {			map = new HashMap<string>();			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();	}}</string></string></string>
Copy after login


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!