您现在的位置是:主页 > news > 做我的狗漫画网站/广告联盟平台自动赚钱
做我的狗漫画网站/广告联盟平台自动赚钱
admin2025/6/28 5:14:28【news】
简介做我的狗漫画网站,广告联盟平台自动赚钱,行业网站怎么做,wordpress rockgroupServlet过滤器的使用 Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 举个简单的例子,比如我们有个网站是需要登录的,所以在用户进入每个页面我们都需要去检测用户是否有登录,这时候我们就需要…
Servlet过滤器的使用
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
举个简单的例子,比如我们有个网站是需要登录的,所以在用户进入每个页面我们都需要去检测用户是否有登录,这时候我们就需要用到过滤器了。用户进入需要验证的页面都拦截下来,先进入过滤器做判断,如果有这个用户的登录信息,那么就放行,如果没有查询到此用户的登录信息,那么就跳转到登录页面或者其他你想设定的页面。
(程序的运行需要大量的配置及严苛的语法,如果你是第一次学习此内容,按照教程的指导,完全模仿操作。切勿一来就擅自改动,给自己的学习制造障碍!)
下面通过实例理解过滤器的原理和使用。
一、创建项目
IDEA创建web项目,可以参考我另一篇博文:手摸手教你在IDEA创建Web项目及配置Tomcat
二、编写程序
1. 目录结构如下
2. 编写过滤器程序
过滤器必须实现javax.servlet.Filter接口,该接口包含3个方法:init、doFilter、destroy。
- init(FilterConfig filterConfig):Java EE容器创建过滤器实例后调用该方法,用于为过滤器做准备工作,可以从filterConfig对象读取配置文件web.xml中为该过滤器设置的初始化参数。
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain):过滤操作在该方法里实现,包括检查、修改请求对象,检查修改应答对象。参数request是请求对象,response是应答对象,chain用于访问后续过滤器。
- destroy():Java EE容器在销毁过滤器实例前调用该方法,用于释放资源。
实现一个禁止某个地址访问hello.jsp的例子,首先编写过滤器程序,然后再配置文件web.xml中进行配置,最后运行。
该程序实现了Filter接口,再init()方法中读取配置文件的过滤器的参数(禁止访问的IP地址)。在doFilter()方法中检查客户端的IP地址,如果与禁止的地址相同就返回禁止访问的提示,不调用要访问的Web资源,在destroy()方法中释放资源。
AddressFilter.java
package filter;import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;public class AddressFilter implements Filter {private FilterConfig filterConfig = null;private String addressProhibited = null;public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;addressProhibited = filterConfig.getInitParameter("addressProhibited");//读取配置文件中的参数}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,ServletException{String ip = request.getRemoteAddr();// 判断如果是本地localhost的话,就改成127.0.0.1String address = ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;// 获取客户端IP地址if(address.equals(addressProhibited)) {// if(true) {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("<html>");out.print("<head>");out.print("<title>这个地址禁止访问</title>");out.print("</head>");out.print("<body>");out.print("<h1 align='center'>这个地址禁止访问</h1>");out.print("</body>");out.print("</html>");out.flush();return ;}chain.doFilter(request, response);}public void destroy() {this.filterConfig = null;}
}
2. 编写web.xml文件
在Tomcat应用服务器的web.xml文件中配置过滤器AddressFilter。
过滤器要在配置文件web.xml中进行配置才会起作用。配置分为两部分,一部分是对过滤器的定义,一部分是过滤器的映射。
先看定义过滤器的部分:
其中<filter-name>定义过滤器的名字,<filter-class>指定过滤器的类,<init-param>和</init-param>之间是该过滤器的参数(就是前面过滤器程序中读的),其中<param-name>是参数名,<param-value>是参数值。
再看过滤器的映射:
其中是过滤器的名字,< url-pattern>是要经过该过滤器的Web资源,这里指定的是/hello.jsp,如果是要指定项目都经过该过滤器,可以写/*。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><filter><filter-name>AddressFilter</filter-name><filter-class>filter.AddressFilter</filter-class><init-param><param-name>addressProhibited</param-name><param-value>127.0.0.1</param-value></init-param></filter><filter-mapping><filter-name>AddressFilter</filter-name><url-pattern>/hello.jsp</url-pattern></filter-mapping>
</web-app>
3. 创建hello.jsp文件
新建一个hello.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>hello</title></head><body>正常访问到hello.jsp</body>
</html>
4. 测试程序
运行服务器,从calhost:8080/或者127.0.0.1:8080/访问hello.jsp时,就会出现禁止访问的提示;而从其他机器访问时,就能正常访问。
本机测试:
其他设备测试:
三、问题及解决
import javax.servlet.*; //爆红
IDEA报错:java: 程序包javax.servlet不存在。这个问题是由于没有导入Tomcat依赖造成的,详细可以看我另一篇博文:IDEA添加Tomcat依赖