发布时间 : 星期五 文章struts2+hibernate实战笔记更新完毕开始阅读45c3dc30ee06eff9aef80709
笔记是本人长期的总结,仅供学习使用,任何商业用途请注明 版权:大麦推荐网 网址:http://www.damai582.com ------------------------------------------------------------ Struts知识:
strut里没有servlet 全部是java类
return返回的字符串可以为其他,但返回来的和配置文件的要一致。
jsp表示层 struct业务逻辑层 hibernate持久化层 数据库层
struct的作用是把请求跟视图分离开。
jsp里传过来的数据都是string类型,因此在servlet里要进行类型转换,但struts对日期类型可以自动 转换。
如果是servlet转发到jsp时,浏览器显示的是servlet的映射路径,转发的数据,在页面刷新会增加该数据
因为页面每次刷新,都会请求转发该数据,因此要适当设置为跳转。
strut获取Httprequest Httpresponse等的方法:
HttpServletRequest request = ServletActionContext.getRequest();
onclick=\后退的js代码
namespace决定了action的访问路径,默认为\可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/indx.action /xxx/index.action,或者/xxx/yyy/index.action
namespace最好也用模块来进行命名,当namespace为空,所有的/url/index.action都可以访问指定的action
struct先找有设置namespace的package,然后在找没设置改属性的package
拷贝项目时,除了要修改项目名,还要在properties里的myeclipse的web的web Context-root修改为更新后的项目名。 struct每次请求action时都会创建一个新的action,不会出现每个用户共享action的问题 当配置文件没有在action里指定class时,会默认执行ActionSupport这个action struts应该尽量使用动态调用方法,这样可以省很多配置代码,动态调用方法为(action名! 方法名) 如:person!add 使用通配符可以使配置降到最少*→{1} DomainModel域模型即javabean类 struct不用new一个javabean类,会自动帮你new 用了泛型之后就不能强制转换 路径问题: index.jsp是相对路径,同个文件夹下的jsp可以互相通过xxx.jsp访问 在jsp里面\代表整个tomcat的跟路径,如访问这个链接href=\, 则就是访问http://loaclhsot:8080/index.jsp 因此需要在jsp里面加入下面的代码: <% String path = request.getContextPath(); String basePath = request.getScheme()+\获取的路径为:http://loaclhsot:8080/工程名/ %> 上面的代码后,使用超链接写相对路径即可) struts2中的路径问题是根据action的路径而不是jsp路径来确定,所有尽量不要使用相对路径 解决的办法统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp(工程名)的路径) 或者使用myeclipse经常用得,指定basePath,就可以用相对路径了 ----------------------------------------------------------------------------------------------------------- 笔记是本人长期的总结,仅供学习使用,任何商业用途请注明 版权:大麦推荐网 网址:http://www.damai582.com Hibernate知识: 放在静态代码块里的代码是在类还没执行,被加载的时候就会先执行,在内存开辟空间,而且只执行一次, 因为SessionFactory只要创建一个就够了,在静态代码块程序就会只执行一次,因此达到只创建一个SessionFactory 当我们操作对象的时候,hibernate就会读取映射文件来使表之间有机的关联起来 单向关联:一的这一方能获得多的那一方,而多的那一方没法获得一的这一方 双向关联:双方都能获得对方的对象 一对多默认是延迟加载,当多的那一方在session关闭前没有被调用/使用时,hibernate是不会执行联级的 hibernate操作的是javabean对象,通过对象关系映射文件将其关联到数据表,然后hibernate再自动生成sql语句,将对象 插入到表中 new后变成临时状态 sava后变成持久化状态 close后变成游离状态 hibernate思路:对javabean进行操作设置,然后调用session.save()等方法,再通过配置文件的对象关系映射,把数据存到数据库 Date类型对应数据库的DateTime 连接数据库: class.forname(\数据库驱动名\; Connection conn=DriverManager.getConnection(\); String sql=\ PreparedStatement ps=conn.prepareStatement(sql);(区分PreparedStatement 与prepareStatement) ResultSet rs=ps.executeQuery();(执行查询) if(rs.next()) { 输出查询 } ps.executeUpdate();(执行增删改) conn.close(); ?表示预编译,哪个数字就sql里对应那个字段 关系数据库里用外键表示一对多的参照关系,而多对多关系,需要借助一个关系表来实现。 使用代理主键机制,代理主键不能有业务含义,不会被改变。 数据库里面的记录是字段,一旦通过程序加载到内存就变成对象 hibernate通过ORM文件的映射实现对数据库层与业务逻辑层的持久化操作,ORM是对象-关系映射, 把sql的代码与实现业务逻辑的代码分离开。 hibernate配置文件:hibernate.cfg.xml ORM映射文件:类名.hbm.xml web应用程序跟java应用程序都可以使用hibernate的持久化 MVC模式(model view controller) DAO模式(data access object) 一个持久化类(即javabean)和一个表对应,类的每个实例对应表中的一条记录。 域模型有继承,有多对多关联关系,双向关联关系。关系模型不能直接表示继承关系,通过连接表来表示多对 多关联关系,只有单项参照关系,而且总是many方参照one方 实体域模型是一个javabean类,在业务逻辑层,关系数据模型是一个数据表,在数据库层。 hibernate.cfg.xml是hibernate的主配置文件,放在src下;struct.xml也是在src下 类名.hbm.xml是hibernate的对象关系映射文件,hbm类的xml文件是javabean类和数据表建立映射的桥梁。 java的实体类是通过配置文件与数据表中的字段相关联。hibernate在运行时解析配置文件,根据其中的字段 生成相应的SQL语句,将该文件存放在src目录下。 同一目录下直接可以用相对位置来引用文件。 静态代码是java类一运行就会被加载到内存,从头到尾只运行一次,运用于sessionFactory里