zoukankan      html  css  js  c++  java
  • 2015年工作中遇到的问题:71-80,Tomcat-Redis-浮点数-HTTPS

    71.Tomcat访问项目带了“项目名称”。
    最简单的办法,是把这个项目部署到“root”目录,据boss所说,阿里的每一个项目,都单独放到1个Tomcat的root下。
    但是,我们的实际项目遇到了一些问题。
    Front项目,前端系统
    Backend项目,后端管理系统
    CMS与静态资源,前端系统2


    由于图片等资源,存的是相对路径,同时需要让Front和Backend都能够访问到图片,我们最后决定把CMS放在Tomcat的root目录下。
    项目发布之后,Front项目的访问路径是:http://a.com/Front。
    这种路径真的很坑,http://a.com,不能直接访问,我们在CMS系统下增加了一个index.jsp,重定向到http://a.com/Front。


    这种真的很烂,但是暂时如此。


    其它考虑:
    多个客户的项目,可能会部署到一台配置极好的服务器上。
    因此,从简化部署的考虑,一个客户只用一个Tomcat,只有一个root,这就是让人纠结的地方。


    如果是我的话:
    第一种方法,一个客户用2个Tomcat,就是管理稍微麻烦了些。
    第二种方法,CMS系统和Front系统合并成为一个,小公司多个项目放在一起,更简单开发和维护。
    第三种方法,一个客户用1台配置较低的服务器,开2个Tomcat,甚至多个,Nginx配好。


    72.浮点数相乘,元转分,分转换成元。
    //Money内部用double,有时对,有时错,不稳定
    double a =5.1d;
    Money m = new Money(a);
    System.out.println(m);


    //509.99999999999994,直接坑了
    double d = 5.10*100;
    System.out.println(d);


    //方法一:用BigDecimal的setScale方法,设置“精度”和“舍入模式”。
    BigDecimal bd = new BigDecimal(d).setScale(3,BigDecimal.ROUND_UP);
    System.out.println(bd.longValue());
    System.out.println(bd.doubleValue());


    方法二:
    public static double mul(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2).doubleValue();
    }


    方法三:Boss比较倾向于,“元转分”自己实现,但是,不从根本上解决“普通的double相乘问题”,只是解决“元转分”这个特殊的具体问题。
    输入:
    类型:double
    典型值:5,5.0,5.10,5.09,5.011


    第1步:转换成统一的格式,5.00,小数点后有2位,第3位之后的,直接舍掉。
    第2步:提取整数部分intPart和小数部分doublePart。
    第3步:intPart*100+doublePart。


    想探究下BigDecimal.multiply和方法三的区别,不过源码没有看懂。


    参考资料:
    JDK1.6 API文档
    http://www.csdn123.com/html/blogs/20130818/55035.htm
    小雷粉-爱孔孟


    73.模版或视图页面的存放位置。
    WebContent目录下的模版文件,可以直接通过url访问到,很可能会泄漏视图部分的源码。
    从安全角度考虑,放在WEB-INF目录下比较好。


      FTL模版不应该放在WebContent的根目录下。
      外界可以直接访问到,非常危险,
      JSP还相对安全一些,默认会执行,不会直接泄漏源码。
      
    74.Freemarker变量最好判断是否存在。
      <#if role?exists && role=="admin">
      如果role不存在,可能会报错,阻碍后面Freemarker代码的执行。
      关于变量是否null和是否存在,挺麻烦的。
      
    75.Tomcat配置https。
    双向证书参考的是,百度经验上的
    http://jingyan.baidu.com/article/a948d6515d3e850a2dcd2ee6.html
    经过实践的命令:
     keytool -genkey -v -alias tomcat -keyalg RSA -keystore C:/p2p/tomcat.keystore -validity 365
     
     keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore c:/p2p/mykey.p12
     
     keytool -export -alias mykey -keystore C:/p2p/mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file c:/p2p/mykey.cer 
     
     keytool -import -v -file c:/p2p/mykey.cer -keystore c:/p2p/tomcat.keystore
     
     keytool -list -keystore c:/p2p/tomcat.keystore
     
     keytool -keystore c:/p2p/tomcat.keystore -export -alias tomcat -file c:/p2p/tomcat.cer
     
      <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true" maxThreads="150" scheme="https"
    secure="true" clientAuth="true" sslProtocol="TLS"
    keystoreFile="c:/p2p/tomcat.keystore" keystorePass="123456"
    truststoreFile="c:/p2p/tomcat.keystore" truststorePass="123456" />


    单向证书,还没有尝试,找了一篇看起来还不错的
    http://forchenyun.iteye.com/blog/473776


    在JavaEye上,还搜到了一篇同时有“单向”和“双向”的证书配置教程。
    http://juncao2011.iteye.com/blog/973988

    据说,某机构发1个HTTPS证书,每年收费7000元,吃人啊。


    76.通过本地控制台,连接远程redis-server。
    cd /D E:Mongodb-Redis-Nginx edis_win edisbin_x64
    redis-cli -h 120.90.56.110 -p 6379


    如果服务器上的redis没有设置密码,通过以上命令,可以成功访问。


    77.VIM查找命令。
    想在Redis中查找注释的密码配置,几百行,实在是懒得一行行往下翻了。
    看来还是有必要学习下“查找命令”。
    方法:命令模式下,按‘/’,然后输入要查找的字符,Enter。?和/的区别是,一个向前(下)找,一个向后(上)。
    参考资料:http://zhidao.baidu.com/link?url=4rSOqYZEPYH9h_B8MRPyVSC9IuTiJGlaVfJYgGU1ir1mXvr_Tu-cFO0aJ5oz8tN6jkqNDqKFh5ei0_dGXIF1H_


    78.设置Redis的密码。
    通过/requirepass 在第348行找到了密码配置。
    348 # requirepass foobared


    把密码这种比较常用的配置,放在最后太不科学了,手动在Redis.conf的前几行,增加密码配置:
    requirepass xiaolei
    redis-cli -h 120.90.56.110 -p 6379 -a xiaolei
    参考资料:http://www.iteye.com/topic/1124400


    79.hosts文件的位置。
    Linux:/etc/hosts
    Windows:C:WindowsSystem32driversetchosts


    Windows上直接修改hosts文件,可能会被“QQ电脑管家”之类的安全软件拦截,因为直接修改hosts文件有“安全风险”。


    80.数据库字段名和sql映射java属性名转成小写。
      原来是大写的,想改成小写,看起来舒服一点。
      mysql-front,没有自带可以把大写字段“ABC”转换成小写“abc”的工具,只好手动改。
      mybatis中的java字段名称,手动改,太慢了点,可以使用Eclipse的快捷键“Ctrl+Shift+Y”,“大写转小写”。
      “Ctrl+Shift+X”,“小写转大写”,只可惜与QQ拼音输入法的截屏快捷键冲突了,可以手动改一下QQ的截屏快捷键。
  • 相关阅读:
    python's is&==区别
    python's decorator&wrapper
    objects & values & types
    linux sort命令
    partial function
    proc文件系统
    readlink 获取当前进程对应proc/self/exe
    Workgroup&Domain(Realm)
    python传值&值引用
    Unpacking Argument Lists
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462866.html
Copyright © 2011-2022 走看看