Java开发心得
1. Spring概述
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
强大的基于 JavaBeans 的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
2. Spring MVC
Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。URL的处理流程见下图:
1. 当DispatcherServlet接到请求时,他先回查找适当的处理程序来处理请求。DispatcherServlet通过一个或者多个处理程序映射,将每个请求映射到处理程序中。处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的Bean。它负责为请求返回一个适当的处理程序(也就是Controller)。处理程序映射通常根据请求的URL将请求映射到处理程序(Controller)。
2. 一旦DispatcherServlet选择了适当的控制器(Controller),它就会调用这个控制器来处理请求。
3. 控制器处理完请求后,会将模型和视图名(有时候是视图对象)返回给DispatcherServlet。模型包含了控制器要传递给视图进行显示的属性。如果返回的是视图名称,它会被解析成视图对象再进行呈现。绑定模型和视图的基本类是ModelAndView。
说明:本项目所有Controller返回的都是JSON数据,视图的逻辑都是在前台由ExtJs实现的。
4. 当DispatcherServlet接收到模型和视图名称时,它会将逻辑视图名称解析成视图对象再进行呈现。DispatcherServlet从一个或者多个视图解析器中解析视图。视图解析器配置在Web应用程序上下文中,是实现了ViewResolver接口的Bean。它的任务是根据逻辑视图名称返回试图对象。
5. 一旦DispatcherServlet将视图名称解析称为试图对象,它就会呈现视图对象,并传递控制器返回的模型。视图的任务是将模型属性展示给用户。
3. 装配组件
装配组件可以使用配置文件,也可以使用注解。
项目的Spring配置文件:
如果使用注解,需要在配置文件中指明搜索注解的位置;
<context:annotation-config />
<context:component-scan base-package="com.mycompany.project.config" />
<context:component-scan base-package="com.mycompany.project.model" />
<context:component-scan base-package="com.mycompany.project.controller" />
<context:component-scan base-package="com.mycompany.project.service" />
<context:component-scan base-package="com.mycompany.project.dao" />
本项目使用的注解含义:
@Controller 用于标注控制层组件
@Autowired 完成自动装配的工作,通过@Autowired的使用来消除set和get方法
@RequestMapping 配置URL请求
@ResponseBody 后台返回数据使用JSON格式
@RequestParam 必选参数,URL中必有含有该参数才能匹配上
@Service 服务层组件,用于标注业务层组件
@Transactional 在service类前加,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务
@Repository 持久层组件,用于标注数据访问组件,即DAO组件
4. Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
本项目使用的注解含义:
配置项 作用
@JsonAutoDetect 自动生成JSON格式数据
@Entity 实体类
@Table 映射数据库表明
@Id 映射主键
@Column 映射字段
@DateTimeFormat 时间日期字符串解释器
@Transient 不存入数据库字段
5. ExtJs
ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架。
AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML)。AJAX的作用是使用Javascript向服务器提出请求并处理响应而不阻塞用户。核心对象XMLHTTPRequest。通过这个对象,您的JavaScript可在不重载页面的情况与Web服务器交换数据。
说明:Java和JavaScript是完全不同的2中语言,JavaScript是脚本语言,前台浏览器可以运行。Java是跨平台的语言,应用很广。
注意:用户的输入可以在前台使用JavaScript判断,这样做是为了减轻后台服务器的压力,提高效率。但是从安全角度出发,用户输入的有效性后台还是必须再判断一次的。
6. JUnit
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中为最成功的一个。 JUnit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率。另外,在项目初期阶段,整个平台框架还没有搭建起来,这时候写的代码只能通过JUnit来测试。
7. Quartz
Quartz是一个完全由java编写的开源作业调度框架。项目中每日构建规则库,运行规则库识别率误报率和定时备份数据库,都是由Quartz实现调度的。
配置触发器的cronExpression属性可以定义触发时间。
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail" />
</property>
<property name="cronExpression">
<value>00 01 00 * * ?</value>
</property>
</bean>
cronExpression配置值说明:
字段 | 允许值 | 允许的特殊字符 |
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | , - * / |
日期 | 1-31 | , - * ? / L W C |
月份 | 1-12 或者 JAN-DEC | , - * / |
星期 | 1-7 或者 SUN-SAT | , - * ? / L C # |
年(可选) | 留空 或者1970-2099 | , - * / |
通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").
# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;
小提示:
'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发;
周字段的设置,若使用英文字母是不区分大小写的,即MON 与mon相同;
例子:
1 "0 0 12 * * ?" 每天中午12点触发
2 "0 15 10 ? * *" 每天上午10:15触发
3 "0 15 10 * * ?" 每天上午10:15触发
4 "0 15 10 * * ? *" 每天上午10:15触发
5 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发
6 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
7 "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
8 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
9 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
10 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
11 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
12 "0 15 10 15 * ?" 每月15日上午10:15触发
13 "0 15 10 L * ?" 每月最后一日的上午10:15触发
14 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
15 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
16 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
17 “0 0 6 * * *” 每天早上6点
18 “0 0 */2 * * *” 每两个小时
19 “0 0 23-7/2,8 * * *” 晚上11点到早上7点之间每两个小时,早上八点
20 “0 0 11 4 * 1-3” 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
21 “0 0 4 1 1 *” 1月1日早上4点
8. 经验总结
1. 权限控制是通过Spring MVC的拦截器实现的
<mvc:interceptors>
<bean class="com.topsec.ai.common.PermissionAnnotationInterceptor"></bean>
</mvc:interceptors>
2. 上传和下载文件都使用流传输文件。
上传文件,前台可以使用Ext自带的FileUpload组件,后台直接使用request.getReader()方法能够得到流数据。
下载文件,后台response要做如下设置:
response.setContentType("application/doc");
response.setContentLength((int) file.length());
response.setHeader("fileName", fileName);
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
前台使用Ext.core.DomHelper.append()方法可以下载文件。
3. app.js是ExtJs的入口文件。
4. 要管理mysql数据库需要配置其他机器能够通过3306端口连接mysql。首先进入mysql,然后使用gant命令配置远程连接的机器IP地址。
5. 时间日期的转换,ExtJs想要解析后台传来的时间类型,就要设置dateFormat=time。
Java开发心得的更多相关文章
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(五)
笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料.阿里巴巴在发布时所说,“阿里巴巴集团推出的<阿里巴巴Java开发手册(正式版)>是阿里巴巴近万 ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(一)
前言 下面是阿里对<阿里巴巴 Java 开发手册>(下称<手册>)的介绍: 凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师, ...
- 安卓版App开发心得
从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...
- Java学习心得之 Linux下搭建JavaWeb环境
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建JavaWeb环境 1. 前言2. Java安装3. t ...
- AEAI Portlet开发心得
1 背景概述 Portlet是AEAI Portal组件API,是基于Java的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容.AEAI Portal中已经预置了许多Portle ...
- 20145212《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDE)
20145212<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDE) 实验内容及步骤 1.命令行下的JAVA程序开发 建立并进入实验目录: 撰写简单的Hello ...
- 20145206邹京儒《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
20145206<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验内容及步骤 1.使用JDK编译.运行简单的Java程序: 建立实验目录: 在IDEA ...
随机推荐
- php 命名空间(要求php5.3以上)
要求php5.3以上 <?phpnamespace test;// 命名空间与目录类似功能,也可定义子命名空间,用分层的方式定义:/*namespace mydir\ok\project; 在声 ...
- 使用curl获取网站的http的状态码
发布:thebaby 来源:net [大 中 小] 本文分享一例shell脚本,一个使用curl命令获取网站的httpd状态码的例子,有需要的朋友参考下.本文转自:http://www.j ...
- java根据url获取json对象
package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...
- OpenCASCADE 基础
OpenCASCADE 基础 转载▼ 一直在用OCC作项目,但这方面的中文资料很少,看来OCC在中国还不是十分普及: 后来,项目中使用OCC和DirectX结合使用,取得了很好的效果: 随着OCC6. ...
- python AES 加密与解密
#用aes加密,再用base64 encode def aes_encrypt(data): from Crypto.Cipher import AES import base64 key=setti ...
- Python数据库连接池实例——PooledDB
不用连接池的MySQL连接方法 import MySQLdbconn= MySQLdb.connect(host='localhost',user='root',passwd='pwd',db='my ...
- cnn常用参数记录
1. epoch 在代码中经常见到n_epochs这个参数,该参数到底是什么意思呢?答案如下: 在一个epoch中,所有训练集数据使用一次 one epoch = one forward pass a ...
- jquery delegate
代码如下: $('#container').delegate('a','click',function(){alert('That tickles!')} JQuery扫描文档查找$('#cont ...
- 简单的网页布局效果html5+CSS3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- r个有标志的球放进n个不同的盒子里,要求无一空盒,问有多少种不同的分配方案?
由题意可知道r>=n,我原来想的是先取n个全排列,剩下的r-n个每个有n中选择,所以结果是n!*n^(r-n).经满神猜测,这样是会重复的.比如说,1到5个球,ABC三个盒子,ms ...