代码结构如下:
$:~/hotel.com/ROOT # index.jsp WEB-INF classes hello HelloFilter.class HelloServlet.class src hello HelloFilter.java HelloServlet.java web.xml
其中web.xml配置
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- Please see the "Using Jikes" section of the Jasper-HowTo --> <filter> <filter-name>helloFilter</filter-name> <filter-class>hello.HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>helloFilter</filter-name> <url-pattern>/hello</url-pattern> </filter-mapping> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>hello.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
HelloServlet.java代码如下
package hello;
import java.util.Vector;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doPost(req, res);
}
public void doPost (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String out = "Hello You";
PrintWriter writer = res.getWriter();
writer.write("<html><head></head><body>");
writer.write(out);
writer.write("</body></html>");
} // doPost
}
HelloFilter.java代码如下
package hello;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class HelloFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("Filter 初始化");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
System.out.println("拦截 URI="+request.getRequestURI());
PrintWriter writer = res.getWriter();
writer.write("<!-- BEGIN -->");
chain.doFilter(req, res);
writer.write("<!-- END -->");
}
@Override
public void destroy() {
System.out.println("Filter 结束");
}
}
编译运行效果如下
javac -classpath .:/root/apache/apache-tomcat-6.0.37/lib/servlet-api.jar:/usr/share/java/servlet.jar *.java /usr/share/tomcat6/bin/catalina.sh start curl 127.0.0.1:8080/hello <!-- BEGIN --><html><head></head><body>Hello You</body></html><!-- END --> tail -f /var/log/tomcat6/catalina.out 拦截 URI=/hello