摘要:http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/index.html
阅读全文
摘要:一.抓取网页 1.URL Web 上每种可用的资源, 如HTML 文档、 图像、 视频片段、 程序等都由一个通用资源标志符(Universal Resource Identifier,URI)进行定位。 URI 通常由三部分组成:①访问资源的命名机制;②存放资源的主机名;③资源自身的名称。 URL 是 URI 的一个子集。 它是 Uniform Resource Locator 的缩写, 译为 “统一资源定位符”。通俗地说,URL 是 Internet 上描述信息资源的字符串,主要用在各种 WWW 客户程序和服务器程序上, 特别是著名的 Mosaic。 采用 URL 可以用一种统一的...
阅读全文
摘要:转自:http://blog.csdn.net/daoma/article/details/2302245Spring提供了一流的事务管理。在Spring中可以支持声明式事务和编程式事务。 本章主要目标如下: 1,Spring事务 2,事务属性 3,事务管理器 4,声明式事务 1.1Spring的事务 事务管理在应用程序中起着至关重要的作用:它是一系列任务的组成工作单元,在这个工作单元中,所有的任务必须同时执行。它们只有二种可能执行结果,要么所有任务全部执行成功,要么所有任务全部执行失败。 Spring中提供了丰富的事务管理功能,它们超过了EJB并且和EJB一样支持声明式事务,重要的是Sp..
阅读全文
摘要:参考:百科 相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。 所谓“半自动”,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。 1...
阅读全文
摘要:转自:http://blog.csdn.net/free0sky/article/details/7927275一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。ps:线程安全会带来额外的系统开销,所以StringB.
阅读全文
摘要:1.当List集合存储Integer时,把list转换成数组时,应该使用 Integer[]arrays=(Integer[])list.toArray(new Integer[list.size()]); 2.当remove数据时,特别注意remove(Int);他会调用其它的remove方法,这时应该 remove(Integer)
阅读全文
摘要:Java流的分类按流向分:输入流: 程序可以从中读取数据的流。输出流: 程序能向其中写入数据的流。按数据传输单位分:字节流: 以字节为单位传输数据的流字符流: 以字符为单位传输数据的流按功能分:节点流: 用于直接操作目标设备的流过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。java.io常用类 JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。OutputStream:继承自OutputStream的流都是.
阅读全文
摘要:IO流里面经常用到的就是装饰器模式,也就是常说的封装。装饰器模式就是在原有的基础上增加功能。 *java.io.BufferedInputStream与java.io.BufferedOutputStream可以为InputStream,OutputStream类增加缓冲区功能。构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例。同样,构建BufferedOutputStream时,也需要给定一个OutputStream实例,实现BufferedOutpu...
阅读全文
摘要:转自:深入理解JAVA虚拟机 一.哪些内存需要回收以及什么时候回收 1.引用计数 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 但是,至少主流的Java虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。举个简单的例子,请看代码清单3-1中的testGC()方法:对象objA和objB都有字段instance,赋值令objA.instance = objB及objB.instance = objA,除此之外,这两个对象再无任何引用,实际上...
阅读全文
摘要:转自:http://www.ibm.com/developerworks/cn/java/j-lo-struct2/index.html工作流程的官方描述我们从看官方的流程图开始。当本篇文章结束的时候,我们会再一遍来看它。图 2. 官方工作流程图初始的请求通过一条标准的过滤器链,到达 servlet 容器 ( 比如 tomcat 容器,WebSphere 容器 )。过滤器链包括可选的 ActionContextCleanUp 过滤器,用于系统整合技术,如 SiteMesh 插件。接着调用 FilterDispatcher,FilterDispatcher 查找 ActionMapper,以确定
阅读全文
摘要:转自:http://www.holdjava.com/struts2/70724.htm Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框.
阅读全文
摘要:1.JSP简介 JSP是一种动态网页技术标准。它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 将内容的生成和显示进行分离。 用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求变化的,例如请求账户信息或者特定的一瓶酒的价格等)。生成内容的逻辑被封装在Servlet和JavaBeans组件(两个都是.java)中,并且捆绑在脚本中,所有的脚本在服务器端运行。由于核心逻辑被...
阅读全文
摘要:1.Bean生命周期 可以在依赖注入过程之后或销毁之前执行特性行为(反射)依赖注入过程: 1:Bean的建立:容器寻找Bean的定义信息并将其实例化。 2:属性注入:使用依赖注入,Spring按照Bean定义信息配置Bean所有属性 3:BeanNameAware的setBeanName():如果Bean类有实现org.springframework.beans.BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。 4:BeanFactoryAware的setBeanFactory():如果Bean类有实现org.springfr...
阅读全文
摘要:作者:许 令波, Java 开发工程师, 淘宝网转自:http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/index.htmlSpring 的骨骼架构Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图:图 1 .Spring 框架的总体架构图从上图中可以看出 Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。下面也将主要从这三个组件入手分析 S
阅读全文
摘要:转自:http://blog.csdn.net/xc635960736/article/details/7049863Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。下面先来剖析 Hibernate 延迟加载的“秘密”。集合属性的延迟加载当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时,完成所有集合属性的抓取,
阅读全文
摘要:1.整体架构 Criteria是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。 ANTLR—Another Tool for Language Recognition,是一个开源语法分析器,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recogniz...
阅读全文
摘要:ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。针对吞吐量进行优化 ConcurrentHashMap使用了几个技巧来获得高程度的并发以及避免锁定,包括为不同的 hash bucket(桶)使用多个写锁和使用JMM 的不确定性来最小化锁被保持的时间——或者根本避免获取锁。对于大多数一般用法来说它是经过优化的,这些用法往往会检索一个很可能在 map 中已经存在的值。事实上,多数成功的 get() 操作根本不需要任何锁定就能运行。(警告:不要自己试图这样做!想比 JMM 聪明不像看上去的那么容易。util.concurrent类是由并发专家...
阅读全文
摘要:接口框架: 集合框架中包含List,Queue,Set和Map这四大块,注意:Map虽然属于集合框架,但Map接口并不从Collection接口扩展。 一个Map提供了通过Key对Map中存储的Value进行访问,也就是说它操作的都是成对的对象元素,比如put()和get()方法,而这是一个Set或List所不就具备的(它们是add()和remove())。当然在需要时,你可以由keySet()方法或values()方法从一个Map中得到键的Set集或值的Collection集。 1.Collection Collection接口提供了一组操作成批对象的方法 它提供了基本操作...
阅读全文
摘要:转自:http://m.oschina.net/blog/149055之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。 废话不多说了,先来看一下JDK的动态是怎么用的。Java代码packagedynamic.proxy;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy;/***实现自己的In
阅读全文
摘要:在java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这个策略虽然稍微增加了一些性能开销,但会给java应用程序带来高度的灵活性,java的动态扩展特性就是依赖动态加载和动态连接来实现的。 1.加载 1.1过程: *类的加载就是把类的.class文件中的二进制数据读入到内存中。 *转换字节流的数据结构(静态-运行时),把它存放在java运行时数据区的方法区内 *在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。Class对象封装了类在方法区的数据结构。并且向java程序提供了访问类在方法区的数据结构的入口。 类加载采用了缓存机...
阅读全文