java web底层问题

来源:互联网 发布:螺纹钢库存数据9月9曰 编辑:程序博客网 时间:2024/05/18 00:33

1、servlet

2、listener

     在Web项目中,我们可以使用Listener接口来监听Container的中一些对象状态的变化,并且根据这些对象的状态的变化做出相应的响应。

在Servlet 2.4和JSP 2.0 规范中一共有八个listener接口和六个event事件类。

当一个事件发生的时候我们可以使用listener中的某个方法去对事件做出相应的响应,这些方法的参数都是java.util.EventObject的子类。

这些Listener与其方法对应的Event参数类型如下图:
 

示例
package com.servlet.listener;import javax.servlet.ServletContext;import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class TestListener implements HttpSessionListener,ServletContextListener, ServletContextAttributeListener {private int count;private ServletContext context = null;public TestListener() {count = 0;// setContext(se);}/** * 创建一个新session激发 */public void sessionCreated(HttpSessionEvent se) {count++;setContext(se);System.out.println("增加了一个访问者::"+se.getSession().getId());}/** * 销毁一个会话触发 */public void sessionDestroyed(HttpSessionEvent se) {count--;setContext(se);System.out.println("一个访问者离开了::"+se.getSession().getId());}/** * 初始化上下文触发 */public void contextInitialized(ServletContextEvent sce) {this.context = sce.getServletContext();System.out.println(this.getClass() + "正在初始化ServletContext!" + context);}/** * 销毁上下文触发 */public void contextDestroyed(ServletContextEvent sce) {System.out.println(this.getClass() + "正在销毁ServletContext!"+context);this.context = null;}/** * 增加一个上下文参数触发 */public void attributeAdded(ServletContextAttributeEvent scab) {System.out.println(this.getClass() + "::正在加入参数>>" + scab.getName()+ "," + scab.getValue());}/** * 移除一个上下文环境参数触发 */public void attributeRemoved(ServletContextAttributeEvent scab) {System.out.println(this.getClass() + "::正在删除参数>>" + scab.getName()+ "," + scab.getValue());}/** * 修改一个上下文环境参数触发 */public void attributeReplaced(ServletContextAttributeEvent scab) {System.out.println(this.getClass() + "::正在修改参数>>" + scab.getName()+ "," + scab.getValue());}/** *  * @param se */private void setContext(HttpSessionEvent se) {se.getSession().getServletContext().setAttribute("OnLine",new Integer(count));}}


3、filter

  Filter也称之为过滤器,它是Servlet2.3以上新增加的一个功能,其技术也是非常强大的。通过Filter技术可以对WEB服务器的文件进行拦截,从而实现一些特殊的功能。在JSP开发应用中也是必备的技能之一。

   Filter可以改变一个request(请求)和修改一个response(响应)。Filter不是一个Servlet,它不能产生一个response,它能够在一个requsst到达Servlet之前预处理request,也可以在离开Servlet时处理response。

一个Filter包括:

1)、在Servlet被调用之前截获。

2)、在Servlet被调用之前检查Servlet Reqest。3

3)、根据需要修改request头和request数据。

4)、根据需要修改response头和response数据。

5)、在Servlet被调用之后截获。


filter编写

 一个Filter必须实现javax.servlet.Filter接口并定义三个方法:

  ● public void init(FilterConfig config):Filter实例化后进行初始化的回调方法。

  ● public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain):处理过滤器的方法。

  ● public void destory():Filter在释放时回调的方法。

DEMO

package com.servlet.filter;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;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestFilter implements Filter {private String defaultCode = "utf-8";private FilterConfig fcg = null;public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("正在做字符编码");HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;String charset = fcg.getInitParameter("charset");if (charset == null) {charset = defaultCode;}request.setCharacterEncoding(charset);resp.setCharacterEncoding(charset);resp.setContentType("text/html;charset=" + charset);chain.doFilter(req, resp);}public void init(FilterConfig arg0) throws ServletException {this.fcg = arg0;}}


4、context-param

原创粉丝点击