Servlet
- 一般的,自定义的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
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类似,仅为一个声明,内部没有任何方法