关于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. CodeForces - 846F Random Query(期望)

    You are given an array a consisting of n positive integers. You pick two integer numbers l and r fro ...

  2. lynx---CentOS终端访问IP

    1.官网 http://lynx.isc.org 2.稳定版本 http://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.8rel.2.ta ...

  3. 使用NPOI导出图片到EXCEL

    1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...

  4. Mybatis主配置文件常见使用讲解

    在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或 ...

  5. Linux系列教程(二十一)——Linux的bash基本功能

    上篇博客我们介绍了什么是shell,以及编写shell脚本的两种执行方式.我们知道在敲命令的时候,有很多快捷键,比如tab键能补全命令,在比如为什么我们直接敲 ll 命令能显示目录的长格式,其实这是b ...

  6. HtmlImageGenerator乱码问题解决、html2image放linux上乱码问题解决

    使用html2image-0.9.jar生成图片. 在本地window系统正常,放到服务器linux系统时候中文乱码问题.英文可以,中文乱码应该就是字体问题了. 一.首先需要在linux安装字体,si ...

  7. shell中条件判断语法与判断条件小结

    1. IF条件判断语法: if Athen   dosthelif B   dosthelse   dosthfi 2. 判断条件:   2.1 字符串判断   str1 = str2 当两个串有相同 ...

  8. 用JAVA中BufferedImage画出漂亮的验证码点击变化

    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...

  9. linux服务器使用yum安装nginx

    一,安装nginx和php-fpm yum install nginx php-fpm 二, 找到nginx.conf find / -name nginx.conf 三,添加解析php配置 在ser ...

  10. 在没有DOM操作的日子里,我是怎么熬过来的(上)

    前言 在我动笔写这篇文章的时候,我刚刚从我的项目中删除了最后一行JQuery代码.至于我为何要这么做,请听闰土娓娓道来.前几年我还在想,假如有一天,前端世界里不能再直接操作dom了,我该怎么办?没想到 ...