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:\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个通用的方法处理。

参考资料:http://yingzhuo.iteye.com/blog/2023989http://www.cnblogs.com/xusir/p/4135419.html

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获得端口号。

http://a.com:8080

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

时间: 2024-10-10 07:29:09

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

2015年创业中遇到的技术问题:71-80

71.微信接入盲点.每次请求,都要校验参数是否正确. 72.Nginx配置,proxy_pass的最后一个"/"加上还是很有必要.server{listen 80;server_name xiaolei.fansunion.cn;location / {proxy_pass http://localhost:9080/AboutXiaoLei/;}}英文分号";"也是必须的额. 73.Putty,XShell,免登录.之前一直用Putty连接远程linux主机,经常

2015年创业中遇到的技术问题:121-130

121.PHP中的.和->有啥区别呢? $this->,调用类的方法用"->". ".",是啥意思呢?(当然,可以表示字符串连接.) 122.Thinkphp判断是否登录了. <if condition="$Think.session.user == 'fansunion'">{$Think.session.user}</if> <present name="$Think.session.

2015年创业中遇到的技术问题:131-140

131.ZendStudio复制文件到远程. 同时复制目录和文件,不起作用. 同时复制普通文件.php和.htaccess,不起作用. 遇到这种情况,只能单个复制了. 132.Thinkphp部署之后,模版文件找不到. 模板不存在:./Application/Home/View/Index/index.html Windows下开发,开启了调试模式. Controller名称:IndexController. 视图文件目录名称:index,文件名称index.html. 部署到Linux上之后,

2015年创业中遇到的技术问题:21-30

21.高速清空表中的数据. 有个ip库的表.数据量几十万. 想在开发阶段,清空. 通过mysql-front和mysql控制台.都删除失败. 反应很慢.还有诸如lock失败的错误. 解决的方法:复制表的创建结构,比方 CREATE TABLE `ip_info` ( `ipbegin` varchar(20) DEFAULT NULL, `ipend` varchar(20) DEFAULT NULL, `zone` varchar(50) DEFAULT NULL, `company` var

2015年创业中遇到的技术问题:11-20

11.SpringMVC接收参数,冲突. class LoanBean { private Double amount; } class LoanInfo{ piavate Money amount; } @RequestMapping("/doadd") public void doAdd(LoanInfo loanInfo, LoanBean loanBean); json请求发过来,接收amount就遇到了400错误. 解决办法:变量名称不用同一个. 12.HTML下拉列表框选中

2015年创业中遇到的技术问题:31-40

31.Linux下启动Mysql有N种方式. service mysql start; service mysqld strat; 上述2种方式是,mysql已经安装作为了服务,有的叫做"mysql",有的叫做"mysqld". 如果没有服务,还得手动启动. 比如,/usr/bin/mysqld start &. 一段时间不搞,记忆已经模糊了. o(︶︿︶)o 唉 32.用户表-索引-类型. user表:uid,name A类用户:1开头,10001 B类用

2015年创业中遇到的技术问题:101-110

101.计算机中丢失 msvcr110.dll. 下载一个VS的补丁,http://www.microsoft.com/zh-CN/download/details.aspx?id=30679. 参考资料:http://jingyan.baidu.com/article/4f7d57129fa86e1a201927de.html 102.ecshop安装后出现Strict Standards: Only variables should be passed. 查看对应部分的代码为 $tag_se

2015年创业中遇到的技术问题:91-100

91.PHP日志记录方法.  error_log("error info"); 92.weiphp图灵机器人bug,需要修改3个地方. 问题描述:启用聊天插件后,发现在微信客户端上不管输入什么内容,回复的都是预设好的内容,而无法使用图灵机器人的功能. 问题分析:经过查看源码,发现 Addons\Chat\Model\WeixinAddonModel.class.php 文件有一处 Bug,在 function _tuling($keyword) 中,有一个判断图灵返回值的地方:[mw_

2015年创业中遇到的技术问题:61-70

61.Redis的key要判断null的情况. 如果key为null,报错. public Boolean exists(String key) { if(StringUtils.isBlank(key)){ return false; } return loginRedisTemplate.hasKey(key); } 另外原因分析,看了错误信息,发现是 org.springframework.util.Assert.notNull. 猜测,用Spring Data和redis连接,Sprin