之前的实习--关于Web部分的笔记

之前实习的时候做的是关于Web的,主要做的是CRM这类企业项目,比较传统,技术用的也比较传统,是典型的SSH架构,如今不再从事Web开发,但是之前实习的一些笔记进行简单记录下,都是实际项目中真实遇到的问题,希望以后能够用的着。

1、poi POI提供API给Java程序对Microsoft Office格式档案读和写的功能

2、在html中a标签的href中调用js函数

3、在javascript 里怎样实现html中的 target=”_top” 这个功能

parent.location.href=”submitChangePwd.action”;

在js中设置

类似于设置target=”_top”

注意:location.href在框架中的使用target,如果只是简单的设置location.href=”“,会使得整个页面显示在子框架中,导致出现重叠框架。

解决办法:

window.top.framename.location.href = url;

window.parent.location.href=url;

mainframe.location.href=url;

4、datagrid和jqGrid的区别

5、Hibernate.initialize(Obj)用法

initialize(true) –》表示强制加载

initialize(true)–》简单理解:执行该方法后,可以将当前表关联的另一张表的数据查询出来

hibernate一个重要的特性:懒加载

懒加载:懒加载(延迟加载)机制是为了避免一些无谓的性能开销而提出来的,

所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。

例如下面的配置:

 <hibernate-mapping>
        ......
        <class name=”com.neusoft.entity.User” table=”user”>
            <set name=”addresses” table=”address” lazy=”true” inverse=”true”>
                <key column=”user_id”/>
                <one-to-many class=”com.neusoft.entity.Arrderss”/>
            </set>
       </class>
  </hibernate-mapping> 

默认情况下,是支持懒加载的。–》Hibernate中load方法是懒加载,get方法不是。

–>引申hibernate中对象的的三种状态

6、ajax请求中的同步和异步问题

jquery的async:false,这个属性

默认是true:异步,false:同步。

$.ajax({
        type: "post",
        url: "path",
        cache:false,
        async:false,
        dataType: ($.browser.msie) ? "text" : "xml",
            success: function(xmlobj){
        }
});
在这里,async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,
在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,
直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,
ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)

7、Hibernate中Criteria的完整用法–》Hibernate的QBC查询方式 (Query By Criteria)

Criteria是比hql查询更面向对象的一种方式。

–》http://blog.csdn.net/h_gao/article/details/49614531

8、BeanUtils中方法copyProperties(Object source, Object target, String[] ignoreProperties)

Copy the property values of the given source bean into the given target bean,

ignoring the given “ignoreProperties”.

即实现从一个实体到另一个实体的数据拷贝,不包括后面的String数组中的属性

9、js的push方法

将新元素添加到一个数组中,并返回数组的新长度值

jquery中的empty()方法和remove方法

empty方法–》清空div中的innerHTML,注意此时div还是存在的

remove方法–》删除整个div节,div已经不存在了

10、JSON.parse()和JSON.stringify()

parse用于从一个字符串中解析出json对象 stringify()用于从一个对象解析出字符串

url:http://blog.csdn.net/wangxiaohu__/article/details/7254598

11、通过addActionMessage添加的信息怎么显示出来

12、对js中this的理解,以及对于回调方法的理解

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象

对js面向对象的理解:如js的继承机制,js的闭包等

13、jQuery事件-trigger()方法 –》trigger() 方法触发被选元素的指定事件类型

如:

触发 input 元素的 select 事件:

(“button”).click(function()$(“input”).trigger(“select”););attr()方法设置或返回被选元素的属性值。根据该方法不同的参数,其工作方式也有所差异。改变图像的width属性:(“button”).click(function(){

$(“img”).attr(“width”,”180”);

});

attr()方法和prop()方法的区别
attr()方法操作的是文档节点的属性,因此设置的属性值只能是字符串类型。
如果不是字符串类型,也会调用toString()方法将其转换为字符串类型。
prop()方法操作的是js对象的属性,因此设置的属性值可以是包括数组和对象在内的任意类型。

Query认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,
    property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。
在jQuery 1.6及以后版本中,请使用prop()函数来设置或获取checked、selected、disabled等属性。
对于其它能够用prop()实现的操作,也尽量使用prop()函数。

14、JNDI(Java Naming and Directory Interface) Java命名和目录接口,它对应于J2SE中的javax.naming包

这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称

以后程序想获得Java对象,只需通过名称检索即可。

其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象.

15、html应用的CSS只能是class,cssClass是在某些动态编程(网络设计)语言中的控件属性

并非html的标签属性,虽然最终仍会解析成class,但是在设计之初仍然要用cssClass

16、for update 数据库的悲观锁

当Oracle中出现数据表时被锁的情况时,可以用下面的命令找出未关闭的session,执行相关语句关闭session

选择最后一个KILL_SESS中的语句关闭相应的session

Select /*+ rule */

s.Username

,Decode(l.Type, ‘TM‘, ‘TABLE LOCK‘, ‘TX‘, ‘ROW LOCK‘, Null) Lock_Level

,o.Owner,o.Object_Name,o.Object_Type,s.Sid

,s.Serial#,s.Terminal,s.Machine,s.Program,s.Osuser

,s.Module,s.Action

,‘ALTER SYSTEM KILL SESSION ‘‘‘ || s.Sid || ‘,‘ || s.Serial# || ‘‘‘;‘ Kill_Sess

From V$session s, V$lock l, Dba_Objects o

Where l.Sid = s.Sid

And l.Id1 = o.Object_Id(+)

And s.Username Is Not Null

And s.Terminal Is Not Null

Order By s.Machine, s.Terminal;

17、在Oracle中,对char和varchar2字段来说,”“就是null,即空字符串会以null的形式存在数据库中

18、

StringUtils.equals()方法

        StringUtils.equals("", "");    //结果是true
        StringUtils.equals(null, null);//结果是true
        StringUtils.equals(null, "");  //结果是false
        StringUtils.equals("",null);   //结果是false
        StringUtils.equals(null,"");   //结果是false

StringUtils.isNotBlank()方法

        StringUtils.isNotBlank(null) = false
        StringUtils.isNotBlank("") = false
        StringUtils.isNotBlank(" ") = false
        StringUtils.isNotBlank("/t /n /f /r") = false
        StringUtils.isNotBlank("/b") = true
        StringUtils.isNotBlank("bob") = true
        StringUtils.isNotBlank(" bob ") = true

StringUtils.isNotEmpty()方法

        StringUtils.isNotEmpty(null) = false
        StringUtils.isNotEmpty("") = false
        StringUtils.isNotEmpty(" ") = true
        StringUtils.isNotEmpty(" ") = true
        StringUtils.isNotEmpty("bob") = true
        StringUtils.isNotEmpty(" bob ") = true

19、window.open(pageURL,name,parameters)

其中:

pageURL 为子窗口路径

name 为子窗口句柄

parameters 为窗口参数(各参数用逗号分隔)

实例:

    window.open("/MecoxCRM/jsp/util/initUserSelection.action", "",
          ‘height=‘ + iHeight + ‘,innerHeight=‘ + iHeight + ‘,width=‘ + iWidth + ‘,innerWidth=‘ + iWidth
          + ‘,top=‘ + iTop + ‘,left=‘ + iLeft + ‘,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no‘);
$("#memberVo\\.primeSalesId",window.opener.document).val(users[0].userId);

将弹出的子窗口中的值传回到父窗口中

20、s:radio的取值问题

通过id获取radio选中值

    var cT = $(‘input[id="sc_ct"]‘).filter(‘:checked‘).val();  ==>通过id查找的时候总是取不出来值,这个地方不太清楚
    通过name获取radio选中值
        "condition.marriage" : $(‘input[name="condition\\.marriage"]:checked‘).val();
        var cT = $(‘input[name="ct"]‘).filter(‘:checked‘).val();

21、

$("#memberVo\\.primeSalesId",window.opener.document).val(users[0].userId);
    $("#memberVo\\.primeSalesId",window.opener.document).html(users[0].userId);
    将弹出的子窗口中的值传回到父窗口中
    这里注意.val和点html的区别,如果父窗口的标签是span,则用.html来进行传值

22、小技巧:如果js有错(有的时候alert的信息不出来),可以按F12进入控制台查看js脚本是否有错

23、在JBoss上配置数据库的连接池对应的配置文件路径 jboss_home/server/deploy/oracle-ds.xml

24、

这两种写法都会使显示出来的文本框不能输入文字,但disabled会使文本框变灰,

而且通过request.getParameter(“name”)得不到文本框中的内容(如果有的话),form表单方式也不能传递数据

而readonly只是使文本框不能输入,外观没有变化,而且通过request.getParameter(“name”)可以得到内容。

25、Integer类型的数据比较容易出错

Integer temp;

“0”.equals(temp) –>”0” 与 Integer in = new Ingeger(0) –》不一样

26、http://www.cnblogs.com/jackcxd/archive/2010/04/29/1723688.html

–》js弹出子窗口更新父窗口

27、sql中的exists关键字

–》exists (sql 返回结果集为真) not exists (sql 不返回结果集为真)

    SELECT * FROM (
     SELECT r.*, rownum rn FROM (
      SELECT M.MEMBER_ID,‘‘          FROM mm_member M
        where  exists (select * from sl_order o,sl_order_item s where o.member_id=m.member_id and s.order_no=o.order_no and s.sku=? and s.shipping_date between To_date(?, ‘YYYY/MM/DD HH24:MI:SS‘) and To_date(?, ‘YYYY/MM/DD HH24:MI:SS‘) )
        order by M.MEMBER_ID   ) r ) where  rn Between  ?  And  ? 

28、oracle中的哈希连接 –》http://blog.csdn.net/yuan22003/article/details/6713240

29、 –》OnUnload事件–》当用户卸载文档时执行一段 JavaScript

30、java中的ThreadLocal和FutureTask

线程局部量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。

java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。

31、Oracle中的查询分页问题–》http://www.itpub.net/thread-824147-1-1.html

Mysql中的分页比较简单,由于有limit这种关键字:select * from table limit M,N

Oracle中没有limit关键字,通过使用rownum来实现

但是对于rownum有一个问题:

很多资料都说不支持>,>=,=,between…and,只能用以上符号(<、<=、!=),

并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来。

解释:

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。

它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between…and这些条件,

因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,

可是它的rownum还是1,又被删除,依次类推,便没有了数据。

因为这样,所以需要通过嵌套子查询来实现
select * from (
  select rownum r_,row_.* from (select * from mm_member mm) row_
    where rownum <=20
) where r_>=5
最内层是不进行翻页的原始查询语句,在这个查询上添加序列rownum作为一个新列名为r_
这样带出来的这一列r_就可以进行>=的操作,即可以设定查询的起始位置。

32、策略设计模式

33、Hibernate的抓取策略

34、面向对象设计的SOLID原则

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。

SRP—》The Single Responsibility Principle—》单一责任原则

让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。

OCP—》The Open Closed Principle—》开放封闭原则

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。

LSP—》The Liskov Substitution Principle—》里氏替换原则

当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。

DIP—》The Dependency Inversion Principle—》依赖倒置原则

1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象

2. 抽象不应该依赖于细节,细节应该依赖于抽象

ISP—》The Interface Segregation Principle—》接口分离原则

不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好

35、Java种的WeakReference与SoftReference的区别

WeakReference和SoftReference都有利于提高GC和内存的效率,但是WeakReference一旦失去最后一个强引用,就会被GC回收

而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。

finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。

36、问题场景:hibernate中两个对象进行关联,配置的是一对多 one to many

主对象通过getXXXSet().add()的方式更新与其关联的从对象

那么通过这种方式来更新数据是在什么时候发出sql语句?这是个问题,毕竟是框架内部的操作

问题:当页面上同时新增两条数据,两条数据都是通过getSet().add()的方式保存

并且两条数据之间对从表的数据有查询操作,这时在查询操作时发出了update语句

–》这是问题:为什么在查询的的时候将上面通过set方式储存的数据更新到了数据库中(发出了update语句)

    @Override
    @Transactional
    public void saveBcExchangeSalesSkuCriteria(String activityId,
            Collection<EvSalesSkuCriteriaVo> salesSkuCriterias,
            String modifierId, String modifierName) throws Exception {
        Date sysTime = DateUtil.getNow();
        BcExchange entity = bcExchangeDao.loadByExchangeId(activityId, true);
        List<EvSalesSkuCriteria> tempList = new ArrayList<EvSalesSkuCriteria>();
            for(EvSalesSkuCriteriaVo salesSkuCriteriaVo : salesSkuCriterias) {
                //儲存交易條件
                EvSalesSkuCriteria salesSkuCriteria = null;
                if(StringUtils.isNotBlank(salesSkuCriteriaVo.getOid())) {
                    //修改讀取 oid 相同
                    for(EvSalesSkuCriteria model : entity.getEvSalesSkuCriteriaSet()) {
                        if(model.getOid().equals(salesSkuCriteriaVo.getOid())) {
                            Integer skuType = model.getSkuType();
                            if (StringUtils.isNotBlank(salesSkuCriteriaVo
                                    .getSkuNo())) {
                                if (skuType.equals(EvActivity._SKU_TYPE_NO)) {
                                    if (!model.getSkuNo().equals(
                                            salesSkuCriteriaVo.getSkuNo())
                                            && model.getSkuNo() != null) {
                                        checkRepeatData(salesSkuCriteriaVo,
                                                activityId);
                                    }
                                }
                            }
                            if (StringUtils.isNotBlank(salesSkuCriteriaVo
                                    .getDeptId())) {
                                String skuVoClassify = salesSkuCriteriaVo
                                        .getDeptId()
                                        + salesSkuCriteriaVo.getSubDeptId()
                                        + salesSkuCriteriaVo.getClassId()
                                        + salesSkuCriteriaVo.getSubClassId();
                                String skuModelClassify = nvl(model.getDeptId())
                                        + nvl(model.getSubDeptId())
                                        + nvl(model.getClassId())
                                        + nvl(model.getSubClassId());
                                if (skuType.equals(EvActivity._SKU_TYPE_CLASS)) {
                                    if (!skuVoClassify.equals(skuModelClassify)
                                            && model.getDeptId() != null) {
                                        checkRepeatData(salesSkuCriteriaVo,
                                                activityId);
                                    }
                                }
                            }
                            if (StringUtils.isNotBlank(salesSkuCriteriaVo
                                    .getBrand())) {
                                if (skuType.equals(EvActivity._SKU_TYPE_BRAND)
                                        && model.getBrand() != null) {
                                    if (!salesSkuCriteriaVo.getBrand().equals(
                                            model.getBrand())) {
                                        checkRepeatData(salesSkuCriteriaVo,
                                                activityId);
                                    }
                                }
                            }
                            salesSkuCriteria = model;
                            break;
                        }
                    }
                } else {
                    // 检核新增数据是否重复 add by Jason
                    checkRepeatData(salesSkuCriteriaVo, activityId);
                    //新增
                    salesSkuCriteria = new EvSalesSkuCriteria();
                    salesSkuCriteria.setCreateTime(sysTime);
                    salesSkuCriteria.setCreator(modifierId);
                    salesSkuCriteria.setCreatorName(modifierName);

                }
                salesSkuCriteria.setModifyTime(sysTime);
                salesSkuCriteria.setModifier(modifierId);
                salesSkuCriteria.setModifierName(modifierName);
                salesSkuCriteriaVo.mergeVoToModel(salesSkuCriteria);

                //放回 set 自動儲存
                //modify by Jason 由于在检核重复数据的时候进行查询会发出sql语句,导致activityId为空
                //这里用tempList来缓存需要更新的数据,在循环结束后一次性保存
                //entity.getEvSalesSkuCriteriaSet().add(salesSkuCriteria);
                tempList.add(salesSkuCriteria);

            }
            entity.getEvSalesSkuCriteriaSet().addAll(tempList);

            List<EvSalesSkuCriteria> list = new ArrayList<EvSalesSkuCriteria>();
            list.addAll(entity.getEvSalesSkuCriteriaSet());
            this.sortSalesSkuCriteria(list);
            int seq = 0;
            for(EvSalesSkuCriteria model : list) {
                model.setSeq(++seq);
            }
    }
时间: 2024-10-30 13:58:54

之前的实习--关于Web部分的笔记的相关文章

WEB前端学习笔记 一

最近时间比较充裕,整理了一下学习过的笔记,此篇笔记包含了:Html.Css.JavaScript.Jquery.以及使用帝国CMS或是织梦CMS建立自己的网站,也许也会整理一下PHP的笔记,如果时间允许会整理完全. 虽然笔记是从最基础的开始,但是,并不包含电脑的基础知识,所以你必须已经掌握了一些电脑的基本操作,比如开关机,你的电脑用的是什么操作系统,至少也要会用word和wps吧.浏览器是做什么的,什么拷贝.复制.粘贴.知道最基本的文件类型,如,文本文件,视频文件,图片文件,什么是可执行文件,分

web前端开发笔记(2)

web前端开发笔记(1) 一.HTML标签书写有哪些规范? 页面编码. 文档声明. 关键字与描述. 行内元素不能包含块级元素. a标签不能嵌套a标签. 标签名和属性必须用小写字母书写,属性必须加引号,标签必须闭合,单标签页必须闭合. 页面中不要用 进行缩进,如需缩进,用css控制. html标签使用必须语义化. 要为img标签填写alt和title属性. 二.HTML静态页面出现中文乱码如何解决? 引入<meta charset="UTF-8"> 三.通常情况下块属性标签和

Web前端开发笔记整理

web前端开发笔记: 1.web前端之html_day1 2.web前端之html_day2 3.web前端之css_day1

web开发学习笔记(3):HTML表格制作——table标签以及th、td、tr标签的使用例子

//纯属新手学习笔记,仅供参考. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http

web开发框架Django笔记整理

安装 python  setup.py  install 使用 1.创建工程 django-admin.py startproject Data_Collet_Center 2.运行开发server python manage.pyrunserver 0.0.0.0:8000 3.创建应用 python manage.py startapp DCC 4.配置 Data_collect_Center/settings.py 配置DB: 'ENGINE': 'django.db.backends.s

【web开发学习笔记】Structs2 Action学习笔记(一)

1.org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter准备和执行 2. <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> url-pattern约定熟成只写/*,没必要写*.action 3. <

Web框架——Django笔记

Web框架——Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django——MTV 1.创建Django程序   (注:创建前需注意配置Django环境变量,python2.7和3.5环境变量) a.命令(使用cmd命令创建) django-admin startproject mysite      创建project cd mysite python manage.py startapp app01  

【web开发学习笔记】Structs2 Action学习笔记(二)

action学习笔记2-有关于action method的讨论 Action执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法 也可以在url地址中动态指定(动态方法调用DMI)(推荐) 方法一 <struts> <constant name="struts.devMode" value="true" /> <package name="user" e

【web开发学习笔记】Structs2 Action学习笔记(三)action通配符的使用

action学习笔记3-有关于通配符的讨论 使用通配符,将配置量降到最低,不过,一定要遵守"约定优于配置"的原则. 一:前端htm <前端代码html> </head> <body> <a href="<%=context %>/actions/Studentadd">添加学生</a> <a href="<%=context %>/actions/Studentdel