SpringMVC Controller介绍

  categories:资料  author:

来源:http://haohaoxuexi.iteye.com/blog/1753271

一、简介

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。为了先对Controller 有一个初步的印象,以下先定义一个简单的Controller :

@Controller
public class MyController {
@RequestMapping ( “/showView” )
public ModelAndView showView() {
ModelAndView modelAndView … 阅读全文

OpenLDAP使用及使用Java完成LDAP身份认证

  categories:资料  author:

来源:http://www.cnblogs.com/lanxuezaipiao/p/3664676.html

导读

LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。

LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。常见的例子是通讯簿,由以字母顺序排列的名字、地址和电话号码组成。

目录服务与关系数据库之间的主要区别在于:二者都允许对存储数据进行访问,只是目录主要用于读取,其查询的效率很高,而关系数据库则是为读写而设计的。也就是目录服务不适于进行频繁的更新,属于典型的分布式结构。

总结:对于查询操作多于更新操作的(认证)系统来说,使用OpenLDAP是一个比关系数据库如MySq、PostgreSQL等更好的选择。

LDAP的功能

在LDAP的功能模型中定义了一系列利用LDAP协议的操作,主要包含以下4部分:

查询操作:允许查询目录和取得数据,其查询性能比关系数据库好。

更新操作:目录的更新操作没关系数据库方便,更新性能较差,但也同样允许进行添加、删除、修改等操作。

复制操作:前面也提到过,LDAP是一种典型的分布式结构,提供复制操作,可将主服务器的数据的更新复制到设置的从服务器中。

认证和管理操作:允许客户端在目录中识别自己,并且能够控制一个会话的性质。

而本文所要将的OpenLDAP就是一个优秀的开源的LDAP实现。

OpenLDAP安装配置及疑惑解答

1. 安装和配置OpenLDAP

安装软件非常简单,但在配置过程中遇到了不少坎坷,不是服务启动不成功就是验证不成功。

具体的安装和配置方法网上一大把,但都参差不齐,主要是因为新旧版本的OpenLDAP不同,配置方法有很大的改动。

下面给出网上几个还算靠谱的Linux和Windows两个平台下安装该软件的方法:

1)ubuntu安装LDAP:安装方法靠谱,但配置说的不太清楚,配置注意事项看后面。

2)Ubuntu OpenLDAP Server:官方教程,最值得借鉴,是英文的,这里有中文版的,但没英文的清晰,说的比较简单。

3)Linux下安装openldap:二进制包安装方法,适用于非Ubuntu的Linux系统,稍微有点麻烦,在安装OpenlDAP之前还需要安装Berkeley DB,但配置灵活,可以自定义安装路径什么的。后面的配置也没说清楚,主要看安装方法。

4)Linux服务器部署系列之七—OpenLDAP篇:另一篇较详细的二进制安装方法及配置。

4)Windows下OpenLDAP的安装及使用:阅读全文

java command line structures

  categories:java资料  author:

https://github.com/airlift/airline

Airline is a Java annotation-based framework for parsing Git like command line structures.

Latest release is 0.7, available from Maven Central.

<dependency>
<groupId>io.airlift</groupId>
<artifactId>airline</artifactId>
<version>0.7</version>
</dependency>

Here is a quick example:
public class Git
{
public static void main(String[] … 阅读全文

使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

  categories:nginx资料  tags:  author:

Nginx的Memc和SR Cache模块

缓存策略的改进

为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统。众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的成熟,越来越多的系统开始转型为LNMP(Linux+Nginx+MySQL+PHP with fpm),这是因为Nginx采用基于事件机制的I/O多路复用思想设计,在高并发情况下其性能远远优于默认采用prefork模式的Apache,另外,相对于Apache,Nginx更轻量,同时拥有大量优秀的扩展模块,使得在Nginx上可以实现一些美妙的功能。

传统上,PHP中使用memcache的方法是使用php-memcache或php-memached扩展操作Memcache,然而在Nginx上有构建更高效缓存机制的方法,本文将首先介绍这种机制,然后介绍具体的操作步骤方法,最后将对这种机制和传统的PHP操作memcache的性能进行一个benchmark。

我们知道,Nginx的核心设计思想是事件驱动的非阻塞I/O。

Nginx被设计为可以配置I/O多路复用策略,在Unix系统中传统的多路复用是采用select或poll,但是这两个方法的问题是随着监听 socket的增加,性能会下降,因为在linux内核中是采用轮询的方式判断是否可以触发事件,换句话说算法的复杂度为O(N),而在较新的linux 内核中引入了复杂度为O(1)的epoll,因此Nginx在Linux下默认采用epoll,而在FreeBSD下默认采用kqueue作为I/O策 略。

即便是这样,传统的缓存策略仍可能造成效率低下,因为传统上是通过PHP操作memcache的,要执行PHP代码,Nginx就必然要和FastCGI 通信,同时也要进入PHP的生命周期,因此SAPI、PHP Core和Zend Engine的一系列逻辑会被执行。更糟糕的是,fpm和PHP可能会阻塞,因此破坏了Nginx的非阻塞性。(原文中此处表述有误,fastcgi与 nginx进行同步通信,但并不会破坏nginx i/o的非阻塞性,多谢agentzh给予指正)下图展示了在memcache命中时整个处理过程。

可以看到,即使Memcache命中,还是要进入PHP的生命周期。我们知道,目前很多互联网应用都使用RESTful规范进行设计,在RESTful应 用下,普遍使用uri和查询参数作为缓存的key,因此一种更高效的缓存策略是Nginx直接访问Memcache,并用$uri和$args等 Nginx内置变量设定缓存key规则,这样,当缓存命中时,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数 据并返回。memc-nginx和srcache-nginx正是利用这种策略提高了缓存的效率。下图是这种高效缓存策略的示意图(当memcache命 中时)。

模块介绍

memc-nginxsrcache-nginx模 块均为前淘宝工程师agentzh(章亦春)开发。其中memc模块扩展了Nginx标准的memcache模块,增加了set、add、delete等 memcache命令,而srcache则是为location增加了透明的基于subrequest的缓存层。两者配合使用,可以实现上一节提到的高效 缓存机制。关于两个模块的详细信息可以参考它们Nginx官网的wiki(memc wikisrcache wiki)页。

安装及配置

下面以LNMP环境介绍如何使用这两个模块构建缓存层。

因为Nginx并不支持模块动态加载,所以要安装新的模块,必须重新编译Nginx。首先下载两个模块(memc下载地址,srcache下载地址),另外,为了发挥出缓存的最大性能,建议将memcache的upstream配置为keep-alive,为了支持upstream的keep-alive需要同时安装http-upstream-keepalive-module。… 阅读全文

主流并发工具之ForkJoinPool

  categories:java资料  author:

来源:http://wankunde.iteye.com/blog/1521042

ForkJoinPool 是 Java SE 7 新功能“分叉/结合框架”的核心类,现在可能乏人问津,但我觉得它迟早会成为主流。分叉/结合框架是一个比较特殊的线程池框架,专用于需要将一个任务不断分解成子任务(分叉),再不断进行汇总得到最终结果(结合)的计算过程。比起传统的线程池类ThreadPoolExecutorForkJoinPool 实现了工作窃取算法,使得空闲线程能够主动分担从别的线程分解出来的子任务,从而让所有的线程都尽可能处于饱满的工作状态,提高执行效率。

ForkJoinPool 提供了三类方法来调度子任务:

execute 系列异步执行指定的任务。invoke 和 invokeAll执行指定的任务,等待完成,返回结果。submit 系列异步执行指定的任务并立即返回一个 Future 对象。子任务由 ForkJoinTask 的实例来代表。它是一个抽象类,JDK 为我们提供了两个实现:RecursiveTask 和 RecursiveAction,分别用于需要和不需要返回计算结果的子任务。ForkJoinTask 提供了三个静态的 invokeAll 方法来调度子任务,注意只能在 ForkJoinPool 执行计算的过程中调用它们。ForkJoinPool 和 ForkJoinTask 还提供了很多让人眼花缭乱的公共方法,其实它们大多数都是其内部实现去调用的,对于应用开发人员来说意义不大。… 阅读全文

Scala简单构建工具SBT

  categories:资料  author:

来源:http://www.importnew.com/4311.html

基本安装

参考:http://my.oschina.net/u/915967/blog/146746

首先到http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html下载windows的sbt包,zip,tar.gz都行。

将下载的包解压到你指定的目录,我一般是解压到d:\dev\sbt目录,d:\dev下是日常工作中所用到的开发工具软件,比如eclipse、jdk、maven等等。

Windows的sbt包解压后,已经自带了sbt.bat脚本,真是方便不少哦!看sbt.bat中设置(set FN=%SBT_HOME%sbtconfig.txt)相关是从一个配置文件中读取的,因此在sbt\bin目录下创建sbtconfig.txt文件,所以的配置写在这个文件里,不直接改sbt.bat,对以后升级备份都很方便。

我的配置文件如下:
?

-Dfile.encoding=UTF8 -Dsbt.boot.directory=e:/sbt/boot/ -Dsbt.ivy.home=e:/sbt/ -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m

其中关键的几个参数是,这2个参数曾让很多人痛苦过….
?

-Dsbt.boot.directory=e:/sbt/boot/
?

-Dsbt.ivy.home=e:/sbt/

因为sbt下载的jar包都会默认放到用户目录下,但这些放在c盘用户目录下不是好注意,比如你重装系统之类的,那么下次你又要等啊等啊下载很久的jar,是不是很痛苦?如果放到c盘之外就避免了重复下载之苦。

设置好后,你需要把sbt\bin这个加上PATH环境变量中,使其在任何地方的cmd中都可以使用。现在就可以打开cmd窗口,使用sbt了。
?

sbt

这样就会开始下载相关的jar包,同时观察你设置的sbt.boot.directory及sbt.ivy.home下是否有变化?如没有请检查是否设置成功!

如果这样感觉下载很慢,而且又有比较快的仓库,比如私服,你可以在用户目录下创建.sbt目录,放一个repositories文件,内容为:
?

[repositories]
local
aliyun nexus:http://xxxx/nexus/content/groups/public/
typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
maven-central
sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots
第一个是本地仓库,第二个设置成你的私服,后面2个是sbt中的设置,详细的你可以解压sbt.jar包查看。

接下来只有等待,等待……. … 阅读全文



快乐成长 每天进步一点点