一、三种作用域

  作用域:web开发中用于存储和获得数据。

  1、request

    一次请求有效,在forward跳转时可用request作用域传递数据。

  2、session

    client不变,session不变。用于标记用户状态、存储用户数据、验证码、购物车等。

  3、ServletContext

    web应用不变,ServletContext不变,ServletContext代表的是整个web应用。一般用于储存全web单例的重量级资源。

    ServletContext对象通过session获得,ServletContext ctx = session.getServletContext();

二、连接池

  作用:原有JDBC的开发过程中,通过Class.forName等代码创建的连接,是现用现创建,系统效率低(Connection等资源的创建需要开启IO,只要涉及到IO操作,其效率一般都相对比较低下),所以产生了连接池。本质上就是预先创建一些连接存储起来,用户需要访问数据时,直接从连接池中获得已经创建好的连接,用完之后再归还到连接池。这样就减少了连接创建过程中的性能损失,提高系统的运行效率。

  1、tomcat的连接池的弊端

    不能应用main测试,也不能应用junit测试。测试代价太大。

  2、项目中使用的连接池,一定不是web容器连接池(tomcat、weblogic等),建议使用第三方连接池:框架连接池。

三、Filter过滤器

  作用:Filter解决的是多个Servlet中所存在的公有代码的冗余问题,引入Filter之后,把多个Servlet的冗余代码,提取到Filter中,那样用户的请求就会先经过Filter,然后再访问后续的Servlet。既能保证用户功能的完成,同时也解决了代码的冗余问题。

  1、开发步骤

    a、implements Filter  实现Filter接口

public class MyFilger implements Filter{

    @Override
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain){
        System.out.println("--------MyFilter invoke before request-------");
        chain.doFilter(request,response);
        System.out.println("--------MyFilter invoke after response--------");
    }
}

    Filter不仅可以拦截request,还可以拦截reponse。在doFilter()方法中有一个参数为FilterChain对象,FilterChain.doFilter(request,response)方法意味着将request传递给后续的Servlet,所以,在该方法之间的代码会在request之前执行,而Servlet所相应的response,也会在执行完Filter中的该方法之后的代码后才响应回client。

    b、在web.xml中配置Filter

<servlet>
    <servlet-name>targetServlet</servlet-name>
    <servlet-class>com.liquidxu.servlet.TargetServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>targetServlet</servlet-name>
    <url-pattern>/target</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.liquid.filter.MyFilter</filter-class>
</filter>
<filter-mappine>
    <filter-name>myFilter</filter-name>
    <url-pattern>target</url-pattern>
</filter-mapping>

    filter的写法跟servlet的写法基本一致,但是需要注意的是,servlet的url-pattern是该servlet的访问路径,而filter想拦截哪个servlet,就将自己的url-pattern写的跟该servlet的url-pattern一致即可。

    如果该filter想拦截所有的请求,该filter的url-pattern写成/*即可。

    如果该filter想批量拦截对Servlet的请求,则需要修改Servlet的url-pattern。例如,Servlet1的url-pattern为/admin/targer1,Servlet2的url-pattern为/admin/target2,这样将该filter的url-pattern写成/admin/*,这样就可以同时过滤到Servlet1和Servlet2了。

  2、存在的问题

    Filter默认只过滤用户的直接请求或者redirect的请求,而不过滤forward跳转。

    解决方案:

      

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>target</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

    只需在filter-mapping节点下加入此内容即可。

四、Servlet内容拾遗

  1、Servlet的创建

    Servlet对象为一种类型只创建一个对象提供服务,所以Serlvet对象为单例。

    多个线程访问同一个Servlet对象,Servlet是没有成员变量的,因此可以保证线程安全。

  2、Servlet的生命周期

    a、默认用户第一次访问的时候会创建Servlet。

    b、Tomcat启动的时候Servlet也可能会被创建,不过需要配置web.xml文件如下:

<servlet>
    <serlvet-name>targetServlet</servlet-name>
    <servlet-class>com.liquidxu.servlet.TargetServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

    c、Servlet创建以后,会调用一次init方法,完成初始化处理。

    d、Servlet的service方法对外提供服务,每一次请求都会调用。

    e、Servlet会在销毁之前调用destory方法。

  3、Servlet规范组件的启动顺序

    ServletContextListener----->Filter----->Servlet

  4、Servlet的核心实现原理

    用户请求该Servlet的时候,tomcat通过用户请求的url-pattern通过查找web.xml文件中的内容,获得该url-pattern所对应的Servlet的全限定名。然后利用该Servlet类的全限定名便可以通过反射创建出该Servlet类的对象,之后便调用该Servlet类的service方法来进行服务。

      

  

浅谈Servlet(三)的更多相关文章

  1. 浅谈C++三种传参方式

    浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...

  2. 浅谈servlet

    刚开始接触servlet的时候,其实不是太理解servlet的,后来经过慢慢摸爬滚打式的的学习,有了一点自己的理解. servlet的产生还要从Java和HTTP说起: Java的servletAPI ...

  3. 浅谈servlet版本

    说白话,eclipseJ2EE版本新建一个web项目后,在IDE中的项目根目录下会看到2.3,2.4,2.5,3.0,3.1....据说最新的4.0在路上,已经有草案了,很期待ing. 360百科是这 ...

  4. 浅谈Servlet(二)

    1.forward(请求的转发)和redirect(重定向) 目的:都是为了把一个Servlet的功能,拆分到多个Servlet中,便于后续代码的维护. a.forward(请求转发) (1).如何在 ...

  5. 浅谈Servlet(一)

    一.Servlet技术引言 1.什么是servlet a.Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式 ...

  6. 浅谈Servlet读取Html参数

    1首先:webApp名称为cookieAndsession.html文件一般放在WebRoot文件夹下:/cookieAndsession/WebRoot/OrderForm.html,那么外界要访问 ...

  7. 浅谈TCP三次握手和四次挥手

    学习三次握手和四次挥手前,先了解下几个基础的概念. Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保 ...

  8. 浅谈servlet与jsp的关系

    servlet是用java语言编写的,是一个java类.主要功能是用来接受.处理客户端的请求,并把处理结果返回到客户端显示.Jsp是servlet发展后期的产物.在没有jsp之前,servlet利用输 ...

  9. Linux网络编程——浅谈 TCP 三次握手和四次挥手

    一.tcp协议格式 二.三次握手 在 TCP/IP 协议中.TCP 协议提供可靠的连接服务,採用三次握手建立一个连接. 第一次握手:建立连接时,client发送 syn 包(tcp协议中syn位置1. ...

随机推荐

  1. 使用百度语音识别REST API,做全平台语音识别

    百度语音开发介绍文档: http://yuyin.baidu.com/docs/asr# 使用语音识别,需要在百度申请一个应用,然后拿到API Key和Secret Key,然后才可以使用语音识别 p ...

  2. HDU 5811 Colosseo(拓扑排序+单调DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5811 [题目大意] 给出 一张单向图,现在将其划分成了两个部分,问划分之后的点是否分别满足按照一定 ...

  3. DataGuard failover dg role自动切换模式测试

    1,在脚本中代入create db flash backup point for recover dg 2,测试前主备库状态(备库现角色验证,主库监听状态-->有意stop) 主要验证思路, 脚 ...

  4. UberX及以上级别车奖励政策(优步北京第二、三组)

    优步北京第二.三组: 定义为2015年6月1日至7月19日激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版 ...

  5. Android 启动Activity的方式

    Activity的启动分为两种方式,显示方式和隐式方式,显示方式就是在通过intent启动Activity时指定了Activity的包名和类名. 而隐式方式则在初始化Intent时仅仅指定action ...

  6. C# 文件帮助类

    using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...

  7. .Net 利用消息在进程间通讯实现进程互操作

    有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据:还有可以使用网络端口实现进程间通讯.共享一片内存区域记录及 ...

  8. 栈的实现 -- 数据结构与算法的javascript描述 第四章

    栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...

  9. Javascript 获取窗口的大小和位置

    在Javascript中可以使用OuterWidth,OuterHeight 获取浏览器的大小.用 innerWidth,innerHeight 来获取窗口的大小(除去浏览器边框部分).对于IE6 及 ...

  10. csapp lab3 bufbomb 缓存区溢出攻击 《深入理解计算机系统》

    这个实验主要是熟悉栈,和了解数据缓存区溢出的问题. 数据缓存区溢出:程序每次调用函数时,会把当前的eip指针保存在栈里面,作为被调用函数返回时的程序指针.在被调用程序里面,栈是向下增长的.所有局部变量 ...