欢迎来到Heck's Blog,专业承接拿站、企业建站、仿站、网上商城架构、门户网站搭建、空间域名注册、软件定制等项目。关注网络安全,因为专注,所以专业,懂得放弃,才能收获。有事请发邮件至i@hecks.tk,请记住本站网址:http://www.hecks.tk,多谢。
Jul 18

ETAG的工作原理 不指定

Heck , 15:28 , Web开发 , 评论(0) , 引用(0) , 阅读(10) , 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  
Mar 13

修改linux防火墙 不指定

Heck , 19:27 , Web开发 , 评论(0) , 引用(0) , 阅读(170) , Via 本站原创
vim /etc/sysconfig/iptables

放行8080端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
Mar 13
Linux系统一定要配置hosts文件

127.0.0.1  localhost
172.16.61.151  PSJX-DB-Server
172.16.61.150  PSJX-YY-Server
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

不配置的话默认访问机器名字会变成公网IP,程序里面获取到的也就是公网IP。
分页: 1/46 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]