ssh

我自己搞了个SSH登陆框架,哎~~问题多多。初学者。大侠们看看:我的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"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>           

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/> </tx:attributes>
</tx:advice>

<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.user.usermanager.UserManagerImpl.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>


<bean id="userManager" class="com.user.usermanager.UserManagerImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean name="/login" class="com.user.actions.LoginAcion">
<property name="userManager" ref="userManager"/>
</bean>
</beans>那个UserManagerImpl是一个处理业务的类;
如下:
package com.user.usermanager;import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.user.exception.UserNotFoundException;
public class UserManagerImpl extends HibernateDaoSupport implements UserManager {

@Override
public void login(final String username, final String password)
  throws UserNotFoundException  {
List list = new ArrayList();

try {
System.out.println(username+" "+password);
list =  this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {

return session.createQuery("from User u where u.username like ? and u.password like ?")
.setParameter(0, username)
.setParameter(1, password)
.list();

}


});


} catch(Exception e) {
e.printStackTrace();
}

if(list.size()==0) {
throw new UserNotFoundException();
}
}
}在我登陆的时候,可以输出我的账号和密码,后面的就运行部下去了。
一直都是报空指针错误:我觉得是sessionfactory没有注入过去,然后在这里取过来的session都是空的
大虾们看看,什么问题。小弟不甚感激!!!

解决方案 »

  1.   

    注意:
    1、hibernate.cfg.xml确定在src下?
    2、web.xml中是否配置了:
      
    <!-- Spring 支持配置 -->
      <context-param>
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:applicationContext*.xml,/WEB-INF/applicationContext*.xml</param-value> 
      </context-param>
      <listener> 
    <listener-class> 
    org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
      </listener>
    <!-- Struts 2 支持配置 -->
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>    <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>调试一下:
    1、使用debug一步一步跟踪;
    2、在UserManagerImpl构造方法中打印一些语句,判断在服务器启动时有没有被初始化。也可以打印sessionFactory看是不是有初始化。
      

  2.   

    我是放在classpath下的,在web.xml里面有配置
     <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath*:applicationContext-*.xml</param-value>
      </context-param>
       
       <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
       </listener>
      

  3.   

    我的 sessionFactory确实为空啊,
    不知道怎么搞的。难道没有注入过去?spring的配置有问题吗?
    好像在项目运行的时候它说没有找到applicationContext
    下面没有输出一些加载spring框架的一些信息
    说config=null;
    我郁闷了。因为我的
    web.xml里面有配置这个:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>
      <!-- Standard Action Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
      
      
       <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath*:applicationContext-*.xml
    </param-value>
    <!--
    <param-value>
    /WEB-INF/dataAccessContext-jta.xml  /WEB-INF/applicationContext.xml
    </param-value>
    -->
    </context-param>

    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

      <filter>
        <filter-name>Spring character encoding filter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
         <param-name>encoding</param-name>
         <param-value>GBK</param-value>
        </init-param>
      </filter>  <filter-mapping>
        <filter-name>Spring character encoding filter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>  <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      </filter>
     <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping> 
       
    </web-app>
      

  4.   

    不知道咋的了
    我myeclipse运行tomcat的时候,根本就不打印加载springframe框架的信息
    如下:
    不知道什么原因
    信息: Initializing Coyote HTTP/1.1 on http-8888
    2009-5-30 9:52:43 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 495 ms
    2009-5-30 9:52:43 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2009-5-30 9:52:43 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.14
    2009-5-30 9:52:45 org.apache.catalina.core.ApplicationContext log
    信息: Loading Spring root WebApplicationContext
    2009-5-30 9:52:49 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8888
    2009-5-30 9:52:49 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8009
    2009-5-30 9:52:49 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/31  config=null
    2009-5-30 9:52:49 org.apache.catalina.startup.Catalina start
    信息: Server startup in 6073 ms好像都没有读取web.xml一样的