今天第一次接触filter ,加载不上filter,
<filter>
<filter-name>First</filter-name>
<filter-class>com.atguigu.day01.first </filter-class>
</filter>
<filter-mapping>
<!-- 过滤器名称 -->
<filter-name>First</filter-name>
<!-- URL映射 -->
<url-pattern>/topage.jsp</url-pattern>
</filter-mapping>
我这里写的filter是直接写的class implements Filter的
<filter-name>和class( <filter-class>com.atguigu.day01.first </filter-class>)里面的值不要一样
当有多个filter时,执行do filter 的先后由配置时谁的mapping在前谁先拦截
由filterchain()连接起,到最后的filter传给servlet或jsp即释放
此处注意的是 在前一个的dofilter(){}中写了chain.dofilter()才会调用后一个filter否则不会
而且在对filter的xml配置中<url-pattern>/topage.jsp</url-pattern>设置要拦截的页面
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
会写之后
写一个login的提交表单里面有name和password
然后设置UserNameFilter(filter2)用于拦截name不是Tom的用户 和passwordFilte(filter3)拦截密码不是1234的
且UserNameFilter的初始值设在Filter中配置,passwordFilter设在web应用的初始化参数
index.jsp
<body>
<form action="topage2.jsp" method="post">
name:<input type="text" name="name"/>
password:<input type="text" name="password"/>
<input type="submit" value="submit"/>
</form>
</body>
topage2.jsp
<body>
<h2>Hi</h2>
</body>
filter2:
package com.atguigu.day01;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class first2 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy----");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String name1= request.getParameter("name");
String name2=config.getInitParameter("username");//filter中配置的取参
if(name1.equals(name2))
{
request.getRequestDispatcher("/topage2.jsp").forward(request, response);
}
else
{
request.getRequestDispatcher("/index2.jsp").forward(request, response);
}
}
private FilterConfig config;
public void init(FilterConfig config) throws ServletException {
this.config=config;
}
}
filter3:
package com.atguigu.day01;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class filter3 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String passwd1=request.getParameter("password");
String passwd2=config.getServletContext().getInitParameter("mypassword");//web配置中取初始化参数
if(passwd1.equals(passwd2))
{
request.getRequestDispatcher("/topage2.jsp").forward(request, response);
}
else{
request.getRequestDispatcher("/index2.jsp").forward(request, response);
}
}
private FilterConfig config;
public void init(FilterConfig config) throws ServletException {
this.config=config;
}
}
web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<filter>
<filter-name>First2</filter-name>
<filter-class>com.atguigu.day01.first2 </filter-class>
<init-param>
<param-name>username</param-name>//在filter中配置初始化参数
<param-value>Tom</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>First2</filter-name>
<url-pattern>/topage2.jsp</url-pattern>
</filter-mapping>
<context-param>
<param-name>mypassword</param-name> //在web中配置
<param-value>1234</param-value>
</context-param>
<filter>
<filter-name>First3</filter-name>
<filter-class>com.atguigu.day01.first3 </filter-class>
</filter>
<filter-mapping>
<filter-name>First3</filter-name>
<url-pattern>/topage2.jsp</url-pattern>
</filter-mapping>
</web-app>
今天的问题是:配置一个好用 但是在web.xml中配置2个filter会直接出现404错误 !!明天探究
‘今天必须要掌握的是如何配置初始化参数和如何取!顺便看应用到过滤
private FilterConfig config;
public void init(FilterConfig config) throws ServletException {
this.config=config;
}
当要用到是某方法的参数时 用以上思想,,,,然后用config去引出其他要用到方法这个思想很重要
----------------------------------------------------------------------------------------------------------------------------------------