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("参数缺失"); // 筛选城市
List<String> hotelList = 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 Map<String, String> hotelInfo; // 酒店列表静态数据
private static HotelInfo instance;
private static Object lock = new Object(); // 锁对象 public Map<String, String> 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<List<String>>() {
@Override
public boolean processLine(String s) throws IOException {
// 使用正则切分空字符
List<String> data = Lists.newArrayList(
Splitter.onPattern("\\s").trimResults().omitEmptyStrings().split(s));
instance.hotelInfo.put(data.get(0), data.get(1));
return true;
} @Override
public List<String> 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 List<String> whiteList; // 白名单静态数据
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<String> getWhiteList() {
return whiteList;
}
}

7.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Servlet Test</display-name>
<description>
Servlet Test
</description>
<servlet>
<servlet-name>hotelQuery</servlet-name>
<servlet-class>com.xxx.servlet.HotelQuery</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hotelQuery</servlet-name>
<url-pattern>/hotelQuery</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cityQuery</servlet-name>
<servlet-class>com.xxx.servlet.CityQuery</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cityQuery</servlet-name>
<url-pattern>/cityQuery</url-pattern>
</servlet-mapping> <!-- 白名单filter配置 -->
<filter>
<filter-name>WhiteListFilter</filter-name>
<filter-class>com.xxx.filter.WhiteListFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WhiteListFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

8.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>ServletTest</groupId>
<artifactId>ServletTest</artifactId>
<version>1.0-SNAPSHOT</version> <parent>
<groupId>xxx.common</groupId>
<artifactId>xxx-supom-generic</artifactId>
<version>1.2.32</version>
</parent> <dependencies>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency> <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency> </dependencies> </project>

Servlet Filter 示例的更多相关文章

  1. Servlet Filter 2

    10.Filter常见应用 )统一全站字符编码的过滤器 通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题 案例:编写jsp 输入用户名,在Servlet中获 ...

  2. Servlet Filter 1

    1.Filter简介 )Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ...

  3. 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  4. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  5. Introduction of Servlet Filter(了解Servlet之Filter)

    API文档中介绍了public Interface Filter(公共接口过滤器) Servlet API文档中是这样介绍的: ‘A filter is an object that performs ...

  6. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  7. java Servlet Filter 拦截Ajax请求

    /** * 版权:Copyright 2016-2016 AudaqueTech. Co. Ltd. All Rights Reserved. * 描述: * 创建人:赵巍 * 创建时间:2016年1 ...

  8. Java-maven异常-cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突

    使用maven开发web应用程序, 启动的时候报错: jar not loaded. See Servlet Spec . Offending class: javax/servlet/Servlet ...

  9. 理解Servlet过滤器 (javax.servlet.Filter)

    过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...

随机推荐

  1. Eclipse的SVN插件与本地SVN客户端关联不上

    问题:当我们用SVN客户端把代码更新到本地,并导入到eclipse之后,却发现我们的SVN插件并没有起作用(没有代码入库.修改等小图标的显示,也没有check in,update等功能菜单).如果我们 ...

  2. vim进阶-自己设置vim编辑器

    我这是最基础的一些vim设置,参考文章http://blog.csdn.net/huiguixian/article/details/6394095 看大牛设置的vim,感觉很花里胡哨,以后慢慢接触: ...

  3. webpack2.0构建vue2.0超详细精简版

    原文地址:http://blog.csdn.net/dahuzix/article/details/55549387 npm init -y 初始化项目 安装各种依赖项 npm install --s ...

  4. spirng boot打包成war部署

    最近一段时间一直在研究和学习springboot,感觉其十分便利好用.以前使用spring搭建项目都整好多繁琐的配置,使用了springboot后这些繁琐的配置统统都不要了.但就是对springboo ...

  5. 解决centOS7的IP为127.0.0.1,无法用Xshll链接问题

    对于linux不熟悉的我, 安装完centOS7后好多坑,走一步卡一步,记得之前安装其他版本没这么多事.安装完后用ifconfig查看IP,竟然是127.0.0.1,这我就不知道怎么用Xshell链接 ...

  6. Python数据类型-列表(list)增删改查

    1.添加元素 添加单个元素:使用append(object)函数可以为列表添加单个元素,参数object为对象:也就是说所有Python的对象都可以添加到列表中. 添加多个元素(合并列表):使用ext ...

  7. Django+Nginx+uwsgi搭建自己的博客(三)

    (本来打算在这篇博文中介绍Users App的前端部分的,但写着写着就发现还需要铺垫很多东西才能把整个项目串的比较流畅些,因此这篇就继续介绍了后端的一些东西,前端的部分只好跳票到下一篇了-) 在上一篇 ...

  8. php获取当前域名、主机、URL、端口、参数、网址、路径、代理等【转】

    <?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br />"; //获取网页地址 echo $_SERVER['PH ...

  9. navicat批量导入数据

    1.excel表导入数据 根据数据表添加excel表内容 开始导入数据

  10. luoguP1354房间最短路问题

    判断两点间连通性,建图跑floyed #include<bits/stdc++.h> using namespace std; ; struct node { ],x; }q[N];dou ...