网站的图标是网站的风格和内涵的一种概括,给网站制作一个好的图标是非常重要的。那么,怎么在 JavaWeb 中设置网站图标呢?
首先我们要知道,之所以我们在浏览网页的时候会在标题栏上显示出图标,是因为浏览器会隐式的发送一个 domain:port/favicon.ico 的请求,那么我们只要拦截这个请求然后把我们的图标作为响应发送回去,就可以让浏览器解析我们的图标并且显示了。这里我们可以通过 JavaWeb 中的过滤器来实现,具体实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package cn.iduoka.util;
import org.apache.log4j.Logger;
import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; import java.io.*;
@WebFilter(filterName = "FaviconFilter", urlPatterns = ("/favicon.ico")) public class FaviconFilter implements Filter {
Logger logger = Logger.getLogger(FaviconFilter.class);
@Override public void init(FilterConfig filterConfig) throws ServletException { logger.info("FaviconFilter is working."); }
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { InputStream is = FaviconFilter.class.getClassLoader().getResourceAsStream("/favicon.ico"); byte[] b = new byte[10 * 1024]; is.read(b); HttpServletResponse response = (HttpServletResponse) servletResponse; ServletOutputStream sos = response.getOutputStream(); sos.write(b); sos.flush(); is.close(); sos.close(); }
@Override public void destroy() { logger.info("FaviconFilter has been destroyed."); }
}
|
我们看到,我们拦截了 /favicon.ico 请求,然后其中的 doFilter 方法就是把我们的图标以流的形式读进来,然后再放在响应中发送给客户端,这样客户端就可以收到我们的图标并解析显示了。
本文链接:
https://www.nosuchfield.com/2016/01/05/set-the-website-icon-in-JavaWeb/