logistics-10-summary

来源:互联网 发布:遇上网络诈骗怎么办 编辑:程序博客网 时间:2024/05/16 19:11

1.常用的报表技术

1.POI报表,针对业务需要,将数据分析统计,生成excel文件 
2.JasperReport  生成pdf、html 报表
3.itext 生成pdf 格式报表
4.jfreeChart :图表技术 (饼图、 柱状图 )
amcharts:支持柱状图、条形图、线形图、面积图、烛台图、雷达等基本图形

2.主流权限框架

1.Sping security权限框架
    必须要和spring一起使用,繁琐复杂
2.Apache shiro权限框架
    可以单独使用,轻量简单易用

3.常用远程调用技术

RMI 
   RMI是 Java 首选远程调用协议,非常高效稳定,特别是在数据结构复杂,数据量大的情况下,与其他通讯协议的差距尤为明显。但不能跨语言

HttpInvoker
   HttpInvoker使用 java 的序列化技术传输对象,与 RMI 在本质上是一致的。从效率上看,两者也相差无几, HttpInvoker 与 RMI 的传输时间基本持平。

Hessian
   Hessian在传输少量对象时,比RMI 还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较 RMI 要慢 20% 左右。但这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时,Hessian并不比RMI慢。 Hessian 的好处是精简高效,可以跨语言使用,而且协议规范公开。 
(基于binary-RPC协议,传输的是二进制数据,传输效率比xml高)
阿里巴巴开源框架Dubbo,底层使用的就是hessian。

Burlap
   采用 xml 格式传输。仅在传输 条数据时速度尚可,通常情况下,它的耗时是 RMI 的 倍。

█ Web Service
   效率低下是众所周知的,平均来看, Web Service 的通讯耗时是 RMI 的 10 倍。 

通讯效率测试结果:

     RMI > Httpinvoker >= Hessian >> Burlap >> Web service

另一套远程调用常用架构:DWR(服务器端Ajax框架) + WebService
效果可以在js 直接调用java方法 
js:  var customers = customerService.findNoAssociationCustomers();

参考博客:点击打开链接

4.MyBatis和Hibernate技术使用问题

█使用场景
Hibernate 场景: 中小型企业级项目,数据量不会很大,没有很好查询性能要求 
PO ---- hbm --- table 
所有增删改查语句,完成自动生成 
项目类型: OA、CRM 
企业选择Hibernate + Oracle /MySQL/DB2/SQLServer (不考虑数据库) 

MyBatis 场景: 主要用于网站开发 ,主要用于数据量比较大。 定制SQL语句 
企业选择 SpringMVC + Spring + IBatis 、MyBatis + MySQL 
搜狐: 应用MyBatis 将SQL语句写好, 交给DBA 优化,然后在项目使用 (不适用于Hibernate )

█Hibernate 使用SQL 
有些公司,使用Hibernate ,编写查询 SQL语句 
Hibernate 增加、修改、删除, 不用写SQL代码 
MyBatis 增删改查,都必须写SQL语句 
List<User> users = 
session.createSQLQuery(“select * from t_user”).addEntity(User.class).list();
 Hibernate 重点: Criteria 对象【复杂查询】、 SQL 语句调用 【查询优化】

█MyBatis SQL 语句编写方法 
MyBatis 应用互联网或者金融, 对SQL性能优化要求比较高

5.常用的优化方法

1、 SQL语法优化 
2、 表结构优化 (DBA ) --- 水平分离,垂直分离,读写分离 
①读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器 
② 水平切分所指的是通过一系列的切分规则将数据水平分布到不同的DB或table中 (数据库有10000000 数据, 每1000000数据放入新的数据库 )
③ 垂直切分指的是按业务、产品切分,将不同类型的数据切分到不同的服务器上,通过数据库代理疏通程序与多个数据库的通讯、降低应用的复杂度
3、 索引优化 --- 全文检索 Lucene 
4、 缓存优化  Ehcache 

6.日志技术 扩展: Log4j 日志框架的使用 

1、 日志框架作用 
    开发调试【开发阶段】 和 后期项目运维【项目上线】 
2、 日志和System.out 不同 
    System.out 是一定要执行,要输出 (不推荐在项目使用 ) --- 垃圾代码 
日志系统 好处,可以通过调节日志,控制输出
3、常用日志 框架
JDK Logging (JDK 自带日志实现 )
SEVERE(最高值) 
WARNING 
INFO 
CONFIG 
FINE 
FINER 
FINEST(最低值)
Apache Log4j (Apache 日志著名框架)
日志提供 六种级别 (高-- 低)
Fatal、Error、Warn、Info、Debug、Trace 
Apache Commons-Logging (通用日志接口)
Slf4J (Simple Logging Façade For Java) 简单日志门面 
 
JDK Logging 、 Log4j 更像是日志实现技术 
Apache Commons-Logging、Slf4J 统一各种日志实现接口 通用接口 (都支持和 JDKLogging 、log4j 整合使用 )
 4、 JDKLogging 或者 Log4j 在项目开发中 通常只使用一种 
JDK Logging 配置文件 logging.properties
Log4j 配置文件 log4j.properties 或者 log4j.xml  
5、关于log4j 配置
记录器配置 
log4j.rootLogger=debug, stdout
log4j.rootLogger 默认日志记录 = 级别, 输出源, 输出源… 
 
输出源 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  向控制台输出
log4j.appender.file=org.apache.log4j.FileAppender  向文件输出 
stdout和file 是输出源名称 
 
日志系统,只会输出比设置级别更高级别的日志!! 
企业中,项目开发和测试,使用 info 、debug ; 项目上线 error 

7.JavaWEB常用技术总结

 Xml 解析--- WebService 传输之前,先将对象转换xml字符串 (Dom4j、 Digester、 Xstream 

JBPM 工作流程定制 场景: jpdl.xml (修改原来流程,添加节点 ?) 
RepositoryService. getResourceAsStream xml读取到内存,使用xml解析生成技术,向内存dom树,添加节点,将节点回写数据表 

 Tomcat gzip 压缩实现 ,提供响应速度, 缓存相关头信息(禁止缓存 ), referer 统计站点请求来源 

 Session 购物车、 Cookie 保存用户名密码、自动登陆

 验证码技术、 令牌防止重复提交 

 Freemarker 模板引擎(JSP 就是 Servlet 生成内容, 直接返回客户端--- Filter ) 在网站使用 (新闻、 电商、 帖子 )

 监听器: 在线用户人数, 踢人 

 监听器: 定时任务 Timer、 TimerTask  (每月某天凌晨12点,给客户发送账单 ) --- Quartz 

 JavaMail : 激活邮件、 通知邮件、生日邮件 

█ 自定义标签 (实现负责页面控制 效果)


将form表单数据转换为js对象格式,加载到数据表格中。jquery提供了两个转换方法
1.serialize()
2.serializearray()
serialize():将表单数据转换为Http请求的字符串。
serializearray():将表单数据转存到数组。

8.异常处理

如何处理异常
可以使用异常拦截器。当发生异常时,将异常信息封装到struts2值栈中,在页面给出提示信息。
1.编写拦截器类
public class BosExceptionInterceptor extends AbstractInterceptor {//声明日志记录器private static final Logger log = Logger.getLogger(BosExceptionInterceptor.class);@Overridepublic String intercept(ActionInvocation invocation) throws Exception {try {//调用正常业务逻辑代码return invocation.invoke();} catch (Exception e) {//发生异常e.printStackTrace();//将异常信息记录到日志文件 log4j 日志技术log.error(e.getMessage(), e);//将错误信息提示给用户Map<String, String> map = new HashMap<String, String>();map.put("success", "false"); // 操作结果map.put("msg", e.getMessage()); // 错误信息//将错误信息放入值栈ActionContext.getContext().put("result", map);return "error";}}}
2.配置拦截器
与struts2中自定义拦截器配置方式一样。但注意异常拦截器要放在其它拦截器之前
3.页面给出提示
onComplete: function(response){if(response == ""){// 未发生异常$.messager.alert('导入成功', '文件上传导入成功', 'info');}else{// 发生异常$.messager.alert('导入错误', response, 'error');}}

0 0
原创粉丝点击