Servlet 过滤器的实例,将输出客户端的 IP 地址和当前的日期时间
源码:
过滤器Filter:
package cn.test1.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* 过滤器,在web.xml那里定义了只过滤Shuaxin这个即(http://localhost:8080/Atestproject/Shuaxin)
* 控制台会自动刷新
*/
public class LogFilter implements Filter {
public LogFilter() {
}
public void init(FilterConfig config) throws ServletException {
// 获取初始化参数
String testParam = config.getInitParameter("test-param");
// 输出初始化参数
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 获取客户机的 IP 地址
String ipAddress = request.getRemoteAddr();
// 记录 IP 地址和当前时间戳
System.out.println("IP "+ ipAddress + ", Time "
+ new Date().toString());
// 把请求传回过滤链
chain.doFilter(request,response);
}
public void destroy() {
// TODO Auto-generated method stub
}
}
被过滤的servlet
package cn.test1.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 每隔秒刷新页面,自动显示时间(页面自动被刷新)
* @author Administrator
*
*/
public class Shuaxin extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Shuaxin() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setIntHeader("Refresh", 1);
response.setContentType("text/html;charset=utf-8");
//得到当前时间
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute=calendar.get(Calendar.MINUTE);
int second=calendar.get(Calendar.SECOND);
//判断是早还是晚
if(calendar.get(Calendar.AM_PM)==0)
am_pm="AM";
else
am_pm="PM";
String CT =hour+":"+minute+":"+second+" "+am_pm;
PrintWriter out = response.getWriter();
String title="自动刷新Header设置";
//头文件
String docType=
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType
+
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<p>当前时间是:" + CT + "</p>\n"
);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Atestproject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>cn.test1.servlet.LogFilter</filter-class>
<init-param>
<param-name>Site</param-name>
<param-value>天才英俊</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/Shuaxin</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Shuaxin</servlet-name>
<servlet-class>cn.test1.servlet.Shuaxin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Shuaxin</servlet-name>
<url-pattern>/Shuaxin</url-pattern>
</servlet-mapping>
</web-app>
项目结构:
访问:
http://localhost:8080/Atestproject/Shuaxin
页面自动刷新页面显示:
控制台结果:
过滤器-将请求和相应的编码模式都设置为utf-8
过滤器:登录拦截
先编辑登录控制层的servlet
编辑登录拦截过滤器(先判断session的值在不在)
修改success.jsp (session 久一点
以下过程请不要跟着做,比较绕.
防盗链接:在LoginFiter添加doFilter()方法
判断第三方来源网站
判断发起人是否是本网站发起人
直接输入域名,输出为空
如果从其他页面访问这里,则会输出其他页面的内容
(清除缓存先,不然会缓存了的session会干扰)
写个链接连接到页面(前面只拦截了success.jsp页面所以不太好)
new一个jsp文件,来作为中转站
改了拦截在字符拦截上(因为字符拦截是拦截所有的)
成功被标识了来访的页面.
成功