关于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. 0_Simple__simpleCallback

    学习回调函数的基本概念,并在CUDA的任务流中插入基于CPU的主机函数,作为回调函数使用. ▶ 源代码:没有用到的部分被注释起来了 /*multithreading.h*/ #ifndef MULTI ...

  2. JavaNIO非阻塞模式

    package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...

  3. AngularJS学习篇(十一)

    AngularJS 表格 ng-repeat 指令可以完美的显示表格. <!DOCTYPE html> <html> <head> <meta charset ...

  4. Problem C: 是否回文数?

    Description 定义Data类,有一个int类型的属性.定义其构造函数.setValue函数和isPalindrome函数,其中setValue函数用于设置属性值,isPalindrome用于 ...

  5. MVC页面静态化

    MVC 页面静态化   最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc ...

  6. Entity Framework 调用返回标量值的存储过程

    最近项目用到EF,虽然说EF与Linq To SQL有很多地方相似,但是EF(这里指3.5版,4.0版的还没去留意)确实有些地方做得不够方便. 就拿存储过程来说吧,EF里面想调用存储过程不是直接在数据 ...

  7. C#自定义运行时窗体设计器Runtime FormDesigner

    写在前面:因为业务的需要,有时会使用到自定义运行时窗体设计器Runtime FormDesigner,实现的功能,就是IDE设计器的简化.设想一下,如果可以在程序运行时,再设计一个Form,然后编译代 ...

  8. 设计模式的征途—21.迭代器(Iterator)模式

    我们都用过电视机遥控器,通过它我们可以进行开机.关机.换台.改变音量等操作.我们可以将电视机看做一个存储电视频道的集合对象,通过遥控器可以对电视机中的频道集合进行操作,例如返回上一个频道.跳转到下一个 ...

  9. Python之matplotlib学习(三)

    例子11-1:横坐标时间的处理 from matplotlib.dates import datestr2num,DateFormatter import matplotlib.dates as da ...

  10. Facebook-Haystack合并小文件

    1.原文 https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf 2.翻译版 http://www.importn ...