w1100n
This site is best viewed in Google Chrome
5/17/2013 11:18 | Tag:

http://www.cnblogs.com/yan5lang/archive/2011/05/24/2055867.html Eclipse的启动由$ECLIPSE_HOME/eclipse.ini控制,如果$ECLIPSE_HOME 没有被定义,则Eclipse安装目录下的默认eclipse.ini会生效。 eclipse.ini是一个文本文件,其内容相当于在Eclipse运行时添加到 Eclipse.exe之后的命令行参数。 其格式要求: 1:所有的选项及其相关的参数必须在单独的一行之内 2:所有在-vmargs之后的参数将会被传输给JVM,所有如果所有对Eclipse 设置的参数必须写在-vmargs之前(就如同你在命令行上使用这些参数一样) 默认情况下,eclipse.ini的内容如下: -showsplash org.eclipse.platform –launcher.XXMaxPermSize 256m -vmargs -Xms40m -Xmx256m 上面的配置表示堆空间初始大小为40M,最大为256M,PermGen最大为256M。 指定虚拟机 建议你使用eclipse.ini来指定一个确定的JVM,而不是使用默认的情况,因为很多情况下你无法确认你的Eclipse到底使用的你机器上安装的哪个JVM,使用eclipse.ini来指定使得你能指定并确认之。 下面的例子将展示如何正确的使用 -vm选项 注意-vm选项的格式有严格的要求: 1:-vm选项和它的值(路径)必须在单独的一行 2:其值必须严格地指向Java可执行文件,而不仅仅只是Java home目录。 3:-vm选项必须在-vmargs选项之前,之前已经说过,所有在-vmargs之后的选项将会直接被传递给JVM Windows Example -showsplash org.eclipse.platform –launcher.XXMaxPermSize 256m -vm C:\Java\JDK\1.5\bin\javaw.exe -vmargs -Xms40m -Xmx512m Linux Example … Continue reading

4/4/2013 19:06

http://www.cnblogs.com/LeneJay/archive/2011/11/14/2248218.html JavaWeb 默认的语法,除HTML 外,共有: 1、<% 可以使用Java语言 %> 2、<%!  可以使用Java 语言定义变量或函数,是public 类型的 %> 3、<%= 变量 %> 可以取值 4、<%@  指令元素  %> 5、<jsp:include、forward  …… ></jsp:include、forward> 默认标签语言   以上五种是Javaweb 默认语法,除第五种是标签语言外,其余上四种都是JavaWeb 默认的语法格式。   此后,JSP2.0之后,引入了 EL 表达语言和 扩展了 标签语言 称为:JSTL 。   EL 表达式语言,其实可以说是一套独立的编程语言,有自己的语法格式,算式运算符,关系运算符,逻辑运算符,条件运算符等等完整的体系,加上还有一些内置的对象,虽然这些内置的对象都需要Java 支持,但也不失为一套完善的编程语言了。   … Continue reading

3/1/2013 21:42

Stripes 是一个使用最新的 Java 技术来构建 Web 应用的展现框架。 零配置,使用注解配置,自动发现 ActionBean 强大的对象绑定引擎 易用的数据验证和类型转换系统 本地化支持 可重用 ActionBean 做为视图 易用的属性下标索引支持 内建对表单的多事件支持 透明的文件上传功能 支持增量开发 内建大量灵活的方法,[1]

2/24/2013 13:14

CAPTCHA 全称 Completely Automated Public Turing Test to Tell Computers and Humans Apart,最早作为卡内基梅隆大学的一个科研项目,用于生成一个人类容易通过而计算机难以通过的测试,目前广泛应用于网络应用,用于阻止机器人发布垃圾信息。JCaptcha 即为 Java 版本的 CAPTCHA 项目,其是一个开源项目,支持生成图形和声音版的验证码,在生成声音版的验证码时,需要使用到 FreeTTS。

2/2/2013 22:04 | Tag:,

spring mvc 返回json格式数据的方式 http://blog.csdn.net/skmbw/article/details/12263253

1/29/2013 17:59 | Tag:

Java有三种方法可以创建对象实例。 1.new 通常都是使用java的关键字new来创建对象实例。 若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。 通过new创建对象实例必须把类名写在原代码里面。 2.clone 若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数). 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。 但是为什么不直接使用somethingNew.clone()呢? JDK中Object# clone()方法的原型是: protected native Object clone() throws CloneNotSupportedException; 方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。 所以,必需重写Object的clone方法后才能使用。 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。 另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。 像这样字段对字段的拷贝(field to field copy)就成为”浅拷贝”,clone方法所做的正是”浅拷贝”. 3.newInstance 利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。 创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。 或者使用下面的语句(只需要存在相应的.class文件即可) 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。 注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会 抛出java.lang.InstantiationException异常。无法进行实例化。

1/29/2013 12:50

 http://hi.baidu.com/xiaoyoue/item/7b905356a33d51948d12ed53 我最初学java用的教材就是《java编程思想》,觉得这本书很多知识讲的很细、很透彻,但对一些知识点不理解,有些是没有读懂,有些是觉得这些知识点 与主要内容不相关。当时项目紧,对这些不理解的知识就过去了,反正已经可以编程了。做了2年的java开发之后,重读这本书的,才发现这些不相关知识的内 在联系,如果当时理会了作者的意图,工作中将会少走很多的弯路。 我重读第12章时,想起自己解决一个问题走了很多的弯路,而在这章都做了详细的讨论与说明,把这个问题拿出来,按我走过的弯路,每一步都讨论一下,希望初学者少走些弯路。 问题一:在写程序的时候,希望某个方法有两个返回值,如何处理? 讨 论一:用过C语言的人都知道,其中一个可以通过返回值返回,另一个可以通过一个指针参数返回(将一个指针变量传入函数,改变指针指向的内容,达到目的)。 Java没有指针,如何达到这个目的?12章的一段话说的很明白:“事实上,Java中每个对象(除基本数剧类型以外)的标识符都属于指针的一种。但它们 的使用受到了严格的限制和规范…”。是否可以利用这点返回多个值?回答是肯定的,java.io.InputStream 类的read方法就是这么用的,参见public int read(byte[] b)。 收获一:java方法的参数传递方法有两 种:1、按值传递:java的基本数据类型,都是采用的这种方式;2、按引用传递,其它类型的对象,都是传递引用(句柄)。传递引用的方式有一个问题,即 两个引用指向同一个对象,在函数中修改了一个对象,同时也修改了函数外的那个对象,即容易引起别名的副作用。 结论一:在一些情况下,可以利用别名的副作用,达到返回多个返回值的目的。如java.io.InputStream类的read方法。 问题二:根据结论一,对于自定义的一些类,一般可以作为输出参数,达到返回值的目的,但对于基本数据类型,如何解决呢? 讨 论二:既然每一个数据基本类型都对应一个包装类,是否可以使用相应的包装类,来达到目的呢?实践发现,这些包装类的对象是没有办法修改的,都是只读类。这 些类的对象,一旦创建,便不能修改,不能使用包装类达到目的。这种情况下,发现用数组可以达到目的,可以创建一个基本类型数据的数组,作为参数传递到方法 中,在方法中改变数组内容,达到目的。 收获二:发现有些类是只读类,这些类的对象一旦创建,就不能修改;基本数据类型的包装类都是只读 类。这些类实际上使用了《java与 模式》一书中提到的不变模式。不变模式的优点:1、不变的对象比可变对象更加容易维护;2、线程安全。缺点:一旦需要修改一个不变的对象,就必须创建一个 新的对象。一些关于String和StringBuffer的区别的讨论,无非就是String采用的是不变模式,而StringBuffer没有采用不 变模式,本质上就是不变模式的讨论而已。 结论二:对于基本数剧类型作为方法的输出参数的变通手段:采用基本数据类型的数组可以达到目的,对于基本数据类型的包装类,则达不到目的。(为了将一个基本数据类型作为输出参数就创建一个数组,只是达到目的的一种方式,不值得推荐使用。) 问题三:应用结论二,在RMI调用时,输出参数在方法调用时改变了,而在调用处却没有改变。为什么? 讨 论三:我在写一个rmi服务接口时,采用以下的方法接口:byte[]  getFaxByte(Fax fax, int[] page),其中 page作为输出参数,希望在调用时,函数改变page[0]的值,在函数调用过后,通过对page的引用得到修改后的值。在实践中我发现,rmi的服务 和调用在同一台机器上,可以得到正确结果,而rmi服务和调用不在同一台机器上,结果便不正确。 经过单步跟踪,发现了问题根源,原来是自己对rmi的原理不熟,没有理解rmi的基础。 收 … Continue reading

1/24/2013 22:18

http://fengfan876.iteye.com/blog/1473863 最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有但是不全,很多情况下很难找到你想要的答案。 为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助。 (一)单个参数 public List<XXBean> getXXBeanList(String xxCode); <select id=”getXXXBeanList” parameterType=”java.lang.String” resultType=”XXBean”> select 字段… from XXX where code = #{xxCode} </select> 其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字, select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。 (二)多参数 public List<XXXBean> getXXXBeanList(String xxId, String xxCode); <select id=”getXXXBeanList” resultType=”XXBean”> select 字段… … Continue reading

1/24/2013 15:07

http://magicgod.iteye.com/blog/173225 displaytag还算是比较好的,可以分页(可以配合hibernate分页,显示行数有个小bug,不过已经提交bug了,据说下个版本改),可以任意调整显示内容,可以输出很多种格式。 不过缺省情况下输出的文件名不对,后缀名不按类型来,幸好可以配置displaytag.properties 一般来说是放在WEB-INF/classes/下的。 配一下导出文件名 Java代码   export.pdf.filename=export.pdf export.csv.filename=export.csv export.excel.filename=export.xsl export.xml.filename=export.xml 但可惜的是不能用动态文件名,看了一下源码是这样写的: Java代码   public String getExportFileName(MediaTypeEnum exportType) {     return getProperty(PROPERTY_EXPORT_PREFIX + SEP + exportType.getName() + SEP + EXPORTPROPERTY_STRING_FILENAME); } 没戏了,根据导出类型从属性里取一个静态的文件名。 是这样应用的: Java代码   String filename = properties.getExportFileName(this.currentMediaType); if (StringUtils.isNotEmpty(filename)) {     response.setHeader(“Content-Disposition”, //$NON-NLS-1$         “attachment; filename=”” + filename + “””); //$NON-NLS-1$ //$NON-NLS-2$ } 彻底没指望了,直接拿出来就放在header里了。算了,凑和吧。

1/24/2013 14:22 | Tag:

http://springsfeng.iteye.com/blog/1634234 参考:http://luoyu-ds.iteye.com/blog/1517607   如果要动态传入表名,字段名之类的参数替换SQL语句中的占位副,需要将SQL语句执行改成非预编译的,即: Xml代码   <update id=”editIssuedData” parameterType=”map”<span style=”color: #ff0000;”> statementType=”STATEMENT”</span> >     <![DATA[         updata user_info_t set <span style=”color: #ff0000;”>${field} = ${value}</span>  where id=<span style=”color: #ff0000;”> ${id}</span>     ]]> </update> 同时参数Map中需做下面处理: Java代码   Map<String, Object> map = new HashMap<String, Object>();         map.put(“field”, Constant.ISSUED_PLAN_COLUMN_NAME.get(field));        <span style=”color: #ff0000;”> map.put(“value”, “‘”+value+”‘”);  </span>         map.put(“id”, id);  

1/23/2013 20:50 | Tag:

http://samuel5-1.iteye.com/blog/727772 应用springMVC时如果配置URL映射时如下配置 会导致页面引用的JS CSS发生找不到的错误 此时应在web.xml中添加

1/20/2013 21:07

Servlet和Filter的url匹配以及url-pattern详解<o:p></o:p>   Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。<o:p></o:p> 一,servlet容器对url的匹配过程:<o:p></o:p> <o:p></o:p> 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:<o:p></o:p> 1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。<o:p></o:p> 2. 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。<o:p></o:p> 3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action<o:p></o:p> 4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。<o:p></o:p> 根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。<o:p></o:p> 对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。<o:p></o:p> 二,url-pattern详解<o:p></o:p> 在web.xml文件中,以下语法用于定义映射: l 以”/’开头和以”/*”结尾的是用来做路径映射的。 l 以前缀”*.”开头的是用来做扩展映射的。 l “/” 是用来定义default servlet映射的。 l 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action 所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

1/20/2013 17:25

http://www.ruanyifeng.com/blog/2012/07/git.html 如果你严肃对待编程,就必定会使用”版本管理系统“(Version Control System)。 眼下最流行的”版本管理系统”,非Git莫属。 相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便。有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称”快照”)的指针,因此非常快捷易用。 但是,太方便了也会产生副作用。如果你不加注意,很可能会留下一个枝节蔓生、四处开放的版本库,到处都是分支,完全看不出主干发展的脉络。 Vincent Driessen提出了一个分支管理的策略,我觉得非常值得借鉴。它可以使得版本库的演进保持简洁,主干清晰,各个分支各司其职、井井有条。理论上,这些策略对所有的版本管理系统都适用,Git只是用来举例而已。如果你不熟悉Git,跳过举例部分就可以了。 一、主分支Master 首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。 二、开发分支Develop 主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。 这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对Develop分支进行”合并”(merge)。 Git创建Develop分支的命令:   git checkout -b develop master 将Develop分支发布到Master分支的命令:   # 切换到Master分支 git checkout master # 对Develop分支进行合并 git merge –no-ff develop 这里稍微解释一下,上一条命令的–no-ff参数是什么意思。默认情况下,Git执行”快进式合并”(fast-farward merge),会直接将Master分支指向Develop分支。使用–no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。关于合并的更多解释,请参考Benjamin Sandofsky的《Understanding the Git Workflow》。 三、临时性分支 … Continue reading

1/20/2013 11:01

http://kdboy.iteye.com/blog/1155450 授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限。 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等。 一、授权的三要素 授权有着三个核心元素:权限、角色和用户。 权限 权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表达出用户对该资源拥有的权限。 大多数的资源会支持典型的CRUD操作(create,read,update,delete),但是任何操作建立在特定的资源上才是有意义的。因此,权限声明的根本思想就是建立在资源以及操作上。 而我们通过权限声明仅仅能了解这个权限可以在应用程序中做些什么,而不能确定谁拥有此权限。 于是,我们就需要在应用程序中对用户和权限建立关联。 通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。 权限声明及粒度 Shiro权限声明通常是使用以冒号分隔的表达式。就像前文所讲,一个权限表达式可以清晰的指定资源类型,允许的操作,可访问的数据。同时,Shiro权限表达式支持简单的通配符,可以更加灵活的进行权限设置。 下面以实例来说明权限表达式。 可查询用户数据 User:view 可查询或编辑用户数据 User:view,edit 可对用户数据进行所有操作 User:* 或 user 可编辑id为123的用户数据 User:edit:123 角色 Shiro支持两种角色模式: 1、传统角色:一个角色代表着一系列的操作,当需要对某一操作进行授权验证时,只需判断是否是该角色即可。这种角色权限相对简单、模糊,不利于扩展。 2、权限角色:一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有该权限。这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。 下面将详细描述对两种角色模式的授权实现。 二、授权实现 Shiro支持三种方式实现授权过程: 编码实现 注解实现 JSP Taglig实现 1、基于编码的授权实现 1.1基于传统角色授权实现 当需要验证用户是否拥有某个角色时,可以调用Subject 实例的hasRole*方法验证。 … Continue reading

1/16/2013 18:23 | Tag:,

你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗?   1 OutputStreamWriter out = … 2 java.sql.Connection conn = … 3 try { // ⑸ 4  Statement stat = conn.createStatement(); 5  ResultSet rs = stat.executeQuery( 6   ”select uid, name from user”); 7  while (rs.next()) 8  { 9   out.println(“ID:” … Continue reading

1/16/2013 12:44 | Tag:

http://rongjih.blog.163.com/blog/static/335744612011426103345778/ 将应用部署到Tomcat根目录的目的是可以通过“http://[ip]:[port]”直接访问应用,而不是使用“http://[ip]:[port]/[appName]”上下文路径进行访问。 方法一:(最简单直接的方法)     删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。 方法二:     删除原 webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置: <Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”> …… <Context path=”” docBase=”C:/apache-tomcat-6.0.32/myapps/bc.war”></Context> </Host> 注意:     1)path 的值设置为空;     2)应用不要放到tomcat的webapps目录下(如上述配置是放到自定义的文件夹myapps内的),否则访问时路径很有问题;     3)docBase指定到绝对路径。     如此设置后重启tomcat,如果docBase指向的是war文件,会自动将war解压到 … Continue reading

next page
辽ICP备14012896