新人求教,SSH整合使用getHibernateTemplate()方法老是报错,找了好几天了,我就有这么点分数了

zw0283 2015-01-31 01:28:25
我就做的一个bbs的登陆功能,总是报错啊
是不是我的applicationContext.xml文件配置有问题啊。。我最近新学的,还不太明白
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=BBS"></property>
<property name="username" value="sa"></property>
<property name="password" value="sa"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/bbs/po/BoardManagerTable.hbm.xml</value>
<value>com/bbs/po/BoardType.hbm.xml</value>
<value>com/bbs/po/CommentTable.hbm.xml</value>
<value>com/bbs/po/InvitationTable.hbm.xml</value>
<value>com/bbs/po/ManagerTable.hbm.xml</value>
<value>com/bbs/po/UserInfoTable.hbm.xml</value>
</list>
</property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
<property name="allowCreate">
<value>true</value>
</property>
</bean>

<bean id="userInfoDao" class="com.bbs.dao.UserInfoDaoImpl" scope="singleton">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<bean id="userLoginService" class="com.bbs.service.userLoginService">
<property name="uiDao" ref="userInfoDao"></property>
</bean>

<bean id="UserLoginAction" class="com.bbs.action.UserLoginAction" scope="prototype">
<property name="uesrLogSer" ref="userLoginService"></property>
</bean>

</beans>

这是我的Action
package com.bbs.action;

import com.bbs.service.userLoginService;
import com.opensymphony.xwork2.ActionSupport;

public class UserLoginAction extends ActionSupport
{
private static final long serialVersionUID = 1L;

String userNick,userPassword;

userLoginService uesrLogSer = new userLoginService();

public String getUserNick()
{
return userNick;
}

public void setUserNick(String userNick)
{
this.userNick = userNick;
}

public String getUserPassword()
{
return userPassword;
}

public void setUserPassword(String userPassword)
{
this.userPassword = userPassword;
}

public String execute() throws Exception
{
boolean isReally = uesrLogSer.checkUser(this.userNick, this.userPassword);
//判断密码是否正确
if(isReally)
{
return SUCCESS;
}
else
{
return INPUT;
}
}
}


这是service
package com.bbs.service;

import java.util.List;

import com.bbs.dao.UserInfoDaoImpl;
import com.bbs.po.UserInfoTable;
import com.bbs.serviceIntf.userLoginServiceIntf;

public class userLoginService implements userLoginServiceIntf
{
UserInfoDaoImpl uiDao;

public UserInfoDaoImpl getUiDao()
{
return uiDao;
}

public void setUiDao(UserInfoDaoImpl uiDao)
{
this.uiDao = uiDao;
}

public List<UserInfoTable> findOneUserInfoByNick(String userNick)
{
return this.uiDao.findOneUserInfoByNick(userNick);
}

public boolean checkUser(String userNick, String userPassword)
{
boolean isReally = false;
List<UserInfoTable> uiList = this.findOneUserInfoByNick(userNick);
for(int i=0;i<uiList.size();i++)
{
UserInfoTable ui = (UserInfoTable) uiList.get(i);
if(ui.getUserPassword().equals(userPassword))
{
isReally = true;
}
}
return isReally;
}
}


这是dao
package com.bbs.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bbs.daoIntf.UserInfoDaoIntf;
import com.bbs.po.UserInfoTable;

public class UserInfoDaoImpl extends HibernateDaoSupport implements UserInfoDaoIntf
{

public void deleteUserInfo(UserInfoTable userInfo)
{
this.getHibernateTemplate().delete(userInfo);
}

@SuppressWarnings("unchecked")
public List<UserInfoTable> findAllUserInfo()
{
String HQL = "from UserInfoTable ui order by ui.userId desc";
List<UserInfoTable> allUserInfo = (List<UserInfoTable>)this.getHibernateTemplate().find(HQL);
return allUserInfo;
}

@SuppressWarnings("unchecked")
public List<UserInfoTable> findOneUserInfoByNick(String userNick)
{
return (List<UserInfoTable>)this.getHibernateTemplate().find("from UserInfoTable uit where uit.userNick=?",userNick);
}

public void saveUserInfo(UserInfoTable userInfo)
{
this.getHibernateTemplate().save(userInfo);
}

public void updataUserInfo(UserInfoTable userInfo)
{
this.getHibernateTemplate().update(userInfo);
}

}


请问哪里有问题啊。。。。我都要崩溃了
...全文
258 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw0283 2015-01-31
  • 打赏
  • 举报
回复
引用 5 楼 ahhmdwg 的回复:
兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
问题解决了,谢谢你啊
zw0283 2015-01-31
  • 打赏
  • 举报
回复
我去。。。终于对了。。。折腾死我了。 原因是因为Struts2和Spring整合的时候,Struts.xml文件里 <action>配置中name不变,原来的class写的是路径+类名,整合之后不能这么写了,Struts.xml action的class里要写在applicationContext.xml文件里对应的action的id。 总之,报错是空指针,但是问题的源头在Struts.xml文件里。
小生--幻 2015-01-31
  • 打赏
  • 举报
回复
要把sessionFactory注入org.springframework.orm.hibernate3.support.HibernateDaoSupport类中
zw0283 2015-01-31
  • 打赏
  • 举报
回复
我在action里实例化uesrLogSer,应该怎么实例化啊(这个uesrLogSer是userLoginService类的对象) 是不是

userLoginService uesrLogSer;
public userLoginService getUesrLogSer() 
{
    return uesrLogSer;
}
 
public void setUesrLogSer(userLoginService uesrLogSer) 
{
    this.uesrLogSer = uesrLogSer;
}
是不是这样啊,还是要用

userLoginService uesrLogSer = new userLoginService ();
zw0283 2015-01-31
  • 打赏
  • 举报
回复
对了,我刚刚在MyEclipse中,按着control然后点HibernateDaoSupport ,应该能看见这个HibernateDaoSupport 的代码,可是却出现了这个 是不是这个类出问题了。但是我在
引用 11 楼 ahhmdwg 的回复:
[quote=引用 9 楼 zw0283 的回复:] [quote=引用 5 楼 ahhmdwg 的回复:] 兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
我在数据库定义的是user_nick,这个po对象是用MyEclipse的反向工程生成的,它自己变成的userNick,这个可以么。。还是名字要完全一样啊。。 我的.hbm.xml是这样的 <property name="userNick" type="java.lang.String"> <column name="user_nick" length="20" /> </property>[/quote] 这样: String sql="from UserInfoTable u where u.user_nick='"+userNick+"'"; List<UserInfoTable > list = this.getHibernateTemplate().find(sql); return list [/quote] 额。。。这个,我发现好像不是语句的问题,因为我刚刚做了一个测试,把action里的execute替换成了这样
public String execute() throws Exception
{
            uesrLogSer.test();
            return SUCCESS;
}
这个test方法是这样的

public void test()
{
	System.out.println("12345");
}
还报这个错误,这个uesrLogSer,我在action是这样定义的

userLoginService uesrLogSer;
public userLoginService getUesrLogSer() 
{
	return uesrLogSer;
}

public void setUesrLogSer(userLoginService uesrLogSer) 
{
	this.uesrLogSer = uesrLogSer;
}
我在想是不是这个uesrLogSer对象就是null,我一直在调用一个null对象,所以报错啊 如果uesrLogSer没有初始化成功,是不是因为我的xml文件有错啊
ahhmdwg 2015-01-31
  • 打赏
  • 举报
回复
引用 9 楼 zw0283 的回复:
[quote=引用 5 楼 ahhmdwg 的回复:] 兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
我在数据库定义的是user_nick,这个po对象是用MyEclipse的反向工程生成的,它自己变成的userNick,这个可以么。。还是名字要完全一样啊。。 我的.hbm.xml是这样的 <property name="userNick" type="java.lang.String"> <column name="user_nick" length="20" /> </property>[/quote] 这样: String sql="from UserInfoTable u where u.user_nick='"+userNick+"'"; List<UserInfoTable > list = this.getHibernateTemplate().find(sql); return list
ahhmdwg 2015-01-31
  • 打赏
  • 举报
回复
sql语句里必须与数据库字段一致啊
zw0283 2015-01-31
  • 打赏
  • 举报
回复
引用 5 楼 ahhmdwg 的回复:
兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
我在数据库定义的是user_nick,这个po对象是用MyEclipse的反向工程生成的,它自己变成的userNick,这个可以么。。还是名字要完全一样啊。。 我的.hbm.xml是这样的 <property name="userNick" type="java.lang.String"> <column name="user_nick" length="20" /> </property>
zw0283 2015-01-31
  • 打赏
  • 举报
回复
引用 6 楼 qq_21525397 的回复:
NullPointerException说的是你调用了一个null对象的方法,我认为你的this.getHibernateTemplate()得到的是一个null对象,所以才会报错。 使用这个方法的前提是你的类必须继承HibernateDaoSupport
我照着楼上的大哥改了一下,还是有错误。我的dao类继承了HibernateDaoSupport了,是不是我在注入对象的时候有问题啊,这个可以检验么。。问题可能比较弱智,不要介意啊,我刚刚接触这个
zw0283 2015-01-31
  • 打赏
  • 举报
回复
引用 5 楼 ahhmdwg 的回复:
兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
我照着你这个改正了,可是还是这个错误。。是不是因为我一开始注入bean的时候配置文件错了啊,还是初始化什么的。。。或者就是我对象没有初始化用的null对象调用的这个方法啊。。 我最近才学的这个,问题可能比较弱智,不要介意啊
小生--幻 2015-01-31
  • 打赏
  • 举报
回复
NullPointerException说的是你调用了一个null对象的方法,我认为你的this.getHibernateTemplate()得到的是一个null对象,所以才会报错。 使用这个方法的前提是你的类必须继承HibernateDaoSupport
ahhmdwg 2015-01-31
  • 打赏
  • 举报
回复
兄弟错误提示已经告诉你了是findOneUserInfoByNick函数造成的,个人认为应该这样: 1.findOneUserInfoByNick函数是验证登陆的为什么返回的是list,匹配成功不应该是一个人么 应该返回对象啊?(返回list也可以姑且不研究) 2.返回list应该这样写:
		String sql="from UserInfoTable u where u.userNick='"+userNick+"'";
		List<UserInfoTable > list = this.getHibernateTemplate().find(sql);
               return list
看看你的userNick符合数据库定义字段么 名称不能错 这么写肯定没错,要是出现其他问题在另行解决。。 如果反回的是UserInfoTable 对象应该是像你那样写也就是
UserInfoTable user = (UserInfoTable ) this.getHibernateTemplate().get(UserInfoTable .class, id);
		return user;
zw0283 2015-01-31
  • 打赏
  • 举报
回复
救救我啊。。。
zw0283 2015-01-31
  • 打赏
  • 举报
回复
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619)
zw0283 2015-01-31
  • 打赏
  • 举报
回复
2015-1-31 13:37:20 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet default threw exception java.lang.NullPointerException at com.bbs.service.userLoginService.findOneUserInfoByNick(userLoginService.java:25) at com.bbs.service.userLoginService.checkUser(userLoginService.java:31) at com.bbs.action.UserLoginAction.execute(UserLoginAction.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
枫醉秋 2015-01-31
  • 打赏
  • 举报
回复
错误贴出来看看
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。 文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。 先说web.xml配置: [java] view plaincopy 01.<?xml version="1.0" encoding="UTF-8"?> 02. 03. s3h3 04. 05. contextConfigLocation 06. classpath:applicationContext*.xml 07. 08. 09. org.springframework.web.context.ContextLoaderListener 10. 11. 12. 13. spring 14. org.springframework.web.servlet.DispatcherServlet 15. 1 16. 17. 18. spring <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来配置它的controller --> 19. *.do 20. 21. 22. index.jsp 23. 24. spring-servlet,主要配置controller的信息 [java] view plaincopy 01.<?xml version="1.0" encoding="UTF-8"?> 02. 09. 10. 11. <!-- 把标记了@Controller注解的类转换为bean --> 12. 13. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> 14. 15. 16. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> 17. 19. 20. 23. applicationContext.xml代码 [java] view plaincopy 01.<?xml version="1.0" encoding="UTF-8"?> 02. 11. 12. 13. <!-- 自动扫描所有注解该路径 --> 14. 15. 16. 17. 19. 20. 21. 22. ${dataSource.dialect} 23. ${dataSource.hbm2ddl.auto} 24. update 25. 26. 27. 28. 29. com.mvc.entity<!-- 扫描实体类,也就是平时所说的model --> 30. 31. 32. 33. 34. 36. 37. 38. 39. 40. 42. 43. 44. 45. 46. 47. <!-- Dao的实现 --> 48. 49. 50. 51. 52. 53. 54. 55. hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02.dataSource.username=root 03.dataSource.databaseName=test 04.dataSource.driverClassName=com.mysql.jdbc.Driver 05.dataSource.dialect=org.hibernate.dialect.MySQL5Dialect 06.dataSource.serverName=localhost:3306 07.dataSource.url=jdbc:mysql://localhost:3306/test 08.dataSource.properties=user=${dataSource.username};databaseName=${dataSource.databaseName};serverName=${dataSource.serverName};password=${dataSource.password} 09.dataSource.hbm2ddl.auto=update 配置已经完成,下面开始例子 先在数据库建表,例子用的是mysql数据库 [java] view plaincopy 01.CREATE TABLE `test`.`student` ( 02. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 03. `name` varchar(45) NOT NULL, 04. `psw` varchar(45) NOT NULL, 05. PRIMARY KEY (`id`) 06.) 建好表后,生成实体类 [java] view plaincopy 01.package com.mvc.entity; 02. 03.import java.io.Serializable; 04. 05.import javax.persistence.Basic; 06.import javax.persistence.Column; 07.import javax.persistence.Entity; 08.import javax.persistence.GeneratedValue; 09.import javax.persistence.GenerationType; 10.import javax.persistence.Id; 11.import javax.persistence.Table; 12. 13.@Entity 14.@Table(name = "student") 15.public class Student implements Serializable { 16. private static final long serialVersionUID = 1L; 17. @Id 18. @Basic(optional = false) 19. @GeneratedValue(strategy = GenerationType.IDENTITY) 20. @Column(name = "id", nullable = false) 21. private Integer id; 22. @Column(name = "name") 23. private String user; 24. @Column(name = "psw") 25. private String psw; 26. public Integer getId() { 27. return id; 28. } 29. public void setId(Integer id) { 30. this.id = id; 31. } 32. 33. public String getUser() { 34. return user; 35. } 36. public void setUser(String user) { 37. this.user = user; 38. } 39. public String getPsw() { 40. return psw; 41. } 42. public void setPsw(String psw) { 43. this.psw = psw; 44. } 45.} Dao层实现 [java] view plaincopy 01.package com.mvc.dao; 02. 03.import java.util.List; 04. 05.public interface EntityDao { 06. public List<Object> createQuery(final String queryString); 07. public Object save(final Object model); 08. public void update(final Object model); 09. public void delete(final Object model); 10.} [java] view plaincopy 01.package com.mvc.dao; 02. 03.import java.util.List; 04. 05.import org.hibernate.Query; 06.import org.springframework.orm.hibernate3.HibernateCallback; 07.import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 08. 09.public class EntityDaoImpl extends HibernateDaoSupport implements EntityDao{ 10. public List<Object> createQuery(final String queryString) { 11. return (List<Object>) getHibernateTemplate().execute( 12. new HibernateCallback<Object>() { 13. public Object doInHibernate(org.hibernate.Session session) 14. throws org.hibernate.HibernateException { 15. Query query = session.createQuery(queryString); 16. List<Object> rows = query.list(); 17. return rows; 18. } 19. }); 20. } 21. public Object save(final Object model) { 22. return getHibernateTemplate().execute( 23. new HibernateCallback<Object>() { 24. public Object doInHibernate(org.hibernate.Session session) 25. throws org.hibernate.HibernateException { 26. session.save(model); 27. return null; 28. } 29. }); 30. } 31. public void update(final Object model) { 32. getHibernateTemplate().execute(new HibernateCallback<Object>() { 33. public Object doInHibernate(org.hibernate.Session session) 34. throws org.hibernate.HibernateException { 35. session.update(model); 36. return null; 37. } 38. }); 39. } 40. public void delete(final Object model) { 41. getHibernateTemplate().execute(new HibernateCallback<Object>() { 42. public Object doInHibernate(org.hibernate.Session session) 43. throws org.hibernate.HibernateException { 44. session.delete(model); 45. return null; 46. } 47. }); 48. } 49.} Dao在applicationContext.xml注入 Dao只有一个类的实现,直接供其它service层调用,如果你想更换为其它的Dao实现,也只需修改这里的配置就行了。 开始写view页面,WEB-INF/view下新建页面student.jsp,WEB-INF/view这路径是在spring-servlet.xml文件配置的,你可以配置成其它,也可以多个路径。student.jsp代码 [xhtml] view plaincopy 01.<%@ page language="java" contentType="text/html; charset=UTF-8" 02. pageEncoding="UTF-8"%> 03.<%@ include file="/include/head.jsp"%> 04. 05.<html> 06.<head> 07.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 08.<title>添加</title> 09. 11.// --><!-- 13.table{ border-collapse:collapse; } 14.td{ border:1px solid #f00; } 15.--><style mce_bogus="1">table{ border-collapse:collapse; } 16.td{ border:1px solid #f00; }</style> 17.<!-- 18.function add(){ 19. [removed].href="<%=request.getContextPath() %>/student.do?method=add"; 20.} 21. 22.function del(id){ 23.$.ajax( { 24. type : "POST", 25. url : "<%=request.getContextPath()%>/student.do?method=del&id;=" + id, 26. dataType: "json", 27. success : function(data) { 28. if(data.del == "true"){ 29. alert("删除成功!"); 30. $("#" + id).remove(); 31. } 32. else{ 33. alert("删除失败!"); 34. } 35. }, 36. error :function(){ 37. alert("网络连接出错!"); 38. } 39.}); 40.} 41.// --> 47. 48. 序号 49. 姓名 50. 密码 51. 操作 52. 53. 54. "> 55. 56. 57. 58. 59. <input type="button" value="编辑"/> 60. <input type="button" value="${student.id}"/>')" value="删除"/> 61. 62. 63. 64. 65. 66.</body> 67.</html> student_add.jsp [xhtml] view plaincopy 01.<%@ page language="java" contentType="text/html; charset=UTF-8" 02. pageEncoding="UTF-8"%> 03.<%@ include file="/include/head.jsp"%> 04. 05.<html> 06.<head> 07.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 08.<title>学生添加</title> 09.<!-- 10.function turnback(){ 11. [removed].href="<%=request.getContextPath() %>/student.do"; 12.} 13.// --> 17.
18. 19. 20. 21. 22.
姓名<input id="user" name="user" type="text" /></td>
密码<input id="psw" name="psw" type="text" /></td>
<input type="submit" value="提交"/><input type="button" value="返回" />
23. 24.</form> 25.</body> 26.</html> controller类实现,只需把注解写上,spring就会自动帮你到相应的bean,相应的注解标记意义,不明白的,可以自己查下@Service,@Controller,@Entity等等的内容。 [java] view plaincopy 01.package com.mvc.controller; 02. 03.import java.util.List; 04. 05.import javax.servlet.http.HttpServletRequest; 06.import javax.servlet.http.HttpServletResponse; 07. 08.import org.apache.commons.logging.Log; 09.import org.apache.commons.logging.LogFactory; 10.import org.springframework.beans.factory.annotation.Autowired; 11.import org.springframework.stereotype.Controller; 12.import org.springframework.ui.ModelMap; 13.import org.springframework.web.bind.annotation.RequestMapping; 14.import org.springframework.web.bind.annotation.RequestMethod; 15.import org.springframework.web.bind.annotation.RequestParam; 16.import org.springframework.web.servlet.ModelAndView; 17. 18.import com.mvc.entity.Student; 19.import com.mvc.service.StudentService; 20. 21.@Controller 22.@RequestMapping("/student.do") 23.public class StudentController { 24. protected final transient Log log = LogFactory 25. .getLog(StudentController.class); 26. @Autowired 27. private StudentService studentService; 28. public StudentController(){ 29. 30. } 31. 32. @RequestMapping 33. public String load(ModelMap modelMap){ 34. List<Object> list = studentService.getStudentList(); 35. modelMap.put("list", list); 36. return "student"; 37. } 38. 39. @RequestMapping(params = "method=add") 40. public String add(HttpServletRequest request, ModelMap modelMap) throws Exception{ 41. return "student_add"; 42. } 43. 44. @RequestMapping(params = "method=save") 45. public String save(HttpServletRequest request, ModelMap modelMap){ 46. String user = request.getParameter("user"); 47. String psw = request.getParameter("psw"); 48. Student st = new Student(); 49. st.setUser(user); 50. st.setPsw(psw); 51. try{ 52. studentService.save(st); 53. modelMap.put("addstate", "添加成功"); 54. } 55. catch(Exception e){ 56. log.error(e.getMessage()); 57. modelMap.put("addstate", "添加失败"); 58. } 59. 60. return "student_add"; 61. } 62. 63. @RequestMapping(params = "method=del") 64. public void del(@RequestParam("id") String id, HttpServletResponse response){ 65. try{ 66. Student st = new Student(); 67. st.setId(Integer.valueOf(id)); 68. studentService.delete(st); 69. response.getWriter().print("{/"del/":/"true/"}"); 70. } 71. catch(Exception e){ 72. log.error(e.getMessage()); 73. e.printStackTrace(); 74. } 75. } 76.} service类实现 [java] view plaincopy 01.package com.mvc.service; 02. 03.import java.util.List; 04. 05.import org.springframework.beans.factory.annotation.Autowired; 06.import org.springframework.stereotype.Service; 07.import org.springframework.transaction.annotation.Transactional; 08. 09.import com.mvc.dao.EntityDao; 10.import com.mvc.entity.Student; 11. 12.@Service 13.public class StudentService { 14. @Autowired 15. private EntityDao entityDao; 16. 17. @Transactional 18. public List<Object> getStudentList(){ 19. StringBuffer sff = new StringBuffer(); 20. sff.append("select a from ").append(Student.class.getSimpleName()).append(" a "); 21. List<Object> list = entityDao.createQuery(sff.toString()); 22. return list; 23. } 24. 25. public void save(Student st){ 26. entityDao.save(st); 27. } 28. public void delete(Object obj){ 29. entityDao.delete(obj); 30. } 31.} OK,例子写完。有其它业务内容,只需直接新建view,并实现相应comtroller和service就行了,配置和dao层的内容基本不变,也就是每次只需写jsp(view),controller和service调用dao就行了。 怎样,看了这个,spring mvc是不是比ssh实现更方便灵活。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧