Web容器管理Servlet/JSP相关的对象生命周期, 若对HttpSession对象/ServletContext对象在生成, 销毁或相关属性设置(或改变)发生的时机感兴趣, 则可以实现对应的监听器(Listener). 1. ServletContext事件 监听器 与ServletContext事件相关的监听器有: 生命周期监听器: ServletContextListener 属性改变监听器: ServletContextAttributeListener (1) ServletContextListener 1> ServletContextListener概述: ServletContexListener接口是继承于EventListener接口, 主要用于知道Web应用程序何时已经初始化或即将结束销毁. 其中实现了contextInitialized()方法和contextDestroyed()方法, 分别在应用程序初始化后或即将结束前调用这两个方法.ServletContextListener接口的实现代 继续阅读 >>


祝一迪 17/06/03 15:16:59
今天上课学到了C++的浅层拷贝与深层拷贝, 于是在这里将C++和Java关于浅层拷贝与深层拷贝做一个对比. 一.C++的浅层拷贝与深层拷贝 先来了解一下C++中的复制构造函数: //假设有这样一个TEST类: class TEST { private: int *num; public: TEST(int n) { num = new int; *num = n; } void change(int anothernum) { *num = anothernum; } void print() { cout << *num << endl; } }; 在上述TEST类中并没有显式定义TEST类的复制构造函数, 那么其默认的复制构造函数应为: TES 继续阅读 >>


祝一迪 17/05/24 23:07:26
一.关于Servlet的一些基本概念 -每个Servlet都必须由Web容器读取Servlet设置信息(标注或web.xml),初始化等,才能成为一个真正的Servlet. 1.ServletConfig:每个Servlet设置的代表对象.对于每个Servlet的设置信息,Web容器都会为其生成一个ServletConfig作为代表对象. 2.ServletContext:代表整个Web应用程序的对象. (1)Servlet接口上定义的与生命周期及请求服务相关的三个方法 1>init():对Servlet的一些初始化工作; 2>service():调用Servlet实例的service()方法进行服务; 3>destory():对Servlet的一些善后工作. (2)Servlet的生命周期 1>Web容器启动后,读入Servlet设置信息,产生一个ServletConfig对象,并作为参数传入init(); 2>初始化完成后,请求来临,产生HttpRequest对象和HttpResponse对象,并传入ser 继续阅读 >>


祝一迪 17/05/24 17:29:40
今天遇到一个问题,需要输入命令行参数,然后就发现不知道IDEA应该在哪里输入命令行参数. 方法一: 在上方工具栏点击Run选项,然后会出来一个小框,点击Edit选项,在Program arguments栏输入你要输入的命令行参数,点击Run就可以啦! 方法二: 快捷键实现以上操作: ALT + SHIFT + F10,右,Edit,回车键,Tab键,输入命​​令行参数,回车。 作者:dela_ 发表于2017/5/23 21:54:05 原文链接 阅读:2 评论:0 查看评论 继续阅读 >>


祝一迪 17/05/23 21:54:05
很久都没有写博客(没脸见人.jpg),但是并不代表没有在学习,所以从今天开始决心好好写博客!!! 那就先看看IDEA下如何新建一个Web Project并配置tomcat: 1.新建一个工程 新建一个工程,并选中Web Application选项 2.准备tomcat Google tomcat,然后在tomcat官网下载合适的tomcat包 3.在project中添加所需要的tomcat中的servlet api和jsp api的jar包 点击右上角的图标,进行project的设置 点击Library选项,再点击Java选项 在刚才准备好的tomcat包中的lib目录中,选择添加jsp-api.jar和servlet-api.jar 4.配置tomcat 点击下图所示的图标,选中Edit选项,进行tomcat配置 点击+号,在选项中添加Tomcat Server的local 添加之后发现下方有一个Warning,点击右边的fix解决Warning,然后点OK就好啦! 继续阅读 >>


祝一迪 17/05/21 22:40:28
中断 中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 硬件中断 硬件中断是一个异步信号, 表明需要注意, 或需要改变在执行一个同步事件. 硬件中断是由与系统相连的外设(比如网卡 硬盘 键盘等)自动产生的. 每个设备或设备集都有他自己的IRQ(中断请求), 基于IRQ, CPU可以将相应的请求分发到相应的硬件驱动上(注: 硬件驱动通常是内核中的一个子程序, 而不是一个独立的进程). 比如当网卡受到一个数据包的时候, 就会发出一个中断. 处理中断的驱动是需要运行在CPU上的, 因此, 当中断产生时, CPU会暂时停止当前程序的程序转而执行中断请求. 一个中断只能中断一颗CPU(也有一种特殊情况, 就是在大型主机上是有硬件通道的, 它可以在没有主CPU的支持下, 同时处理多个中断). 硬件中断可以直接中断CPU. 它会引起内核中相关代码被触发. 对于那些需要花费时间去处理的进程, 中断 继续阅读 >>


祝一迪 16/10/07 19:40:05
数据结构及其概念 数据:客观事物的符号表示 数据元素:数据的基本单位 数据对象:性质相同的数据元素的集合 数据结构:是指相互之间具有一定里埃的数据元素的集合. 元素之间的相互关系称为逻辑结构 数据的逻辑结构 算法及其概念 算法:解决问题的步骤的描述, 在计算机中表现为指令的有限序列 算法的特性: I/O:算法有0个或者多个输入, 至少有一个输出 有穷性:无死循环, 能在可以接受的时间内完成 确定性:算法的每一步骤都有确定的含义, 不会出现二义性 可行性:算法的每一步都必须是可行的 线性表 线性表主要分为一般线性表, 串, 受限线性表(如栈, 队列等), 广义表等. 一般线性表是最基础, 最常用, 最简单的一种数据结构, 其主要的作用就是存储数据 按照物理结构可以划分为连续式和非连续式 链表 链表:是一种物理存储单元上非连续, 非顺序的存储结构. 数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列节点组成, 每个节点包括两个部分:数据域和指针域. 链表的基本操作: 链表的创建 链表的插入 链表的删 继续阅读 >>


祝一迪 16/08/04 15:54:28
参数简介 线程创建函数pthread_create有一个参数的类型为pthread_attr_t,该结构体的定义如下: typedef struct { int detachstate;//线程的分离状态 int schedpolicy;//线程的调度策略 struct sched_param schedparam;//线程的调度参数 int inneritsched;//线程的继承性 int scope;//线程的作用域 size_t guardsize;//线程栈末尾的警戒缓冲区大小 int stackaddr_set;//线程堆栈的地址集 void *stackaddr;//线程栈的位置 size_t stacksize;//线程栈的大小 }pthread_attr_t; 1.分离状态 线程的分离状态决定一个线程以什么样的方式来终止自己. 在默认情况下, 线程是非分离状态的,这种情况下, 原有的线程等待创建的线程结束. 只有当pthread_join()函数返回时, 继续阅读 >>


祝一迪 16/08/03 22:10:53
进程的介绍 进程代表程序的执行过程, 它是一个动态的实体, 随着程序的变化而不断的变化 在某个时刻进程的内容称作进程映像 所谓进程, 就是由正文段, 数据用户段以及系统数据段共同组成的一个执行环境 进程的状态 1.运行状态: 进程正在运行(每个时刻有且只能有一个进程正在运行) 2.就绪态: 进程正在运行队列中等待运行 3.阻塞态: 等待某种事情发生而阻塞 4.僵死状态: 进程已经终止, 但进程描述符依然存在, 直到父进程调用wait()函数后释放 进程控制块FCB struct task_struct { 1.状态信息 2.链接信息(链接符间的亲属信息, 如当前进程的父进程, 祖父进程, 兄弟进程, 子进程, 孙子进程等) 3.各种标识符(pid, uid, gid等) 4.进程间通信信息(管道, 消息队列, 共享内存等) 5.时间和定时器信息 6.调度信息 7.文件系统信息 8.虚拟内存信息 9.处理器环境信息 } 创建进程 1.分配PCB, 并将父进程PCB拷贝给新建的PCB. 子进程几乎继承了父进程所有的资源 2.检查进程是 继续阅读 >>


祝一迪 16/07/30 09:26:23
在暑假留校的这两周, 瑞神的linux系统编程系列讲座总共有四个小专题, 在这里我把瑞神讲座中的一些点总结一下 1.静态库和共享库 静态库: 概念: 静态库(以.a后缀标识)是指将所有相关的目标文件打包成为一个单独的文件, 即静态库文件.  静态库可作为链接器的输入,链接器会将程序中使用到的函数的代码从库文件中拷贝到应用程序中, 一旦链接完成, 在执行程序的时候就不需要静态库了. 共享库: 概念: 共享库(以.so后缀标识)是一个目标模块, 在运行时, 可以加载到任意的存储器地址, 并和一个在存储器中的程序链接起来, 这个或称成为动态链接, 是由一个叫做动态链接器的程序来执行的. 静态库和共享库的一些比较 由于每个使用静态库的应用程序都需要拷贝所用函数的代码, 所以静态链接的文件会比较大, 比较耗内存; 而共享库的源码只有一份, 应用程序需要用到库中的函数时, 通过地址就能找到共享库的位置, 并和应用程序链接起来,节省了内存. 2.计算机软件体系结构 计算机最底层的结构是硬件, 硬件上层是操作系统, 操作系 继续阅读 >>


祝一迪 16/07/30 08:32:14