1、此系统,没有包含java文件只是包含了一些类文件,也就是没有src包。利用原来的 java反编译工具,就是不能够生成java文件,尝试了多次都不能实现,这时我想到了下载一个新的的反编译工具:下载了一个JD-GUI只能对单个文件进行反编译,不支持目录级别的反编译,抱着试试看的态度下载了XJAD,这个工具果然好用,实现了反编译功能。
这时我把原有的.hbm.xml文件与生成的java文件一起合并生成 src。
2、新建一个web工程oa,把第一步生成的src文件夹替换空的文件夹src。
3、把剩余的一些jsp相关以及一些文件夹放置到 webroot下面。
4、myeclipse-add struts capabilities
5、 myeclipse -add hibernate capabilities,增加后,需要修改:hibernate.cfg.xml 中数据库的名称。
6、由于我选择的是jtds,这个数据库驱动在以前的工程中配置过,查看 build path-configure build path 中已经对jtds驱动做了配置。
7、这时可以发布程序了,发布后,在浏览器里面登陆,发现报错(GetHibernate.java):
Configuration conf = (new Configuration()).addClass(com/hiernate/persistence/User).addClass(com/hiernate/persistence/Menu).addClass(com/hiernate/persistence/Meeting).addClass(com/hiernate/persistence/Placard).addClass(com/hiernate/persistence/Waichu).addClass(com/hiernate/persistence/Qingjia).addClass(com/hiernate/persistence/Chuchai).addClass(com/hiernate/persistence/Onduty).addClass(com/hiernate/persistence/Qiye).addClass(com/hiernate/persistence/Bm).addClass(com/hiernate/persistence/Person).addClass(com/hiernate/persistence/Shenhe).addClass(com/hiernate/persistence/TongXunAdd).addClass(com/hiernate/persistence/Tongxun);
这句话报错:
通过查看原有的webole项目里面的书写方式:修改为如下形式问题解决。
Configuration conf = (new Configuration()).addClass(com.hiernate.persistence.User.class).addClass(com.hiernate.persistence.Menu.class).addClass(com.hiernate.persistence.Meeting.class).addClass(com.hiernate.persistence.Placard.class).addClass(com.hiernate.persistence.Waichu.class).addClass(com.hiernate.persistence.Qingjia.class).addClass(com.hiernate.persistence.Chuchai.class).addClass(com.hiernate.persistence.Onduty.class).addClass(com.hiernate.persistence.Qiye.class).addClass(com.hiernate.persistence.Bm.class).addClass(com.hiernate.persistence.Person.class).addClass(com.hiernate.persistence.Shenhe.class).addClass(com.hiernate.persistence.TongXunAdd.class).addClass(com.hiernate.persistence.Tongxun.class);
8、这时可以正常查看了,但是再点击查看通信录的时候仍然报错:
java.lang.Long cannot be cast to java.lang.Integer
类型转换的错误:
解决方法:在tongxun_index.jsp里面修改如下:
Integer intename1 =new Integer(((Long)listTx.get(k)).intValue());
原有书写方式是: Integer intname1=(Integer)listTx.get(k);
通过修改后,问题已经解决。
9、
hibernate.proties
session管理类 GetHibernate,获得Session,打开,关闭
如果Hibernate的配置文件为XML格式,只需在配置文件中声明映射文件,在程序中不必调用Configuration类的addClass方法来
加载映射文件。代码如下:
SessionFactory sf= new Configureation().configure().buildSessionFactory()
需要搞清楚到底怎么回事??
----------------------------------------------------------------------------------------------------------------------------------------------------
Hibernate有两种配置文件格式
Hibernate有两种配置文件格式,一种是XML,默认为hibernate.cfg.xml,一种是properties,默认为hibernate.properties
不同的配置文件,对Hibernate的初始化方法是不一样的。
1. 如果采用properties文件作为配置文件
那么初始化的代码大致为:
Configuration config = new Configuration();
config.addClass(myclass.class);
2. 如果配置文件为XML,则
Configuration config = new Configuration().config();
XML文件格式的配置文件不支持addClass方法!
这是因为在配置文件XML文件中,已经定义了Mapping文 件,因此就不需要在用编码方式导入POJO文件了。
很多朋友不知道两者的区别,我在这里详细说说吧。
如果是使用hibernate.properties作为配置文件的话,配置文件的内容大概是这样的:
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/work
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
而我们想用hibernate.cfg.xml的话,内容大概是这样的:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/work</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<mapping resource="bean/Note.hbm.xml"/>
<mapping resource="bean/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
大家有没有发现什么不同的地方呢?对了,以hibernate.properties配置的话,没有配置被映射的类 。那hibernate不能在hibernate.properties中知道需要映射的类,在哪里我们能让它知道呢?答案就在源文件里了。
当我们使用hibernate.properties作为配置文件的时候,我们的源文件中需要这样构造一个config:
Configuration config = new Configuration();
config.addClass(User.class).addClass(Note.class);
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
这里的config我们必须调用addClass()方法,这就是我们使hibernate知道映射类的地方了。当然使用hibernate.cfg.xml来配置的话,我们就可以这样写:
Configuration config = new Configuration();
SessionFactory sf = config.configure("/hibernate.cfg.xml").buildSessionFactory();
//这里调用了configure()方法来指定hibernate.cfg.xml的位置
Session session = sf.openSession();
我们就不用再配置需要映射的类了,重复配置的话会出现重复映射异常。
总之,我们要使用两种方法其中一种就行了,就是说如果hibernate.cfg.xml中没有说明映射关系的话,在源文件中使用addClass()方法就可以了,但不能重复!。
另外,在hibernate的启动过程中,会先找hibernate.properties,然后读取hibernate.cfg.xml,后者会覆盖前者相同的属
-- --------------------------------------------------------------------------------------------------------------------------------------------------
Filter类 javax.servelet doFilter(),对中文字符进行处理
request .setChar
10、重新发布oa,可以看到控制台出现了如下的警告信息:“log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
log4j:WARN Please initialize the log4j system properly.
”
网上查找答案:
这个只是 警告,不是错误。你只是没有配置 log4j.properties文件。不用管他。