ssh项目 maven+tiles的错误体会+MY…

1:

出错哈哈!!只知道web-INF中的文件不能直接访问,没想到还有这个!!

web-inf文件夹下的页面的安全性太高了,不过我喜欢,在实现页面的层次加载时候就不能使用../来记载WEB-INF以外的文件了,而需要使用<%=path%>回到根目录来加载!!但是这是不规范的写法,如下:

<link rel="stylesheet" type="text/css" href="<%=path %>/ext4/resources/css/ext-all.css" />
 <script type="text/javascript" src="<%=path %>/ext4/ext-all-debug.js"></script>
 <script type="text/javascript" src="<%=path %>/js/editgrid.js"></script>

规范的写法是:用el表达式,如果你直接说那简单,就用el表大师,来:${path}(会在page,request,session,application依次找)替换上面就是了,那就错了,因为在jsp页面中,path定义的是局部变量,是pageScope变量吗??测试后明显不是,不是的话我可以放进去嘛是吧,<% pageContext.setAttribute("path",path); %>

详见http://blog.sina.com.cn/s/blog_b98d87830101cteq.html

2:仔细总结一下hibernate等进行事务处理的方法:

1:JPA中使用的是:

需要entityManager对象来进行,怎样在业务层得到?因为我们在spring容器实例化的时候已经有entityManager了在service层中(service层分为Buyerservice接口+BuyerserviceBean实现),在serviceBean使用:@PersistenceContext EntityManager em;//得到的是代理对象
代码:
BuyerserviceBean implements Buyerservice中
e.remove(em.getReference(Buyer.class,username));//getReference对应hibernate的load
 return em.find(Buyer.class,username) ;//查找
em.persist(buyer);//保存
em.merge(buyer);//更新

2:hibernate中的sessionFactory

  SessionFactory 负责创建Session的实例。我们可以通过Configuation实例创建SessionFactory;

        Configuration config=new Configuration().configure();//  调用这个时候Hibernate会自动在当前的CLASSPATH中搜寻hibernate.cfg.xml文件并将其读取到内存作为后继操作的基础配置。

        SessionFactory sessionFactory=config.buildSessionFactory();

 Session session=sessionFactory.openSession(); //获得session

TUser user=new TUser();

   user.setName("yuanliang");

   session.save(user);

session.flush();//Session.flush方法强制数据库同步,这里既强制Hibernate将user实例立即同步到数据库中。在事物提交的时候和Session关闭的时候,也会自动执行flush方法

   

find()//这个方法返回一个List

   List list=Session.find(From TUser as tu order by tu.name asc);

Load() //这个方法返回是一个对象

   Customer c=(Customer)session.load(Customer.class,customer_id);

 

修改数据:

1. 将要修改的数据从数据库读出,赋值给表对应的持久化类

 Query query = session.createQuery("from User as u where list = query.list();
 User usr = (User)list.get(0);

2. 对得到的持久化对象进行修改
 usr.setUsername("Look");
3. 启动事务管理
   Transaction ts = session.beginTransaction();

4. 将赋值后的持久化对象提交给session
  
 session.save(usr);
5. 结束事务管理并向数据库提交
 ts.commit();

-------------------------------
public void update(){
  
  Integer Integer(2);
  Transaction ts = null;
  try {
   Session session = HibernateSessionFactory.currentSession();
   
   Query query = session.createQuery("from User as u where list = query.list();
   User usr = (User)list.get(0);
   usr.setUsername("Look");
   ts = session.beginTransaction();
   session.save(usr);
   ts.commit();
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   try {
    ts.rollback();
   } catch (HibernateException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
  }
 }

3:HibernateTemplate   (org.springframework.orm.hibernate3.HibernateTemplate)

HibernateTemplate我们一般是这样用:应该要结合spring的配置式事务。
spring + hibernate 使用spring配置式事务,
你会发觉你的代码会节省很多,而程序的管理,修改 和 扩展方面,
增强了好多。

<bean id="ht" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>注入了sessionFactory,在
HibernateTemplate   中会涉及到session吗???Session 也就是 Hibernate中一个事务操作的缓存对象,Spring封装Hibernate也就是封装对Session的操作,简化对session的操作。
SessionFactory 是Spring专门为Hibernate定制的Session工厂类,
如果我们不用Spring,直接使用Hibernate,我们则需要写一个配置文件
hibernate.cfg.xml 文件,但是既然用了spring,那么直接配置在spring bean容器中了,其中配置,数据库连接,hql的指定数据库翻译器(Dialect),java对象和数据库表的映射文件加载 等。
hibernate3 一般用的是 org.springframework.orm.hibernate3.LocalSessionFactoryBean 这个类。
HibernateTemplate 是Hibernate操作进行封装,我们只要简单的条用HibernateTemplate 对象,传入hql和参数,就获得查询接口,
至于事务的开启,关闭,都交给HibernateTemplate  对象来处理。

总之:我们使用HibernateTemplate,有一个很重要的原因就在于我们不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个SessionHibernateTemplate 是Hibernate操作进行封装,我们只要简单的条用HibernateTemplate 对象,传入hql和参数,就获得查询接口,至于事务的开启,关闭,都交给HibernateTemplate  对象来处理我们自己只专注于业务,不想去作这些重复而繁琐的操作。我们把这些责任全部委托给了 HibernateTemplate,然后使用声明式的配置来实现这样的功能。如果我们通过类似getSession()这样的方法获得了Session,那就意味着我们放弃了上面所说的一切好处。

在使用Spring的时候 DAO类继承了 HibernateDaoSupport 类又因为HibernateDaoSupport 类里面有个属性 hibernateTemplate;所以就可以进行设置注,也就是Spring的一大优点面向切面式编程,进行设置注入,在Tomcat启动的时候由 Tomcat 加载 ApplicationContext.xml,配置文件给 hibernateTemplate赋值,这样的话就实现了,在使用某个对象之前不用给他实例化

http://blog.csdn.net/qq799499343/article/details/7836473

介绍HibernateTemplate

getHibernateTemplate().save(entity);

getHibernateTemplate().update(entity);
getHibernateTemplate().delete(entity);

//删除所有
public void deleteAll(Class clazz) throws DaoException {
try {
List result = getHibernateTemplate().loadAll(clazz);
getHibernateTemplate().deleteAll(result);
} catch (DataAccessException e) {
log.error("从数据库删除 " + clazz.getName() + " 的所有记录失败", e);
throw new DaoException("从数据库删除 " + clazz.getName() + " 的所有记录失败", e);
}
}
public void deleteAll(Collection entities) throws DaoException {
try {
getHibernateTemplate().deleteAll(entities);
} catch(DataAccessException e) {
throw new DaoException(e);
}
}
查找:


public Object loadByKey(Class clazz, String keyName, Object keyValue)
throws DaoException {
try {
List result = getHibernateTemplate().find(
"from " + clazz.getName() + " where " + keyName + " = ?",
keyValue);
if (result != null && result.size() > 0) {
return result.get(0);
} else {
return null;
}
} catch (DataAccessException e) {
            throw new DaoException("加载 " + keyName + " 为 " + keyValue + " 的 "
+ clazz.getName() + " 实例失败", e);
}
}


public List loadAll(Class clazz) throws DaoException {
try {
return getHibernateTemplate().loadAll(clazz);
} catch (DataAccessException e) {
            throw new DaoException("加载所有 " + clazz.getName() + " 实例时失败", e);
}
}


public List find(String queryString) throws DaoException {
try {
return getHibernateTemplate().find(queryString);
} catch (DataAccessException e) {
            throw new DaoException("执行查询 " + queryString + " 失败", e);
}
}


public List find(String queryString, Object param) throws DaoException {
try {
return getHibernateTemplate().find(queryString, param);
} catch (DataAccessException e) {
            throw new DaoException("执行参数为 " + param + " 的查询 " + queryString
+ " 失败", e);
}
}


public List find(String queryString, Object[] params) throws DaoException {
try {
return getHibernateTemplate().find(queryString, params);
} catch (DataAccessException e) {
StringBuffer paramString = new StringBuffer("");
for (int i = 0; i < params.length; i++) {
paramString.append(params[i]);
paramString.append(" ");
}
            throw new DaoException("执行参数为 " + paramString + "的查询 "
+ queryString + " 失败", e);
}
}


public List findByNamedQuery(String queryName) throws DaoException {
try {
return getHibernateTemplate().findByNamedQuery(queryName);
} catch (DataAccessException e) {
            throw new DaoException("执行命名为 " + queryName + " 的查询失败");
}
}


public List findByNamedQuery(String queryName, Object param)
throws DaoException {
try {
return getHibernateTemplate().findByNamedQuery(queryName, param);
} catch (DataAccessException e) {
            throw new DaoException("执行参数为 " + param + " 命名为 " + queryName
+ " 的查询失败");
}
}

public List findByNameQuery(String queryName, Object[] params)
throws DaoException {
try {
return getHibernateTemplate().findByNamedQuery(queryName, params);
} catch (DataAccessException e) {
StringBuffer paramString = new StringBuffer("");
for (int i = 0; i < params.length; i++) {
paramString.append(params[i]);
paramString.append(" ");
}
            throw new DaoException("执行参数为 " + paramString + "命名为 " + queryName
+ " 的查询失败");
}
}

************************************

xxxxxxxxxxxx

原创:转载须注明作者@author:huanglei_jmr

ssim maven+tiles的错误体会
---------------------------------------
org.apache.jasper.JasperException: /layout.jsp(1,26) equal symbol expected

这句话的意思是说jsp页面异常:layout.jsp(1,26) 这个jsp页面的第一行出错!!
这里我的头写错了,头就是默认建立一个jsp的头!

-------------------------
maven构建的时候不要写servlet-apijsp-api这两个包,当然前提是使用了tomcat作为服务器
因为在tomcatlib中包含着两个东西,如果加上的话会出现异常:

-----------------------------
在使用tiles的时候,文件的头写错了很多次:
tiles-def.xml 
(最新的)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
tiles.xml 
(不是最新的但是也可以使用)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">

这两个文件中东西写都是一样的,我看到别人的项目中写是两个,其实只有一个用上了,就是放在WEB-INF

的,现在的最新命名都是使用前者!

----------------------------------------------------
*****************************************************
-----------------------------------------------------
struts2
整合titlesweb.xml文件中加上:
 <context-param> 
        <param-name>org.apache.tiles.CONTAINER_FACTORY</param-name> 
        <param-value>org.apache.struts2.tiles.StrutsTilesContainerFactory</param-value> 
    </context-param> 
    <context-param> 
        <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name> 
        <param-value>/WEB-INF/tiles.xml</param-value> 
    </context-param> 
    <listener> 
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> 
    </listener> 
struts2
自个的listerner还是要写的!其余地方没有要配的了
----------------------------------------------------
*****************************************************
-----------------------------------------------------
**
maven构建玩后要导入IDE记得修改根目录下的文件:.mymetadata.classpath;.project文件

maven建立的项目中最大的一个问题就是我未来部署在服务器中的web-inf/classes文件中的东西是不能被

实时更改的!!这是为什么,我觉得是maveninstall的时候的生成的class是放在target,而这些更改仅仅

只是发生在target/classes这个文件中(classpat中配置这个对应着src/main/java,这两个是同时实时更

新的),所以src中的目录下的class是没有被更改的,但是部署到web中去的恰好是srcwebapp下的的class

文件夹!!
.classpath
中的这两个配置完全证明我的猜想:
<classpathentry kind="output" path="src/main/webapp/WEB-INF/classes"/>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
这里我选择更改.classpath文件中的使其目录相同,<classpathentry kind="output"

path="target/classes"/>  然后再每次在ide中更改后install后就会同步更新了,
会有什么错误发生呢?不得而知,但是应该么有!

在这个文件中还有一项:
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>

这个解决:Eclipse编辑Maven2项目的时候 无法将项目中的子类项目自动导入父项目中依赖的包库Maven

Dependecy!!如果没有的话就加入,我的本来就有!

.projetc怎么修改:给参考!
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <projectDescription>
 3     <name>ssim</name>
 4     <comment>Web application</comment>
 5     <projects>
 6     </projects>
 7     <buildSpec>
 8         <buildCommand>
 9             <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
10
             <arguments>
11
             </arguments>
12
         </buildCommand>
13
         <buildCommand>
14
             <name>com.genuitec.eclipse.j2eedt.core.WebClasspathBuilder</name>
15
             <arguments>
16
             </arguments>
17
         </buildCommand>
18
         <buildCommand>
19
             <name>org.eclipse.jdt.core.javabuilder</name>
20
             <arguments>
21
             </arguments>
22
         </buildCommand>
23
         <buildCommand>
24
             <name>com.genuitec.eclipse.j2eedt.core.J2EEProjectValidator</name>
25
             <arguments>
26
             </arguments>
27
         </buildCommand>
28
         <buildCommand>
29
             

<name>com.genuitec.eclipse.j2eedt.core.DeploymentDescriptorValidator</name>
30
             <arguments>
31
             </arguments>
32
         </buildCommand>
33
         <buildCommand>
34
             <name>org.eclipse.wst.validation.validationbuilder</name>
35
             <arguments>
36
             </arguments>
37
         </buildCommand>
38
     </buildSpec>
39
     <natures>
40
         <nature>org.maven.ide.eclipse.maven2Nature</nature>
41
         <nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>
42
         <nature>org.eclipse.jdt.core.javanature</nature>
43
         <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
44
     </natures>
45
 </projectDescription>
46
 
----------------------------------------------------
*****************************************************
-----------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangleijay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值