zoukankan      html  css  js  c++  java
  • 2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)

    1.数据库表名重构。
       之前受PHP等程序的影响,数据库表名喜欢用数据库的名称作为前缀,比如“p2p_account”。
       在经过大量的实践之后,发现Java程序中,基本没有这个必要。
       so,从今天开始,数据库表明不再加上多余的前缀了。
       
       Java的Dao和Mybatis的xml,大量用到了数据库表名,我当然不笨,想到的是Eclipse的replace替换功能。
       把“p2p_”替换成“”就可以了。
       替换之前,随机抽样,选几个文件,看看是不是有“误杀”,尚未发现。
       
       mysql数据库的表名,也想导成sql文件,再同样直接替换的,后来发现不行,最近导入了IP库,有几十MB,还是手动重命名算了。
       
       类似的问题,之前手动把Mybatis中的“大写”转换成看起来更顺眼的“小写”,手动改的,后来多亏boss提醒,用的是Eclipse的快捷键,
       “Ctrl+shift+Y”。
       今后,要开动大脑,避免这种苦力活。
       
    2.properties乱码问题。
       默认情况下,.properties文件是ISO-8859-1编码。输入中文,要么乱码,要么被Eclipse转换成对应的UTF-8字符,进而正常显示。
       现在有个问题,想在proerties加入中文注释,“#这是个路径”,其中"这个是路径"会被转成成“#aaaa”这种码。
       问题是,注释中的“#aaaa”在Eclipse下,不会自动翻译成“中文”,而没有注释的则可以。
       
       为了解决这个问题,想的是,把“.properties”手动设置UTF-8编码保存,但是,也不能直接用中文,
       中文的变量a=你好,不会正常解析。
       
       我们想这样:
       #a你好
       a=#aaaa#aaa
       
       这样有个不好的地方是,UTF-8编码,Eclipse不会自动把输入的中文,转换成“#aaaa”这种格式。
       还得手动,用JDK自带的工具转。
       
       总之呢,没有一种很好的方式,只能“维持现状”了。

       中文,永远都是个老大难的问题。谁让,最初设计软件标准的不是国人呢。
       
    3.SpringMVC文件路径。
     p2p.backend_page=E:GitRepositoryackend-system
     <mvc:resources  mapping="/tpl/**" location="file:${p2p.backend_page}/tpl/"/>
     这个地方的文件路径,不正确,有问题。
     
     "p2p.backend_page=E:/GitRepository/backend-system",这种才是正确的。

    4.SpringMVC获取request。
    a. 在web.xml中配置一个监听
    <listener>  
            <listener-class>  
                org.springframework.web.context.request.RequestContextListener  
            </listener-class>  
    </listener>  
       b.之后在程序里可以用
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  

    这种方法,是我需要的,方便在工具类中获得上下文中的request。
    比如,记录操作日志,从request中获得ip和referer等相同的属性,可以写成1个通用的方法处理。


    5.Mybatis的一个大坑啊。
    有问题:mybatis会把最后一个if中的“,”给去掉,sql变成了“UPDATE p2p_user set paypwd=? uptime=now()”,进而导致sql语法错误。
    <update id="update" parameterType="User">
    UPDATE p2p_user 
    <set>
    <if test="umobile!=null">
    umobile = #{umobile},
    </if>
    <if test="paypwd != null">
    paypwd = #{paypwd},
    </if>
    </set>
    uptime = now()
    WHERE uid = #{uid}
    </update>

    没问题:如果一定修改uptime字段,就用test="true",避免上面的问题。
    <update id="update" parameterType="User">
    UPDATE p2p_user 
    <set>
    <if test="umobile!=null">
    umobile = #{umobile},
    </if>
    <if test="paypwd != null">
    paypwd = #{paypwd},
    </if>
    <if test="true">uptime = now()</if>
    </set>
    WHERE uid = #{uid}
    </update>
    6.SpringMVC的URL匹配问题,是否带斜杠/。
    @Controller
    @RequestMapping("/loan")
    public class LoanInfoController extends BaseController {
       @RequestMapping("")
    public String index(HttpServletRequest request){
    return "loan/index";
    }
    //用@RequestMapping("")可以匹配到"/loan"和"/loan/"。
    }

    @Controller

    public class LoanInfoController extends BaseController {
       @RequestMapping("/loan")
    public String index(HttpServletRequest request){
    return "loan/index";
    }
    //用@RequestMapping("")可以匹配到"/loan"和"/loan/"。(分析是这样,没有尝试)
    }

    public class LoanInfoController extends BaseController {
       @RequestMapping("/loan/")
    public String index(HttpServletRequest request){
    return "loan/index";
    }
    //用@RequestMapping("")只可以匹配到"/loan/"。
    }
    比较有疑问的是,“/loan”能直接匹配到,还是经过SpringMVC处理了,然后再匹配到的。

    7.HttpServletRequest获得端口号。
     getLocalPort 可以获得8080
     getRemotePort 获得的是61132之类的服务器端的端口号,不是想要的。
     
     可以参考这篇文章的总结:http://blog.csdn.net/ranmudaofa/article/details/39785785
     
    8.jquery获得修改iframe的src,父页面和当前页面的问题。
    a.html
    <iframe src="${base}/welcome.html" id="mainFrame" frameborder="0"
    width="80%" height="500"></iframe>
    在a.html中有个iframe,点击a中的某个按钮,更新iframe的src属性。
    加载welcome.html页面之后,手动修改iframe的src,但是页面没有刷新。

    后来,通过chrome的debug发现了问题。
    var mainFrame=$("#mainFrame");子页面中获得的mainFrame没有src属性。

    最终确定,a.html和b.html虽然都找到了mainFrame,但是不是同一个元素,这是为啥呢?

    解决办法:
    父页面:mainFrame=$("#mainFrame"); 
    子页面:mainFrame=$("#mainFrame",window.parent.document); //等价于window.parent.document.getElementById("mainFrame");

    如果写通用的方法,需要判断src是否有值。

    9.JS的函数名是关键字。
      function delete(acl,ename);
      “delete”是js中的关键字,不能作为函数名称。
      这也说明,把java的模版文件用“.html”后缀比较方便,Eclipse可以给出提示。
      
      妈蛋,自己写的组件里,给超链接绑定一个事件,“remove”方法竟然也貌似冲突了,因为我随便用了个“a”方法,是可以响应的。

    10.奇葩的JSON参数接收问题。
    原来用form表单提交,有个属性名字叫做“amoun.yuan”,让后端
    Money amount对象的字段yuan接收正常。

    现在用JSON请求,参数名“amount.yuan”,接收失败。
    "amount.yuan" : amount。

    怎么说呢,如果只是接收不到参数,我表示非常理解。
    但报的错误确是400,bad request。

    我一直以为是,@RequestParam,某个参数没有提交过来导致的。

    现在终于搞明白了,今后坚决不再用“a.b”这种形式发送json的参数了。
  • 相关阅读:
    weblogic无需用户名密码启动Server
    中文和unicode互转
    spring集成activeMQ
    jvm分析(MD语法)
    解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
    httpclient 支持代理和http & https
    容器配置jndi Tomcat为例
    java https tomcat 单双认证(含证书生成和代码实现) 原创转载请备注,谢谢O(∩_∩)O
    java Http原生 Get 和Post 支持代理认证
    解决客户端访问https报错
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462845.html
Copyright © 2011-2022 走看看