Aug 18
maven依赖中Scope的作用

Dependency Scope

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:

    * compile,缺省值,适用于所有阶段,会随着项目一起发布。
    * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
Aug 18
在上一个项目中遇到一些jar包冲突的问题,之后还有很多人分不清楚dependencies与dependencyManagement的区别,故在此将这些区别总结下来。

1、DepencyManagement应用场景
         当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
         由于我们的模块很多,所以我们又抽象了一层,抽出一个juxin-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
        在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

来看看我们项目中的应用:
                                                                                      
依赖关系:                                                                    
juxin-base-parent(pom.xml)

Jul 18

ETAG的工作原理 不指定

Heck , 15:28 , Web开发 , 评论(0) , 引用(0) , 阅读(470) , Via 本站原创

转来的一篇博文,此文详细说明了ETAG的作用。我发现网上很多人都在询问ETAG的对于优化网站的作用,有些人直接建议关闭ETAG。这篇博文可以完整的说明ETAG的作用,是否关闭,或者如何配置,要根据自己网站的情况而定。

开始ETAG测试

首先在浏览器输入以下访问地址
比如我们访问某网站:http://xxxxxxxx/
第一次的http请求代码如下(只包含头部信息)
———————————————————-
CODE:
GET / HTTP/1.1
Host: xxxxxxxx
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

———————————————————-

Jul 18
1. Ctrl + Space
完成类、方法、变量名称的自动输入
2. Ctrl + N(Ctrl + Shift + N)
跳转到指定的Java文件(其它文件)
3. Ctrl + B
跳转到定义处
4. Ctrl + Alt + T
用if、while、try catch来围绕选中的代码行
5. Ctrl + Alt + B
跳转到方法实现处
6. Ctrl + W
按一个word来进行选择操作,在IDEA里的这个快捷键功能是先选择光标所在字符处的单词,然后是选择源
代码的扩展区域。
7. Shift + F1
在浏览器中显示指定的Java docs
8. Ctrl + Q
在editor window中显示java docs这个功能很方便--因为有时仅仅是忘记了自己编写的方法中的某个参数的含义,此时又不想再起一个浏览器来查看java doc,此时这个功能的好处就体现出来了
9. Ctrl + /
注释/反注释指定的语句,你也可以用Ctrl + Shift + / 来进行多行语句的注释(即使用多行注释符号"/* ... */")
10. F2/Shift + F2
跳转到下/上一个错误语句处
11. Shift + F6
提供对方法、变量的重命名
Jul 17
        StringBuffer sb = new StringBuffer();
        sb.append("                   _ooOoo_\n");
        sb.append("                  o8888888o\n");
        sb.append("                  88\" . \"88\n");
        sb.append("                  (| -_- |)\n");
        sb.append("                  O\\  =  /O\n");
        sb.append("               ____/`---'\\____\n");
        sb.append("             .'  \\\\|     |//  `.\n");
        sb.append("            /  \\\\|||  :  |||//  \\ \n");
        sb.append("           /  _||||| -:- |||||-  \\ \n");
        sb.append("           |   | \\\\\\  -  /// |   |\n");
        sb.append("           | \\_|  ''\\---/''  |   |\n");
        sb.append("           \\  .-\\__  `-`  ___/-. /\n");
        sb.append("         ___`. .'  /--.--\\  `. . __\n");
        sb.append("      .\"\" '<  `.___\\_<|>_/___.'  >'\"\".\n");
        sb.append("     | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |\n");
        sb.append("     \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /\n");
        sb.append("======`-.____`-.___\\_____/___.-`____.-'======\n");
        sb.append("                   `=---='\n");
        sb.append("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
        sb.append("\t\t佛祖保佑       永不宕机       永无BUG\n");
        System.err.println(sb.toString());
Jun 22
之前做了一个配置邮件和配置短信的模版,模版中需要替换很多参数,比方说“用户名”,“日期”等等。不过目前没有想到更好的替换参数的方法,所以目前只能使用一个比较简单的方式来实现。这个方式太死板,参数对应必须要在代码中写死,若是在模版中多加一个参数,那么就要修改Java类中的代码,非常不好。临时凑合一下,以后想到更好的方式,在来实现。以下为代码实现:
      其实这个实现就是使用了MessageFormat这个类;
      String content = "ab,cc,{名称},{密码},{日期},dd,ff";
      String array[] = {userName, password, format.format(new Date())};
      content = MessageFormat.format(content, array);
       解释如下:
       content 中需要被替换的就是{}中的参数,array数组中存放的是对应的要替换的参数;使用MessageFormat方法的时候,需要要将这些参数的个数匹配正确,并且数序要指定,否则匹配出错。这样就实现了参数的替换。很简单,也很死板。
      MessageFormat:出自java.text包中;
      大家可以自己打开jdk源代码读一下他的实现方式。


Java里从来少不了字符串拼接的活,Java程序员也肯定用到过StringBuffer,StringBuilder,String.format以及被编译器优化掉的+=。但这些都和下文要谈的无关。

比如有这样的字符串:

张三将去某地点找李四。

其中,张三某地点和李四都是可变的,比如张三变成王五,某地点变成纽约,李四变成赵六。于是整句变成:

王五将去纽约找赵六。

如果直接将张三,某地点和李四用变量替代,再拼接起来,可以达到目的。但是,代码不好写,也不好看,也不好维护。但是,我看过很多SQL拼接,HTML拼接都是这样做的。我自己以前也是这样,自从接触了MessageFormat.format之后才意识到有更好的形式。请看下面的代码:

String[] tdArr=...;            
String result=MessageFormat.format("{0}{1}{2}{3}", tdArr);

这段代码将把数组tdArr中的四个元素分别插入到{0},{1},{2},{3}的位置。

你看看,是不是这样形式和内容有效的分开了。容易想象,当元素增多时,这种方式优势很明显。

一件事有很多手段来达成,知道那种手段更好,是你经验的体现和专业化的特征。
Jun 21
[ubuntu@titan]# /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

确认已经安装PCRE

[ubuntu@titan]# sbin/nginx
sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

[ubuntu@titan]# error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

[ubuntu@titan]# whereis libpcre.so.1
libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1

添加软链接:
[ubuntu@titan]# ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1  

前面在一般的linux上可以解决此问题.

注: 在有的操作系统上面,安装pcre后,安装的位置为/usr/local/lib/*pcre*
在redhat 64位机器之上有这样的情况.
在redhat 64位机器上, nginx可能读取的pcre文件为/lib64/libpcre.so.1文件.
所以在改用下面的软连接:

[ubuntu@titan]# ln -s /usr/local/lib/libpcre.so.1 /lib64
Mar 23
最近把项目改成Maven项目,其中遇到了不少问题,最为严重的是,Mybatis启动老是报绑定错误(找不到Mapper对应的 SQL配置),经过一番Google未能解决问题(大家都说是XML没写对之类的),根本就没有怀疑到漏掉XML文件,最后迫不得已,去查看了下 Maven打包后的war文件,才找到问题。
废话不多说,解决方式是,在pom.xml文件中的build节点中,添加如下代码:

Mar 22
有一些特殊情况,需要在系统初始化时加载一些配置属性做为系统参数到本地文本中
web.xml


Mar 21
最近发现真的凹凸了,Spring升级到3后原来已经自带任务调度器了,之前还一直使用着Quartz。
其实也不是Quartz不好,只是相比之下,使用Spring task真的简单很多,无论是理解还是使用。

Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了。
但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的,如果用annotation的方式的话,改动就变得麻烦了,必须去重新编译。
所以,我只是选择用XML配置的方式,不过我还是习惯性地启用着标注方式,就如AOP配置那样。

annotation方式请自行查找@Scheduled  
分页: 2/47 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]