Servlet基础

Servlet

image

  • 一般的,自定义的Servlet继承HttpServlet即可,覆写对应的doGet、doPost等方法
  • init(一次) —> service(每处理一次request执行一次) —> destory(一次)
  • 同一个Serlvet在同一个应用中是单例的,被不同线程,因此必须考虑线程安全问题
  • 假设存在如下配置,则在MyServlet中,通过getServletContext能获取context-param节点的键值对,通过getServletConfig能获取init-param节点的键值对
public class MyServlet extends HttpServlet{
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //省略
    }
}

//web.xml 中配置
<context-param>
    <param-name>teacher_name</param-name>
    <param-value>张三</param-value>
</context-param>
<servlet>  
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>包名.MyServlet</servlet-class>  
    <init-param>
        <param-name>student_name</param-name>
        <param-value>李四</param-value>
    </init-param>
</servlet>  
<servlet-mapping>  
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/*</url-pattern>  
</servlet-mapping>

Filter

image

public class MyFilter implements Filter{

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        //可在此处做拦截,比如未登录就访问某个页面时重定向到登录页面
        chain.doFilter(req, res); //放行。如果没有此句,请求就不会到达Servlet
        //可以在chain.doFilter之后做一些处理,比如对response中的值进行加密
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }
}

、、web.xml
<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>MyFilter</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>value在这里呢</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Demo1Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

Listener

Servlet有三大事件源:Request、Session以及Context。Listener就是对这三大事件源进行监听,因此分别有:
- ServletRequestListener/ServletRequestAttributeListener:前者监听request的创建和消亡事件,后者监听request的属性变更事件
- HttpSessionListener/HttpSessionAttributeListener:前者监听Session的创建和消亡事件,后者监听Session的属性变更事件
- ServletContextListener/ServletContextAttributeListener:前者监听Context的的创建和消亡事件,后者监听Context的属性变更事件

自定义的监听器只需要实现上述相应的接口即可

ServletRequestListener和ServletRequestAttributeListener

public interface ServletRequestListener extends EventListener {
    void requestDestroyed(ServletRequestEvent var1);
    void requestInitialized(ServletRequestEvent var1);
}

public interface ServletRequestAttributeListener extends EventListener {
    void attributeAdded(ServletRequestAttributeEvent var1);
    void attributeRemoved(ServletRequestAttributeEvent var1);
    void attributeReplaced(ServletRequestAttributeEvent var1);
}

HttpSessionListener和HttpSessionAttributeListener

public interface HttpSessionListener extends EventListener {
    void sessionCreated(HttpSessionEvent var1);
    void sessionDestroyed(HttpSessionEvent var1);
}

public interface HttpSessionAttributeListener extends EventListener {
    void attributeAdded(HttpSessionBindingEvent var1);
    void attributeRemoved(HttpSessionBindingEvent var1);
    void attributeReplaced(HttpSessionBindingEvent var1);
}

ServletContextListener和ServletContextAttributeListener

public interface ServletContextListener extends EventListener {
    void contextInitialized(ServletContextEvent var1);
    void contextDestroyed(ServletContextEvent var1);
}

public interface ServletContextAttributeListener extends EventListener {
    void attributeAdded(ServletContextAttributeEvent var1);
    void attributeRemoved(ServletContextAttributeEvent var1);
    void attributeReplaced(ServletContextAttributeEvent var1);
}

EventListener接口与Serializable类似,仅为一个声明,内部没有任何方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值