1. CityQuery.java
package com.xxx.servlet;import com.google.common.collect.Lists;import com.xxx.data.HotelInfo;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.List;/** * Created with IntelliJ IDEA. * User: zhenwei.liu * Date: 13-7-15 * Time: 下午7:39 * To change this template use File | Settings | File Templates. */public class CityQuery extends HttpServlet { private static String PAGE_NO = "pageNo"; private static String PAGE_SIZE = "pageSize"; private static String CITY = "city"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String city = req.getParameter(CITY); String pageNo = req.getParameter(PAGE_NO); String pageSize = req.getParameter(PAGE_SIZE); if (city == null || city.equals("") || pageNo == null || pageNo.equals("") || pageSize == null || pageSize.equals("")) resp.getWriter().println("参数缺失"); // 筛选城市 ListhotelList = Lists.newArrayList(); HotelInfo hotelInfo = HotelInfo.getInstance(); for (String hotelCode : hotelInfo.getHotelInfo().keySet()) { if (hotelCode.contains(city)) hotelList.add(hotelInfo.getHotelInfo().get(hotelCode)); } // 分页 int pageSizeInt = Integer.valueOf(pageSize); int pageNoInt = Integer.valueOf(pageNo); int startIndex = pageSizeInt * (pageNoInt - 1); int endIndex = startIndex + pageSizeInt; if (startIndex < 0) startIndex = 0; if (startIndex > hotelList.size() - 1) startIndex = hotelList.size() - 1; if (endIndex > hotelList.size() - 1) endIndex = hotelList.size() - 1; hotelList = hotelList.subList(startIndex, endIndex + 1); resp.getWriter().println("City: " + city); resp.getWriter().println("Page: " + pageNo); resp.getWriter().println("PageSize: " + pageSize); for (String hotel : hotelList) resp.getWriter().println(hotel); }}
2.HotelQuery.java
package com.xxx.servlet;import com.google.common.base.Charsets;import com.google.common.base.Splitter;import com.google.common.collect.Lists;import com.google.common.collect.Maps;import com.google.common.io.Files;import com.google.common.io.LineProcessor;import com.xxx.data.HotelInfo;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.util.List;import java.util.Map;/** * Created with IntelliJ IDEA. * User: zhenwei.liu * Date: 13-7-15 * Time: 下午5:27 * To change this template use File | Settings | File Templates. */public class HotelQuery extends HttpServlet { private static String SEQ = "seq"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String hotelCode = req.getParameter(SEQ); HotelInfo hotelInfo = HotelInfo.getInstance(); if (hotelCode == null || hotelCode.equals("")) resp.getWriter().println("参数缺失"); else resp.getWriter().println(hotelCode + " " + hotelInfo.getHotelInfo().get(hotelCode)); }}
3.WhiteListFilter
package com.xxx.filter;import com.google.common.io.Files;import com.xxx.data.WhiteList;import com.xxx.util.HttpTools;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.util.List;/** * Created with IntelliJ IDEA. * User: zhenwei.liu * Date: 13-7-15 * Time: 下午11:19 * To change this template use File | Settings | File Templates. */public class WhiteListFilter implements Filter { private static String IP = "ip"; @Override public void init(FilterConfig filterConfig) throws ServletException { } /** * 过滤白名单 * * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; String ip = HttpTools.getRemoteAddress(req); WhiteList whiteList = WhiteList.getInstance(); if (!whiteList.getWhiteList().contains(ip)) { resp.setCharacterEncoding("UTF-8"); resp.getWriter().println("您的IP受限"); } else { resp.setCharacterEncoding("UTF-8"); filterChain.doFilter(req, resp); } } @Override public void destroy() { }}
4.HotelInfo.java
package com.xxx.data;import com.google.common.base.Charsets;import com.google.common.base.Splitter;import com.google.common.collect.Lists;import com.google.common.collect.Maps;import com.google.common.io.Files;import com.google.common.io.LineProcessor;import java.io.File;import java.io.IOException;import java.util.List;import java.util.Map;/** * Created with IntelliJ IDEA. * User: zhenwei.liu * Date: 13-7-15 * Time: 下午7:40 * To change this template use File | Settings | File Templates. */public class HotelInfo { private static String INFO_FILENAME = HotelInfo.class.getClassLoader().getResource("hotelinfo.txt").getPath(); private MaphotelInfo; // 酒店列表静态数据 private static HotelInfo instance; private static Object lock = new Object(); // 锁对象 public Map getHotelInfo() { return hotelInfo; } public static HotelInfo getInstance() { if (instance == null) { synchronized (lock) { if (instance == null) { instance = new HotelInfo(); instance.hotelInfo = Maps.newHashMap(); // 初始化酒店信息,读入Map中 File file = new File(INFO_FILENAME); try { // 读取文件同时处理每行数据 Files.readLines(file, Charsets.UTF_8, new LineProcessor
>() { @Override public boolean processLine(String s) throws IOException { // 使用正则切分空字符 List data = Lists.newArrayList( Splitter.onPattern("\\s").trimResults().omitEmptyStrings().split(s)); instance.hotelInfo.put(data.get(0), data.get(1)); return true; } @Override public List getResult() { return null; } }); } catch (IOException ex) { ex.printStackTrace(); } } } } return instance; }}
5.WhiteList.java
package com.xxx.data;import com.google.common.base.Charsets;import com.google.common.io.Files;import java.io.File;import java.io.IOException;import java.util.List;/** * Created with IntelliJ IDEA. * User: zhenwei.liu * Date: 13-7-15 * Time: 下午11:39 * To change this template use File | Settings | File Templates. */public class WhiteList { private static String WHITE_LIST_FILENAME = WhiteList.class.getClassLoader().getResource("whitelist.txt").getPath(); ; private ListwhiteList; // 白名单静态数据 private static WhiteList instance; private static Object lock = new Object(); public static WhiteList getInstance() { if (instance == null) { synchronized (lock) { if (instance == null) { instance = new WhiteList(); File file = new File(WHITE_LIST_FILENAME); try { instance.whiteList = Files.readLines(file, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } } } } return instance; } public List getWhiteList() { return whiteList; }}
7.web.xml
Servlet Test Servlet Test hotelQuery com.xxx.servlet.HotelQuery hotelQuery /hotelQuery cityQuery com.xxx.servlet.CityQuery cityQuery /cityQuery WhiteListFilter com.xxx.filter.WhiteListFilter WhiteListFilter /*
8.pom.xml
4.0.0 ServletTest ServletTest 1.0-SNAPSHOT xxx.common xxx-supom-generic 1.2.32 javax.servlet servlet-api javax.servlet jstl com.google.guava guava