Selvlet高级(Java web)

 实现第一个Filter
首先在Eclipse中创建一个名为chapter08的Web项目,然后在该项目的src目录下创建一个名为pidan.filter包,最后在该包下创建一个名为MyServlet的Servlet 类,该类用于访问时在浏览器中输出“Hello MyServlet”。
 

package chapter09;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().print("hello dashuju2004-------<br />");
    }
 
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
 
}

在web.xml对servlet进行如下配置

<servlet>
        <description></description>
        <display-name>MyServlet</display-name>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>pidan.filter.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

运行结果

 创建一个名为MyFilter的Fiter类,该类用于拦截MyServlet程序

package chapter09;
 
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 MyFilter implements Filter {
 
    public MyFilter() {
        // TODO Auto-generated constructor stub
    }
 
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        System.out.println("拦截了相应");
        response.getWriter().print("这是filter输出到页面的内容");
        
        if(true) {
            chain.doFilter(request, response);
        }
    }
 
    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        
    }
 
}

过滤器程序与Servlet程序类似,同样需要在 web.xml文件中进行配置,从而设置它所能拦截的资源;

<filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>pidan.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/MyServlet</url-pattern>
</filter-mapping>

 在上述代码中,过滤器的配置信息中包含多个元素,这些元素分别具有不同的作用,具体如下。
(1)<filter>根元素用于注册一个Filter。
(2)<filter-name>子元素用于设置Filter名称。
(3)<filter-class>子元素用于设置Filter类的完整名称。
(4)<filter-mapping>根元素用于设置一个过滤器所拦截的资源。
(5)<filter-name>子元素必须与<filter>中的<filter-name>子元素相同。
(6)<url-pattern>子元素用于匹配用户请求的URL,例如“/MyServlet”,这个URL还可以使用通配符“*”来表示,例如“*.do”适用于所有以“.do”结尾的Servlet路径。
运行结果:

 

Filter映射
拦截不同方式的访问请求
        在web.xml文件中,一个<filter-mapping>元素用于配置一个Fiter所负责拦截的资源。<filter-mapping>元素中有一个特殊的子元素<dispatcher>,该元素用于指定过滤器所拦截的资源被Servlet容器调用的方式,<dispatcher>元素的值共有4个:
        1) REQUEST
        当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或 forward()方法访问的,那么该过滤器将不会被调用。
        2) INCLUDE
        如果目标资源是通过RequestDispatcher的 include()方法访问的,那么该过滤器将被调用。
除此之外,该过滤器不会被调用。
        3)FORWARD
        如果目标资源是通过RequestDispatcher的forward()方法访问的,那么该过滤器将被调用。
除此之外,该过滤器不会被调用。
        4) ERROR
        如果目标资源是通过声明式异常处理机制调用的,那么该过滤器将被调用。除此之外,过滤器不会被调用。


创建一个名为ForwardServlet的Servlet类,该类用于将请求转发给first.jsp页面:
 

package chapter09;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值