2017-01-01 15 views
1

私は、休止状態の助けを借りてSpring Webアプリケーションを作成しています。私はすべての設定用にspring-dipatcher-servlet.xmlを作成しました。私は春を使用しているので、hibernate.cfg.xmlファイルを作成せずに、hibernateを使用してデータベースにアクセスします。 DAOのセッションファクトリにアクセスしているときに、Null Pointer Exceptionが発生しています。Spring-dispatcher-servlet.xmlからDAOにSessionFactoryにアクセスする方法

以下は私が今まで行ってきたことのスニペットです。

---- ---- web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>quiz_mcq</display-name> 
    <welcome-file-list> 
     <welcome-file>welcome.htm</welcome-file> 
    </welcome-file-list> 

    <servlet> 
      <servlet-name>spring-dispatcher</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

---スプリングディスパッチャ・サーブレット---

<?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:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <context:component-scan base-package="com.quiz_mcq.controller" /> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/quiz_mcq" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="packagesToScan" value="com.quiz_mcq.bean"></property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 

    </bean> 



    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 


</beans> 

--- ---コントローラ

@Controller 
public class QuizMcqController { 

    UserService userService; 

    @RequestMapping(value="/welcome.htm") 
    public ModelAndView redirectToLoginPage(){ 

     ModelAndView modelAndView = new ModelAndView("login"); 
     return modelAndView; 

    } 

    @RequestMapping(value="/AuthenticateUser.htm", method = RequestMethod.POST) 
    public ModelAndView authenticateUser(@RequestParam("username") String username, @RequestParam("password")String password){ 

     userService = new UserService(); 
     boolean flag = userService.authenticate(username,password); 
     if(flag){ 
      ModelAndView modelAndView = new ModelAndView("login"); 
      return modelAndView; 
     } 
     else{ 
      ModelAndView modelAndView = new ModelAndView("wrong"); 
      return modelAndView; 
     } 


    } 


} 

--- ---サービス

public class UserService { 

    User user; 
    UserDao dao; 

    public boolean authenticate(String username, String password) { 
     user = new User(); 
     user.setUsername(username); 
     user.setPassword(password.toCharArray()); 

     if(dao.authenticateUser(user)) 
     { 
      return true; 
     } 

     return false; 

    } 
} 

--- DAO ---、私が間違って何をやっている

@Repository 
public class UserDao implements IUser { 

    @Autowired 
    SessionFactory sessionFactory; 

    public SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    @Override 
    public boolean authenticateUser(User user) { 
     String username = user.getUsername(); 
     char[] password = user.getPassword(); 
     System.out.println(username +" <----> "+password); 
     String hql = "from User where username='username' and password ='password'"; 
     Query query = getSessionFactory().openSession().createQuery(hql); 
     List list = new ArrayList(); 
     list = query.list(); 
     if (list.size() > 0 && list != null) { 
      return true; 
     } 

     return false; 
    } 

} 

どのように私は私の問題を解決することができますか?

ありがとうございます。あなたの助けに感謝します。

+0

やっている、それをしません。あなたのコントローラでそれをAutowireしてください。 –

答えて

0

ここで問題はディスパッチャーサーブレットがBeanを作成して設定する方法を知らないことです。SessionFactoryからです。 (ご覧のように、あなたのsetSessionFactoryはUserDaoクラスにあります)

UserDao beanをspring-dispatcher-servlet.xmlに宣言する必要があります。例えばのための

:あなたは `)(`新しいUserServiceのを

<bean id="userDAO" class="your.package.nameforUserDao"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
関連する問題