========================================J2SE=======================================
1. 形参中有可变数组参数时,可以直接在实参中,用逗号隔开来写上多个。
如void findUniqueResult(String hql, Object[] values){}
vs.findUniqueResult("from Vocation where name=? and id=?", "保3",Long.valueOf(2));
2. 一个Object[]的数组中可以同时存放各种类型,如String ,Long
3.如果要对boolean的属性使用EL表达式,要将其isXX()方法改成,getXXX();
4.如何获取date的下一天?
先new Caledar的子类实例。
调用实例的cal.setTime(date)的方法将date转换成calendar类型.
调用cal.add(cal.DATE,1);获取当前日历的下一天
调用cal.getTime();再将calendar转换成date类型。
5.比较list集合中是否有指定对象obj出错。
问题描述:list中明明有一个对象与obj完全一样,但是调用list.contains(obj)
方法始终返回false,for遍历这个集合中的对象与obj比较,是有一个对象与obj
相等的。
错误的原因:这个obj对象重写了hashcode与equals方法,去掉就可以了。并且集合的比较要用equals。
6. set<>可以用增强for来循环输出吗?可以的,只不过输出的顺序与保存的顺序是不相同的。
========================================J2EE=======================================
1.no gramar constraints(XSD or DTD Schema) detected for the document警告
2. 在JSTL标签中使用EL表达式获取服务器传来的数据与页面数据比较时,要将页面中的数据放到${}内,放在外面不能比较。正确的写法是:${cal.id>5}
3.如何在jsp页面中获取当前action路径。
1)${request.requestURL}获取到的是跳转后的jsp的路径。
2)window.location.href是在js中获取请求路径
3)<%=request.getHeader("referer") %> 可以获得action请求的完整路径,而不是当前地址栏的路径。
只是怎么通过EL表达式来取有参数的值呢?http://localhost:8080/jshou/mng/friend_getAllUser.action
${header['Referer'] }
4) <%=basePath%>获得的是项目的路径http://localhost:8080/jshou/
====前面的错误在于获取到的并不是当前地址栏中的路径
解决方法:在action中获取到请求的uri,getRequest().getRequestURI(),再传递到页面中去。
4.
5.servlet中进行文件上传时,只能用post的方式提交类型为multi-part/form的数据。
6.文件上传格式拦截器的配置:
image/bmp,image/png,image/gif,image/jpeg
7.页面中判断集合是否为空时,不需要用fn:length ,可以用${empty list}
========================================SSH=======================================
Spring
1.beanFactory报空指针异常。
错误是因为new的Dao实例,进行调用,以至于出现Dao中注入的Sessionfactory空指针。
使用spring的注入时,要先对需要注入的对象添加声明,再注入,注入的属性要提供setter方法。
2.业务基类报空指针异常的问题:有几种可能性
1)没有为具体的业务的set方法中注入基类的属性。
2)@Autowired添加到了属性上,应该添加到get()方法上,否则父类没法注入。
3..明明已经删除的类,却报spring的注入引用为空?
--处理方法,将项目删除再重新导入就可以。至于为什么会这样,还没想到。
4. 已经打开了OSIV,还有报延迟加载异常?
--处理方法,设置lazy="false"。hibernate3的默认的lazy="true"。推测在哪加上,就在对应的这端起作用。
要想在另一端起作用,还得另外再添加。测试所得,这样也不会影响load()方法的使用。也有可能这样做只是把延迟加载关闭了, OSIV仍然没有直到作用。
5.session必须是全部纳入spring管理,openSessionInviewFilter才能起作用是这样吗?
6.使用定时任务调度器: 方法中只有一行结果,但是执行了两次,为什么?
因为配了两个定时任务调度的配置文件,二者都在做相同的事情,会互相影响。
7.缓存配置文件中的声明文档?
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
8. session管理的对象用saveOrUpdate(),脱管状态的才用update()??
9. 不能在test当中获取打开OSIV可以获取到的对象??必须经过请求才能获取??
10.Spring注入SessionFactory的空指针异常。
异常描述:自己的错误在于,new的Dao实例,进行调用,以至于出现Dao中注入的Sessionfactory空指针。
在hibernate+spring配置过程中,应注意几点:
1) 不能直接new一个DAO的实例,而应该通过spring的配置文件自动初始化session bean,然后再通过spring得到该DAO的引用,否则在调用getHibernateTemplate()时,会获得一个null的空指针异常。
2) 在DAO的sql语句中,from后面的应该是POJO bean的类名,而不是数据库的表名。
也就是说,在引入spring的ioc时,所有的bean都在里面统一管理配置。在action里获得的那个dao并不是从spring的bean管理中(applicationContext.xml)获得的,因此也就没有获得象 datasource等资源,改正办法,在action里注入dao的引用就可以了。
Spring不是执行时通过web.xml进行配置的,是在启动服务时就配好了的,所以在执行时只需调用注入进来的,如果这时候再new一个对象,是不会出错,只不过这个对象不是Spring注入进来的对象,所以在获得SessionFactory时抛出空指针。
Hibernate
1.hibernate语句正确,但是不往数据库中添加怎么回事?
1)事务没有提交!
2)hbm2ddl.auto 选项将自动生成数据库模式(schema)- 直接加入数据库中。
2.为什么user_hobby表不报没有主键的警告??因只写了单向关联,没有写双向关联。
user_hobby中为什么不报没有主键的错误,反而有两个主键。参考建表语句。是因为用的是set吗?可是这有什么关系?
--错误的原因在于primary key (user_id, hobby_id)不是指两个主键,而是指联合主键。
可能因为用的set不能有重复记录,生成了联合主键,来控制中间表的不重复。
3.org.hibernate.MappingException: Unsupported cascade style: true:有误写了cascade="true"的属性--Portrait的配置文件中
4. Location中的关联属性的名字与配置文件中不相同
5.乐观锁版本号,不可以是Long型的。因为数据库中默认的是int类型。
6.一对多关联中,如果在配置了cascade="save-update"时,就算没有set一端的引用,也会
先往多端的数据库中发起一条insert语句,再保存本身??错误的原因在于,实体关联中new了对象。
7.为什么要在一端配置cascade="delete",因为不这样做的话,当有外键引用自本条记录时,这条记录是删不掉的。
8.根据Long型的id去获取记录时,需要显示进行类型转换,否则会报错。如Long.valueOf(3)。
9. 保存一对多关系时,要先将获取到一端的对象,再去添加,这样会影响执行效率的。
--错误的原因在于使用了立即获取对象,应该用load()去延迟加载,返回代理对象Id。
10. 怎么实现多对多的关联查询??
--解决方法,不要用两个一对多,直接用
不再需要cascade了,这样delete与update、add需要自己手动去控制。
11.one-to-many lazy 默认是true,即延时加载
many-to-many lazy 默认是true,即延时加载
many-to-one lazy 默认是false,即时加载
补充一点,你的lazy之所以没有“TRUE”可以选,那是因为你的lazy应用对象是普通类型字段(String)而非集合类。
普通字段的lazy就是这样的,proxy表示用jdk动态代理实现lazy=true, no-proxy表示用cglib的类增强方式代理实现lazy=true。
,
普通字段
12. 在test类中获取load对象获取不到。
--错误的原因在于使用了已经关闭的session。要获取load对象,需要在受session管理的范围中。
13.使用多个配置文件不起作用。
错误的原因在于路径不对,不要写成. ,应该写成
14.延迟加载错误的原因在于在两个请求当中去使用了session, 只能在同一个session,OSIV为每请求分配了一个
session,只能 在同一个中去使用。如果一定要用,可以先将原来的对象变成持久化对象,懒加载上来,再去加载。
15.OSIV开启后可以级联很多个,如user.vocation.name
16. HQL中也可以通过关联对象的id来查询对象,如from Student where user_id =?(Student中的是User).
推测可能是HQL中的字段使用数据库中的和对象中的都可以,只不过,对象中的HQL会自动转成 对象.字段名,where calendar0_.start_time and user_id=?
而写成数据库字段名时会直接显示 where start_time and user_id=?
15.如何执行HQL的多表关联查询?
FORM article,type WHERE article.Article_Type = type.id"
这里type.id是你type表里面栏目的id,对应你article表里面的Article_Type。
16.如何在多表关联查询中添加条件。
1)自己写SQL语句 : from A a left join a.user b where a.id=?
17.多对多关联实现分页查询时,要注意:
1)写参数时一定要主动进行类型转换:如Long.valueOf(1)
2)注意多对多查询总记录时不能用count(*),因为多对多查询出来的结果可以是各种各样的。
18. 多对多查询的排序和分页不能同时实现???
"select friends from User as user left join user.friendList as friends where user.id=? order by friends.id desc";排
序与分页是可以同时实现的。
19.分页标签中使用组合查询时,每次点击上、下页之后就会自动变成查询所有的分页。
根据推测是跳转路径出错,解决办法 是从action中传递一个请求过来。 put2ActionContext("uri", getRequest().getRequestURI());
20.往多对多关联表的中间表中插入数据时,要用insert into rel_u2f values(2,1);直接插入;
不能指定表的字段名,否则会报引用了两个外键的错误。
21.使用组合查询要注意:
1)拼sql语句,sb="...where 1=1"
拼可变条件参数:List
26.hibernate中设置默认值:在配置文件的属性中添加 Not-Null='true'
27.组件类需要提供toString()方法来测试吗?组件的增加,删除hibernate是怎么去实现的?
28.组件映射中 class="com.jshou.friend.bean.Contact"一定要指定吗?
29.外键名的指定应该在引用端,而不是在被引用端。
30.多对多关联中,两个外键名注意不要取成一样的。
31.在POJO类中添加Hibernate的映射关系时,关联的对象的引用是不需要new出来的。
32. HQL中 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。
33. 如果有很多类中需要用到相同的方法名,可以先写一个基类,再通过重写方法来实现。
34.
注意:
not-null="true",或者使用双向关联,并标明inverse="true".
35.将好友改成密友时需要在密友_用户表中添加关联,还要在好友_用户中移除关联。
36.组件映射:组件元素的非空问题??
37.写实体类时最好先写普通属性,重写完hashCode(),equals(),toString()方法之后再添加关联属性。
38. 级联保存数据的时候,为什么多对多的set中,调用了user.setHobbySet(hobbySet)只会保存set中的第一行数据?
39.多对多中间表的删除需要那么复杂吗?
40. 对多对多关联的维护,设置了inverse之后,就只能对中间类进行维护,而不能只维护一端了吗?
41.当有互相关联的时候,初始化数据的先后顺序是怎么样的?只能通过更改去实现是吗?
42.有一个查询中,如果不输入分类,就会出错,需要添加条件判断一下。
Struts
1.struts2中怎么配置从一个action跳转到另一个action?
@Result(name="postSucc", location="/bbs/topic.htm?id=${id}", type="redirect")}
2.struts配置的action中有包名时,配置说The requested resource (/jshou/mng/remind/list.action) is not available.
错误的原因在于没有在Action前面加上spring的注解。
3.关于struts2的配置。namespace有开始/ ,没有结束/, action中没有前后/
4. 使用struts2时,如果JSP页面中有date类型的字段,那么需要添加日期转换器,否则容易出现找不到action的错误。
5.struts2的两个action之间怎么传递参数?
直接用OGNL表达式,在action的路径后面加上?id=${#id} ?这里一定要加#吗?
6.Struts has detected an unhandled exception:
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
错误导致HQL语句的参数设置不上,原因在于参数的类型不匹配,比如用的id为Long型的。
设置参数时设置成setParam(0,1)这样就会报上面的异常。还有hql的参数下标是从0开始的。
7.执行到action,但是返回时总不跳转指定的result页面,并且参数也获取不到。 传递参数时少写了$,应该写成id=${id}
8. struts2中自己写验证时要注意:
1) 继承自ActionSupport类
2)命名规则:validate+方法名首字母大写 :如 void validateAdd(){}
3)通过this.addFieldError("msg","错误信息提示");来阻止继续访问
5)在页面中通过
4)要为这个方法在struts配文件中置input参数
9. struts2中用拦截器来进行验证
10. struts2中用验证框架来验证
11. struts2中用过滤器来验证
12.更改密码时不起作用,其它都对。
原因:set的密码应该是原密码,而要修改的应该是新密码,这里容易混淆。
13. struts中动态显示下拉框中的内容
原因在于不是在input元素当中,不能自动提交并获取,只有通过参数传递。
15.struts2中的Token的使用方法?
1)在form表单之前添加
2)在struts2的配置文件中添加token拦截器的配置,单独的name="token"的action。
3)配置正确,拦截器却不起作用???
原因在于,拦截器的action要放在其它action之前。
16.当路径正确,在地址栏中直接输入可以跳转到action里面的方法,通过form不进Action时,检查js与form元素的属性。
17.ActionContxt类中的getContext()中的put方法是怎么回事???
18.struts2中可以用级联级联再级联来获取对象: 比如:user.vocation.id,Action类中就可以通过user.getVocation().getId()来获取
19.action配置文件中传递多个参数时,不有&隔开,用;隔开。
20.使用token有一个前提,就是表单必须使用html:form标签来完成。另外struts2是用拦截器来实现的。
21.struts2中实现去掉后缀及url重写的方法。考虑:页面中的form直接用struts标签可以吗?
22.当时是因为什么原因,要用uri来传递分页中的地址。现在进行一对多查询时会报错???但是突然又不报错了??报错的原因在于将参数uri写成了url。
23.Struts2中的使用OSIV加载配置文件时,要将hibernate..OSIV,改成hibernate3.。
24. 为什么FriendAction中没有添加Spring的注解也可以运行??到底在Action中添加注解是做什么用的? 并没有地方需要通过注解来调用到Action???
25.如何防止表单的重复提交? Token
========================================Server=======================================
========================================数据库=======================================
1. mysql> select * from rel_u2f; ERROR 1064 (42000)
-- 错误的原因在于sql语句中有空格,去掉空格即可。
2. 数据库的命令行出现中文乱码的问题?
3.SQL中的中文不能按照首字母的顺序来排序,是按一种树的顺序来排列的。
sql2005 中:collate Chinese_PRC_CI_AS ,Chinese_PRC是按照中文排序。
参考http://wenku.baidu.com/view/caf98a254b35eefdc8d3332d.html
4. between 包上不包下,也就是说,前面的你需要减一天,而后面的保持不变
比如要查询8号的,你就该查询 between 7 and 8
5.create table emp_his as select * from emp where 1!=1;
这是创建一个和EMP表的备份表但它只有EMP表的结构里面的数据为空:
create table emp_his as select * from emp where 1=1;
这才是创建EMP表的备份表
9.hibernate中执行批量更新:
String hqlupdate="update User set name=:newName";
int updateEntities=session.createQuery(hqlupdate)
.setString("newName", "我不是一个人")
.executeUpdate();
6.mysql中如何计算时间差?
SELECT TIMESTAMPDIFF(MINUTE, '2010-04-23 17:53:38', '2010-04-22 15:49:43');
7.mysql计算时间差?格式化时间?
from Calendar where TIMESTAMPDIFF(MINUTE,'" + temp+ "',startTime)<0
temp表示的是当前时间,这句hql语句指查询出大于当前时间的日程。
8.state为int类型,如果添加时不指定,保存到数据库中的是0还是null?--数据库默认值问题。
9.表中字段没有添加not null,unique约束。
10.表中哪些字段需要设定初始值。
11.保存到数据库中的date的类型没有指定。timestamp???
12.并不是所有的数据库中取出来的数据都需要单独添加超链接去查看,可以在存储数据的时候就写好。 如content='好友'
========================================IDE工具=======================================
1.项目可以在MyEclipse中启动,但是直接打成.war包在Tomcat下启动有问题。
错误的原因可能是.war包打得不对。
目前有个很笨的解决方法:先在MyEclipse中部署项目,启动后关闭MyEclipse,然后将带有项目的Tomcat整个文件复制到其它电脑上用就可以了。
另外,项目不可以放到tomcat6.0.26与24下,这两个版本有一个关于ThreadLocal的bug,使用稳定的tomcat6.0.20比较好。
这个问题可能跟用的jar包的版本出错,或者是项目部署有问题,或者是跟打.war包的方法不对,或者是少了jar包。也有可能跟tomcat目录的绝对路径有关系。
2.项目运行时可以正常运行,但是发布到服务器上时就找不到路径?
错误的原因:项目中用到的所有路径,最好都不要直接写出来,而是直接通过contextPath去获取。
3.项目部署问题:
1.将编译好的工作空间中项目下的WebRoot包全复制到Tomcat中的webapps下;
2.将所有的jar包复制到WebRoot下的lib包中;注意JDK1.5开发的要加JSTL包。
3.将WebRoot改成项目名。
4.运行bin下的start.bat直接访问就可以了。
注意:WebRoot下要有编译好的classes文件。\
========================================其它=======================================
1.写项目时要多注意添加判断条件。否则容易出错。
2.log4j的配置,只对框架起作用,对自己的项目不起作用?
原因:导包错了。
应该导入:import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
错误在于:导了sun的包
//import com.sun.org.apache.commons.logging.Log;
//import com.sun.org.apache.commons.logging.LogFactory;
3.加密公开这个问题。
4.权限管理。