Filter:过滤器,用来过滤网站数据
1.处理乱码
2.登录验证
......
Filer编程:web.xml配置代码
<filter>
<filter-name>test13Filter</filter-name>
<filter-class>FilterWeb.test13Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>test13Filter</filter-name>
<url-pattern>/FilterWeb/*</url-pattern>
</filter-mapping>
1.编写好以下连段代码test13,test14,我们直接访问test14的时候会有编码问题,导致输出乱码
package FilterWeb;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class test14 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("你好吗?");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(req, resp);
}
}
package FilterWeb;
import java.io.IOException;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
public class test13Filter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/*
* chain:链
* 过滤中的所有代码,再过滤特定请求的时候都会被执行
* 必须要让过滤器继续执行:
* chain.doFilter(request, response);
*/
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("test13初始化");
}
public void destroy() {
System.out.println("test13销毁");
}
}
2.web.xml配置映射
<filter>
<filter-name>test13Filter</filter-name>
<filter-class>FilterWeb.test13Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>test13Filter</filter-name>
<在FilterWeb/下的所有程序都会走过滤器>
<url-pattern>/FilterWeb/*</url-pattern>
</filter-mapping>
//以下对test14配置两个地址,是为了方便测试,showtest14并不会走过滤器
<servlet>
<servlet-name>test14</servlet-name>
<servlet-class>FilterWeb.test14</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test14</servlet-name>
<url-pattern>/showtest14</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>test14</servlet-name>
<servlet-class>FilterWeb.test14</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test14</servlet-name>
<url-pattern>/FilterWeb/test14</url-pattern>
</servlet-mapping>
3.Filter启动和销毁
启动:服务器启动init就初始化
销毁:当服务器关闭,调用destory()销毁