文档章节

2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)

FansUnion
 FansUnion
发布于 2015/05/03 01:25
字数 1418
阅读 8
收藏 0
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:\GitRepository\backend-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匹配问题,是否带斜杠/。
@RequestMapping("/loan")
public class LoanInfoController extends BaseController {
   @RequestMapping("")
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/"。(分析是这样,没有尝试)
}

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的参数了。

© 著作权归作者所有

FansUnion
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问
springmvc开发过程中遇到的奇怪浏览器问题

最近个人开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc作为前端框架,mybatis作为数据库持久化技术.前台使用jquery和一些jquery的插件. 在开发到中间阶段时候发现自己好像忽略...

一个大土豆
2013/08/26
0
0
Spring3 MVC Hello World(3)使用JSON进行前后台数据交互

在 Spring3 中,响应、接受 JSON都十分方便。 向前台返回 JSON 格式的数据: 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON。 Spring这个转换是靠org.cod...

木木情深
2014/01/22
0
0
jquery通过json与SpringMVC交换数据 404错误

在学习jquery与SpringMVC交换数据,最开始的时候jquery每次发送给controller的json数据提示都是415,然后添加了 并在spring的配置文件里面设置了之后可以使用了,但是现在的问题是我的contr...

水之笔记
2017/03/03
410
5
SpringMVC3的ResponseBody返回字符串(JSON)乱码问题解决

近日做一个小项目,用spring mvc 做到ajax请求获取jquery ztree 异步获取树返回json对象时出现了乱码,试了各种办法,查了各种资料,一开始以为是数据库的编码有问题,经测试没问题,又以为是...

guhai2004
2013/10/18
0
6
你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/J...

不再有页面刷新:使用jQuery 相关厂商内容 免费迷你书下载:Flex入门指南——PHP开发者 Flash Builder 4 Beta和FlexUnit下的测试驱动开发 下载Flex 4 SDK,构建超级棒的Flex应用 使用Pixel B...

李长春
2011/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
25分钟前
2
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
2
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部