前言
一个简单的网页CURD系统,用上了从来没用多的Spring MVC框架,一路走来,收获了很多,在这里记录下来分享给大家!
流程
搭建spring 框架(MVC 上下文、监听器、设置过滤jsp和html、GBK编码、session时间、jsp配置标签)--->JdbcTemplate及数据库配置--->tomcat部署项目--->编码(pojo、persistence、service、controller、jsp)
学习收获(走过的坑)
1. Tomcat Context配置[2]:使用配置文件部署项目失败(预备知识->了解tomcat 部署项目三种方式)2. Controller中的错误信息无法在传递到前台弹出//error.cardType从配置文件读取,通过RedirectAttribute传递 RedirectAttributes att-->att.addAttribute("errorMessage", resource.getMessage("error.cardType", new Object[] {},LocaleContextHolder.getLocale())); //通过model传递到前台,两步缺一不可 model.addAttribute("errorMessage", request.getParameter("errorMessage"));
3. URI中含有中文,而web.xml已经对处理为GBK,但仍未乱码,考虑到别的项目也会用到tomcat安装目录/conf/server.xml中的URIEncoding的值所以才去下面的方法处理:首先控制台得到Request中的编码,这样可以针对做处理--->log.debug(request.getCharacterEncoding());之后就好办了,用到java中基本的编码转换,即可解决--->new String(str.getBytes("GBK"), "UTF-8")
4. SpringMVC @PathVariable中含有特殊字符(;\/'#%)不包括括号的处理在前台可以处理的逻辑,尽量放在前台JS判断是否包含特殊字符 [3]@RequestMapping的REST风格[4]:说明了正则表达式SpringMVC @PathVariable 中含有中文和点号[5]:配置文件是中文的情况
5. SpringMVC 正确显示自定义的中文信息[6]
6. 做网站,很容易忽视的问题--->404、500错误-----------------------------2014年4月30日更新:关于ThreadPoolExecutor线程池中corePoolSize值得问题-----------------------------7. Rules of a ThreadPoolExecutor pool size[17]:文章从两个角度讲述了ThreadPoolExecutor 中的线程数增长问题,值得一读8. What is the difference between corePoolSize and maxPoolSize in the Spring ThreadPoolTaskExecutor[18]:其中比较不错的回答,corePoolSize不是越多越好,
要适度,而且在调整corePoolSize之前,先要确定程序本身是否有问题,corePoolSize的配置在客户现场方面不带有很大的不确定性,你也不可能每次请求都修改corePoolSize的值-----------------------------2014年5月4日更新:js得到前台中英文混合长度问题-----------------------------
9. Javascript中得到中英文混合字符串的长度[19]:讲解了问题出现的原因及解决方法。推荐看ISO/IEC 8859-1[20],其中有字符表-----------------------------2014年5月9日更新:关于Tomcat 5.5 部署问题-----------------------------
10. Tomcat 5.5默认不解析EL表达式的解决办法[21]:由于系统之前是在Tomcat 6.0上测试通过,最近换称5.5,结果就悲剧了,出现{} --- %7B%7D的问题,一开始以为是URIEncoding的问题,最后实在没有办法就问了公司的大牛,原来是EL表达式的问题,看来还是没有看清楚问题的本质啊!要学会给问题定位!
-----------------------------2014年5月23日更新:-----------------------------
- 做前台jsp页面的时候,需要写一些js,其中遇到了JavaScript parseFloat() 函数和$(".test").hide()的意义,还是查询W3school比较好啊!
最佳实践
1.虽然项目是完成了,但是仍然对spring MVC整体的认识不是很清楚,推荐看( spring官方文档[1])2. Spring MVC 教程,快速入门,深入分析[7],讲述了spring MVC中的各大要点,可以在看完基础之后,拿这个当手册看。3. 跟开涛学SpringMVC[8]:这个事学习spring mvc不错的系列,另外参考spring官方可以让你掌握这门技术4. 基于spring3.0.5 mvc 简单用户管理实例[9]:博主推荐看spring官方文档5. Spring 注解学习手札(二) 控制层梳理[10]:博主的文章会很有调理,不错6. Spring 3.x MVC 入门系列[11]:讲解的很透彻,尤其是配图很好,很清晰7. Ajax无刷新表格行内编辑源码带数据库[12]:实现行内编辑效果8. Java servlet+Ajax 用户管理(完全无刷新增删改查及分页)[13]:不是任何时候都会用到ajax,页面中有很多区域,只需要刷新某个区域的时候,要用到。9. jQuery Ajax 英文官方api[14]、 中文API[15]10. jQuery Ajax 全解析[16]:详细解释了每个函数,并配有实时例子讲解,来加深理解
参考文献
[1]. spring 3.1.1官方文档[2]. Tomcat Context配置[3]. JS判断是否包含特殊字符[8]. 跟开涛学SpringMVC
[10]. Spring 注解学习手札(二) 控制层梳理[11]. Spring 3.x MVC 入门系列[12]. Ajax无刷新表格行内编辑源码带数据库[14]. jQuery Ajax 官方api[15]. jQuery Ajax 中文api[16]. jQuery Ajax 全解析[18]. What is the difference between corePoolSize and maxPoolSize in the Spring ThreadPoolTaskExecutor[19]. Javascript中得到中英文混合字符串的长度[20]. ISO/IEC 8859-1