关于java web

web.xml中一般配置的都是与servlet先关的可以配置servlet filter listener context-param用来配置web应用的启动参数,可用通过ServletContext对象获取参数,然后作用与整个web应用的生命周期

Filter 接口的使用

  • 创建Filter 类
  • 在web.xml中配置Filter 或者直接使用注解
  • 创建Filter必须实现javax.servlet.Filter接口,该接口中定义了三个方法
  • void init(FilterConfig config)
  • void destroy();
  • void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain)

下面是一个日志Filter,这个Filter负责拦截所有的用户请求,并将请求的信息记录在日志中

package com.ws.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
@WebFilter(filterName="log",urlPatterns="/*")
public class LogFilter implements Filter {
    private FilterConfig config;
    public void init(FilterConfig config){
        this.config=config;
    }

    public void destroy(){
        this.config=null;
    }

    public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain)
    throws IOException,ServletException
    {
        //下面代码用于对用户请求执行预处理
        ServletContext context=this.config.getServletContext();
        long before=System.currentTimeMillis();
        System.out.println("开始过滤...");
        HttpServletRequest hrequest=(HttpServletRequest)req;
        System.out.println("Filter已经拦截到的用户请求的地址:"+hrequest.getServletPath());
        //Filter 只是链式处理,请求依然放行到目的地址
        chain.doFilter(req, rep);
        //下面的代码用于对服务器响应后的处理
        long after=System.currentTimeMillis();
        System.out.println("过滤结束...");
        System.out.println("请求被定为到"+hrequest.getRequestURI()+" 所花的时间为:"+(after-before)+"s");

    }
}

Listener 接口

当web应用在web容器中运行时,会再web容器内发生各种事件,web应用启动,session开始,用户请求到达,响应用户请求,session结束,web应用关闭

  • ServletContextListener:用于监听web应用的启动和关闭
  • ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变

  • ServletRequestListener:用于监听用户请求
  • ServletRequestAttributeListener:用于监听request内范围属性的变化

  • HttpSessionListener: 用于监听用户的session的开始和结束
  • HttpSessionAttributeListener:用于监听session范围内属性的变化

下面将创建一个获取数据库链接的Listener ,该Listener会再应用启动时获取数据库链接,并将获取的链接设为application内的属性

  • 实现Listerner类

package com.ws.listener;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class GetConnListener implements ServletContextListener {
    //应用启动时触发
    public void contextInitialized(ServletContextEvent sce){
        try{
            ServletContext application=sce.getServletContext();
            String driver=application.getInitParameter("driver");
            String url=application.getInitParameter("url");
            String user=application.getInitParameter("user");
            String pass=application.getInitParameter("pass");
            Class.forName(driver);
            Connection conn=DriverManager.getConnection(url,user,pass);
            application.setAttribute("conn", conn);
        }
        catch(Exception ex){
            System.out.println("Listener 中获取数据库连接出现异常"+ex.getMessage());
        }
    }

    //应用关闭时触发
    public void contextDestroyed(ServletContextEvent sce){
        ServletContext application=sce.getServletContext();
        Connection conn=(Connection)application.getAttribute("conn");
        if(conn!=null){
            try{
                conn.close();
            }
            catch(SQLException ex){
                ex.printStackTrace();
            }
        }
    }

}

<listener>
    <listener-class>com.ws.listener.GetConnListener</listener-class>
</listener>

还需要添加context-param参数设置

<context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>

  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/javaee</param-value>
  </context-param>

  <context-param>
    <param-name>user</param-name>
    <param-value>root</param-value>
  </context-param>

  <context-param>
    <param-name>pass</param-name>
    <param-value>123456</param-value>
  </context-param>
  • 使用ServletContextAttrbuteListener

    需要实现如下三个方法

    void attributeAdded(ServletContextAttributeEvent event);

    void attributeRemoved(ServletContextAttributeEvent event);

    void attributeReplaced(ServletContextAttributeEvent event);

ServletRequestListener接口与ServletContextListener接口类似 HttpSessionListern接口 initialize换成create

java web学习笔记 servlet的更多相关文章

  1. java web学习笔记-Servlet篇

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

  2. Java Web学习笔记-Servlet不是线程安全的

    由于Servlet只会有一个实例,多个用户同时请求同一个Servlet时,Tomcat会派生出多条线程执行Servlet的代码,因此Servlet有线程不安全的隐患.如果设计不当,系统就会出现问题. ...

  3. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  5. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  6. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  7. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. nginx服务部署 说明

    第1章 常用的软件 1.1 常用来提供静态服务的软件   Apache :这是中小型Web服务的主流,Web服务器中的老大哥,   Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊 ...

  2. css 3d

    Perspective  透视点,视角,CSS3D 的透视点在浏览器前方 默认值为none,是作用于子元素,指定观察者与z=0平面的距离,使具有三维位置变换的元素产生透视效果.z>0的三维元素比 ...

  3. lvs学习笔记

    本人身为一个网工,最近一直在工作中学习linux的相关知识.前短时间通过自查资料学习了lvs的相关内容,摘录部分整理后和大家分享,内容较多,较琐碎,望见谅!!! LVS 从Linux内核版本2.6起, ...

  4. 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

    宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabiarm-linux-gcc:4.4.3QEMU:2.5.0Linux ke ...

  5. SQL注入详解

    SQL是一种将SQL代码添加到输入参数中,传递到SQL服务器解析并执行的一种攻击手段 产生的原因 web开发人员无法保证所有输入都已经安全过滤 攻击者利用发送给SQL服务器的输入数据,构造可执行的SQ ...

  6. Scrum Meeting Alpha - 1 (团队任务分解)

    团队任务分解 Alpha阶段项目目标 实现一个博客园班级博客的Android 客户端: 实现班级博客的常用功能(不包括投票.公告.校区) 有一个较为简洁美观.操作方便的界面 添加消息提醒功能. 任务拆 ...

  7. java获取当前上一周、上一月、上一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...

  8. WPF 简易的喷泉效果

    这两天领导让我做个喷泉的效果,要把一个个UserControl从一个位置喷出,然后,最后落在最终需要在的位置. 喷泉效果说白了,就是两个步骤:1.放大,从0放大到需要的倍数:2.缩小,平移,从放大的倍 ...

  9. [转载] zookeeper应用——集中配置管理系统的实现

    转载自http://blog.csdn.net/huangfengxiao/article/details/8844239 1 场景描述 参考http://www.ibm.com/developerw ...

  10. [转载] Java线程池框架源码分析

    转载自http://www.linuxidc.com/Linux/2014-11/108791.htm 相关类Executor,Executors,AbstractExecutorService,Ex ...