项目开发中遇到的问题

========================================J2SE=======================================html

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来循环输出吗?能够的,只不过输出的顺序与保存的顺序是不相同的。java

========================================J2EE=======================================mysql

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(),再传递到页面中去。web

4.<c:if test="${2>1}  ">123</c:if>表达式写正确了,可是结果不正确怎么回事??错误的缘由在于test属性值的EL表达式后面多了空格,去掉就能够了。
5.servlet中进行文件上传时,只能用post的方式提交类型为multi-part/form的数据。spring


6.文件上传格式拦截器的配置:
   <interceptor-ref name ="fileUpload">
           <param name ="allowedTypes">
               image/bmp,image/png,image/gif,image/jpeg
           </param >
      </interceptor-ref >
 7.页面中判断集合是否为空时,不须要用fn:length ,能够用${empty list}sql

========================================SSH=======================================数据库

Springapache

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.缓存配置文件中的声明文档?
 <!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 <ehcache>

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. 怎么实现多对多的关联查询??
--解决方法,不要用两个一对多,直接用<many-to-many>,这样就只在其中一端配置inverse,
再也不须要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。

<set>, <list>, <bag>等映射标签上的属性lazy最多见,就是lazy=true/false。

<class>上的lazy则是对该类内全部集合映射的一个统一开关。

 普通字段<property>上的lazy则必须经过动态代理实现,也就是上面说到的proxy/non-proxy,通常来讲二者差很少,看你喜欢哪样了,cglib 的代理是经过修改*.class字节码实现的。

 12. 在test类中获取load对象获取不到。
--错误的缘由在于使用了已经关闭的session。要获取load对象,须要在受session管理的范围中。

 13.使用多个配置文件不起做用。
错误的缘由在于路径不对,不要写成.   ,应该写成<include file="com/jshou/user/web/action/user.xml"/>。
 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<Object> parms;
 2)追加sb.append(" and name like ?")//注意这里的空格
  追加条件参数:params.add("%"+name+"%");
  //参数必定要处理好,记得加"%",不然查不到结果
 3)查询时将参数转换,sb.toString(),params.toArray();
22. moveService已经添加自动注入,而且提供了getter/setter方法,执行到userService时报空指针异常。
 缘由:建立表时外键名与原有的重复,没建立上。
 另外一个重要的缘由是没在set方法中添加setBaseDao。
23.有一个已知对象user,是从session中取到的,若是要用user的普通属性直接
 调用如user.getName()就能够了,可是若是要用到user中的集合属性,好比说
 user.getFriendList(),则须要先调用userService.load(user.getId())为这个user开启一个session才能使用。
24.Caused by: org.hibernate.QueryParameterException: Position beyond number
   of declared ordinal parameters. Remember that ordinal parameters are
   1-based! Position: 1
   问题:多了hql参数
25.Hibernate会将解释不了的hql语句,原封不动地转成sql语句,因此sql语句中能用的语句在hql中都是可使用的。


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. <set name="class">
        <key column="f_id"/>
        <one-to-many class="Bar"/>
    </set>
    注意:<one-to-many元素不须要定义任何字段,也不须要指定表名。
    重要提示:若是一对多关联中的外键字段定义成not null,你改为把<key>映射声明成
    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)在页面中经过<s:fieldError fieldName="msg"/>来获取
 4)要为这个方法在struts配文件中置input参数
9. struts2中用拦截器来进行验证
10. struts2中用验证框架来验证


11. struts2中用过滤器来验证
12.更改密码时不起做用,其它都对。
 缘由:set的密码应该是原密码,而要修改的应该是新密码,这里容易混淆。
13. struts中动态显示下拉框中的内容  <html:select ....
   <auth:optionsCollection name="..." 能够经过if/else标签来判断,if中的表达式能够用函数来比较两个对象。多出来的问题:EL中有equals方法吗?显然没有。
14.Action中获取不到页面中传递过来的隐藏表单域的值??
缘由在于<input>不是在input元素当中,不能自动提交并获取,只有经过参数传递。
15.struts2中的Token的使用方法?
 1)在form表单以前添加<s: token />;
 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='<a href=..>好友</a>'

========================================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.权限管理。