自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 十、Nio之Selector

Selector(选择器)是 Java NIO 中能够检测一到多个 NIO 通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个 channel,从而管理多个网络连接。为什么使用 Selector?仅用单个线程来处理多个 Channels 的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。 对于操作系统来说, 线程之

2016-11-28 14:09:42 421

原创 九、Nio之DatagramChannel

Java NIO 中的 DatagramChannel 是一个能收发 UDP 包的通道。 因为 UDP 是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:DatagramChannel channel = DatagramChannel.open();ch

2016-11-28 11:24:05 447

原创 八、Nio之ServerSocketChannel

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel 类在 java.nio.channels 包中。打开 ServerSocketChannel通过调用 ServerSocketChannel.open() 方法来打开 ServerSocketCha

2016-11-28 11:21:06 391

原创 七、Nio之SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。 可以通过以下2种方式创建SocketChannel:1. 打开一个 SocketChannel 并连接到互联网上的某台服务器。2. 一个新连接到达 ServerSocketChannel 时,会创建一个 SocketChannel。

2016-11-18 14:45:05 413

原创 六、Nio之FileChannel

Java NIO 中的 FileChannel 是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel 无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开 FileChannel: 在使用FileChannel之前, 必须先打开它。 但是, 我们无法直接打开一个FileChannel, 需要通过使用一个InputStream、 OutputStream 或 Rando

2016-11-18 14:22:43 321

原创 五、Nio之通道之间的数据传输

在 Java NIO 中,如果两个通道中有一个是 FileChannel,那你可以直接将数据从一个 channel(译者注:channel 中文常译作通道)传输到另外一个 channel。 transferFrom(): FileChannel 的 transferFrom()方法可以将数据从源通道传输到 FileChannel 中(译者注:这个方法在 JDK 文档中 的解释为将字节从给定

2016-11-17 15:37:02 522

原创 四、Nio之Scatter(分散)/Gather(聚集)

Java NIO 开始支持 scatter/gather, scatter/gather 用于描述从 Channel 中读取或者写入到 Channel 的操作。 分散(scatter)从 Channel 中读取是指在读操作时将读取的数据写入多个 buffer 中。因此,Channel 将从 Channel中读取的数据 分散   (scatter)到多个 Buffer 中。 聚集(gather

2016-11-16 16:27:34 466

原创 三、Nio之Buffer

Java NIO 中的 Buffer 用于和 NIO 通道进行交互。 如你所知, 数据是从通道读入缓冲区, 从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象,并提供了 一组方法,用来方便的访问该块内存。 一、Buffer的基本用法: 使用 Buffer 读写数据一般遵循以下四个步骤: 1. 写入数据到 Bu

2016-11-15 15:46:03 288

原创 二、Nio之Channel

1、Java NIO 的通道类似流,但又有些不同:   既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。   通道可以异步地读写。   通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。 2、Channel  的实现 这些是 Java NIO 中最重要的通道的实现:   FileChannel   DatagramCha

2016-11-09 14:40:14 5753

原创 一、Nio概述

Java NIO 由以下几个核心部分组成:  Channels  Buffers  Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的 API。 其它组件,如 Pipe 和 FileLock,只不过是与三个核心

2016-11-09 10:21:14 381

原创 Java中通过TCP协议发送和接收数据-Socket编程

TCP TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。 TCP通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。 Socket     Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据。根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一

2016-02-18 15:14:37 35301 5

原创 Java中通过UDP协议发送和接受数据

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。 一、UDP协议发送数据

2016-02-18 13:54:05 1127

原创 多线程——线程范围内变量的共享

线程范围内的共享变量是指对同一个变量,几个线程同时对它进行写和读操作,而同一个线程读到的数据就是它自己写进去的数据。 1、未实现变量共享的demo: 1 2 3 4 5 6

2016-02-01 16:02:39 547

原创 多线程——线程间的同步通信

1、概要 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。 线程间的协调通信主要通过wait方法和notify方法来完成。 因为wait和notify方法定义在Object类中,因此会被所有的类所继承。 这些方法都是final的,即它们都是不能被重写的,不能通过子类覆写去改变它们的行为。 2、wait() 方法       wait()方法使

2016-01-28 17:27:50 548

原创 多线程——线程同步互斥(synchronized)

java中,线程互斥是为了保证在同一时刻,只有一个线程在访问一段特定的代码或者一个特定的变量。   看一个多线程使用同一个对象操作引起的问题: 1 2 3 4 5 6

2016-01-28 14:39:57 549

原创 多线程——线程的生命周期

Java中,线程从创建到结束,共分为5个状态。一个线程在其生命周期内,总是处于某种状态: 创建状态 可运行状态 不可运行状态 死亡状态 一、创建状态 执行下列语句时,线程就处于创建状态:        Thread myThread = new MyThreadClass( ); 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统

2016-01-28 13:37:31 538

原创 多线程——线程的创建以及操作线程的相关方法简介

一、概念: 1、进程: 进程是程序的一次动态执行过程。用进程来对应一个程序,每个进程对应一定的内存地址空间,并且只能使用它自己的内存空间,各个进程间互不干扰。 2、线程: 线程是程序内部的控制流,比进程更小的执行单位,是进程内部的子任务。一个进程在执行过程中,为了同时完成多个操作,可以产生多个线程,形成多条执行线索。 3、进程与线程的区别:    (1)、每个进程有一段专有内存空间。进

2016-01-28 10:24:26 446

原创 TreeSet介绍

一、TreeSet原理: 1.TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 2.Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序) 3.如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口,或者实现一个比较器       在类上implement Comparable

2016-01-25 15:43:02 704

原创 ArrayList中元素去重问题

如题所示,如果一个ArrayList中包含多个重复元素,该如何去重呢? 思路一以及实现: 声明2个ArrayList,分别为listA与listB ,listA为待去重list ,listB 保存去重之后数据 。遍历listA ,然后判断listB中是否包含各个元素,若不包含,把吃元素加入到listB中。 代码实现: 辅助实体类:Student

2016-01-25 14:46:12 3543

原创 SpringMVC + Spring + Mybatis + Maven整合实例

一、说明: 目前工作中的开发框架主要是 spring ,使用的是 springMVC+ spring + spring JdbcTemplate ,最近了解了一下Mybatis、Maven这些内容,所以尝试使用 springMVC + Spring + Mybatis + Maven来搭建一个简单的demo ,功能很简单,主要是对于一个表的CRUD。 项目源码下载地址:github下载地址

2016-01-19 15:23:45 2311 3

原创 CXF整合Spring发布WebService实例

一、说明:上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用。这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服务,CXF版本为3.1.4 ,Spring版本为4.1.7 ,JDK版本 1.7 ,Tomcat 7二、实例实现过程:首先略过CXF、以及spring的下载过程。①    新建 J

2016-01-14 14:05:07 7967

原创 使用CXF发布WebService服务简单实例

一、说明:前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXFApache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源

2016-01-11 18:00:47 4065

原创 Struts2文件下载

1). Struts2 中使用 type="stream" 的 result 进行下载2). 可以为 stream 的 result 设定如下参数contentType: 结果类型contentLength: 下载的文件的长度contentDisposition: 设定 Content-Dispositoin 响应头. 该响应头指定接应是一个文件下载类型, 一般取值为  a

2016-01-07 21:09:12 557

原创 Axis2在Web项目中整合Spring

一、说明:上一篇说了Axis2与Web项目的整合(详情 :Axis2与Web项目整合)过程,如果说在Web项目中使用了Spring框架,那么又改如何进行Axis2相关的配置操作呢?二、Axis2 与 Spring 整合①   新建项目 AxisSpringDemo,并在其中加入 Axis2 与 Spring 相关的 jar 包Spring所需 Jar :aopalliance-

2016-01-07 11:12:13 9556 6

原创 Struts2防止表单重复提交

一 、什么是表单的重复提交    > 在不刷新表单页面的前提下:         >> 多次点击提交按钮        >> 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".        >> 在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)"            > 注意:        >> 若刷新表单页面, 再提交

2016-01-06 22:12:44 606

原创 Axis2与Web项目整合

一、说明:       上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢?       本篇即介绍在Web项目中使用Axis2来发布WebService.二、具体操作:①   新建一个动态的web工程 (Dynamic Web

2016-01-06 10:24:14 10074 2

原创 使用Axis2实现WebService的发布和调用

一、Axis2简介:Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java调用这个WebService。二、A

2016-01-04 17:24:45 18318 3

原创 Linux管线命令

一、什么是管线命令bash 命令运行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来配置? 这就牵涉到管线命令的问题了 (pipe) ,管线命令使用的是『 | 』这个界定符号!例:[root@www ~]# ls -al /etc | less如此一来,使用 ls 命令输出后的内容,就能够被 less 读取,并且利用 l

2015-12-25 13:16:50 582

原创 Linux数据流重定向

一、什么是数据流重导向:数据流重导向 (redirect) 由字面上的意思来看,好像就是将『数据传导到其他地方去』,没错~数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给他传输到其他的地方,例如文件或者是设备(打印机等.)我们运行一个命令的时候,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。 在上图当中, standard output

2015-12-24 15:46:23 441

原创 Shell中的变量

一、什么是变量变量在 bash 环境中是非常重要的,简单的说,就是让某一个特定字符串来代表不固定的内容。举例:那就是:『 y = ax + b 』这东西,在等号左边的(y)就是变量,在等号右边的(ax+b)就是变量内容。 要注意的是,左边是未知数,右边是已知数二、变量的读取与使用规则:①  使用echo命令读取变量语法规则:[root@www ~]# echo $var

2015-12-22 17:38:19 513

原创 Linux下文件的压缩与打包

一、Linux下常见的文件压缩命令:在Linux的环境中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』,为什么会有这样的扩展名呢?这是因为 Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法互通压缩/解压缩文件罗。 所以,当你下载到某个压缩档时,自然就需要知道该文件是由哪种压缩命令

2015-12-21 14:55:37 514

原创 Linux下文件的权限

一、Linux下查看文件属性命令为:[root@localhost ~]# ls -al结果:ls是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件)。total 224dr-xr-x---. 27 root root 4096 Dec 16 20:31 .dr

2015-12-17 15:26:17 1672

原创 Struts2 文件上传

一:表单准备① 要想使用HTML 表单上传一个或多个文件    –须把 HTML表单的 enctype属性设置为multipart/form-data    –须把HTML 表单的method 属性设置为post    –需添加type=“file”>字段.二:Struts2 文件上传原理以及步骤:①  在Struts应用程序里,Fi

2015-12-15 22:45:11 347

原创 Struts2的输入验证

一、概述:① Struts2的输入验证–基于 XWorkValidation Framework的声明式验证:Struts2提供了一些基于 XWork Validation Framework的内建验证程序.使用这些验证程序不需要编程, 只要在一个 XML 文件里对验证程序应该如何工作作出声明就可以了.需要声明的内容包括:   •哪些字段需要进行验证

2015-12-14 22:19:12 660

原创 存储过程语法

一、存储过程的变量①变量的声明:DECLARE var_name[,...] type [DEFAULT value]    这个语句被用来声明局部变量。要给变量提供一个默认值,需要包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。   局部变量的作用范围在它被声明的BEGIN ... END块内。它可以被用在嵌套

2015-12-10 15:01:41 431

原创 MySQL存储过程

一、存储过程概述: 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程的优缺点:优点:①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。②减少网络流量。存

2015-12-09 14:28:47 421

原创 Struts2运行流程分析

一.Struts2运行流程图:二.运行流程分析:1. 请求发送给StrutsPrepareAndExecuteFilter2.StrutsPrepareAndExecuteFilter询问ActionMapper:该请求是否是一个Struts2请求(即是否返回一个非空的ActionMapping对象)3. 若ActionMapper认为该请求是一个Struts2请求,则St

2015-12-08 22:39:04 456

原创 Struts2的国际化

1.概述把在无需改写源代码即可让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化.与国际化对应的是本地化, 指让一个具备国际化支持的应用程序支持某个特定的地区Struts2国际化是建立在Java国际化基础上的:–为不同国家/语言提供对应的消息资源文件–Struts2框架会根据请求中包含的Locale 加载对应的资源文件–通过程序代码取得该资源文件

2015-12-08 21:33:21 458

原创 Struts2类型转换器

概述A 、从一个HTML 表单到一个 Action 对象,类型转换是从字符串到非字符串.   –HTTP没有“类型” 的概念.每一项表单输入只可能是一个字符串或一个字符串数组.在服务器端, 必须把String 转换为特定的数据类型B、在struts2中,把请求参数映射到 action 属性的工作由Parameters拦截器负责,它是默认的 d

2015-11-28 13:50:10 720

原创 Struts2的运行流程以及关键拦截器介绍

Struts2的运行流程1、ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法,上图中的StrutsActionProxy类实现类ActionProxy代理类。2、ActionInvoc

2015-11-25 23:35:24 424

Spring整合Hibernate示例

Spring整合Hibernate配置测试示例

2015-11-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除