关于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. John

    John Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submissi ...

  2. 定时器解决js长时间运行脚本问题

    一般地,单个js操作的运行时间不应超过100毫秒,否则的话,会影响用户体验,用户会认为自己与界面失去联系.而对于一些复杂的任务,可能无法在100ms内完成,甚至会突破浏览器限制(调用栈大小限制和长时间 ...

  3. touchmove Bug 工作遇到

    touchmove在安卓浏览器上只会触发一次,需要preventDefault() touchmove events in Android web browsers have a really ser ...

  4. VUE父子组件传值问题

    一.父组件向子组件传递数据 组件实例的作用域是孤立的.这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,我们需要通过子组件的props选项. 1.静态props ...

  5. C#脏字过滤算法

    public class DirtyWordOper    {        private static Dictionary<string, object> hash = new Di ...

  6. Gitpage + hexo(3.0以上)搭建博客

    大半天,一边折腾,一边查找各种文档,写出的这篇文档,不知道有没有把程序表示得足够简明,有不足之处望指明. 前提:已安装好nodeJS和git. 桌面右击进入gitbash,输入npm install ...

  7. linux配置远程Git仓库

    一,安装git yum install git 二,在服务器(119.28.1.1)目录( /git/admin )上创建一个仓库 cd /git/admin touch aaa.html git i ...

  8. Mac OS X更新VirtualBox以后Genymotion无法启动的一种情况

    这两天VirtualBox更新到5.0了,于是乎就升级了.结果升级后就中了个大奖,Genymotion起不来了.我用的是Genymotion 2.5,不久前刚升级的,因为官网打不开,不知是不是最新版. ...

  9. JS构造函数模式

    构造函数是可以创建特定类型对象的函数,可以接受参数定义函数成员.如果之前做过java比较好理解,举个例子: function exampleFunction(arg1, arg2, arg3){ th ...

  10. RPC是什么

    RPC是什么? 通俗的讲就是,调用远程计算机上的服务,就像调用本地服务一样.通常包含传输协议和编码协议. RPC可以基于HTTP或TCP协议,但基于HTTP协议的RPC性能却不如基于TCP协议的RPC ...