[英]Spring + hibernate Servlet.init() for servlet dispatcher threw exception
[英]Servlet.init() for servlet [dispatcher] threw exception
我正在嘗試在另一個jar文件中訪問DAO類,我已經在pom.xml中添加了它的依賴關系,並試圖通過當前模塊中的“頁面控制器”訪問它,但是我遇到了異常
我嘗試在組件掃描中檢查名稱,檢查自動接線對象的名稱
調度員servlet.xml中
<context:component-scan base-package="com.apurv.onlineshopping.controller"/>
<context:component-scan base-package="com.apurv.shoppingbackend.daoImpl "/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- loading static resources -->
<mvc:annotation-driven></mvc:annotation-driven>
<mvc:resources location="/assets/" mapping="/resources/**"></mvc:resources>
</beans>
web.xml中
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
頁面控制器
package com.apurv.onlineshopping.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.apurv.shoppingbackend.dao.CategoryDAO;
@Controller
public class PageController {
@Autowired
private CategoryDAO categoryDao;
@RequestMapping(value= {"/","/home","/index"})
public ModelAndView index() {
ModelAndView mv= new ModelAndView("page");
mv.addObject("title","Home");
//passing category list from back end
mv.addObject("categories", categoryDao.list());
mv.addObject("userClickHome",true);
return mv;
}
@RequestMapping(value="/about")
public ModelAndView about() {
ModelAndView mv= new ModelAndView("page");
mv.addObject("title","About Us");
mv.addObject("userClickAbout",true);
return mv;
}
@RequestMapping(value="/contact")
public ModelAndView contact() {
ModelAndView mv= new ModelAndView("page");
mv.addObject("title","Contact Us");
mv.addObject("userClickContact",true);
return mv;
}
}
其他罐子
package com.apurv.shoppingbackend.daoImpl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.apurv.shoppingbackend.dao.CategoryDAO;
import com.apurv.shoppingbackend.dto.Category;
@Repository
public class CategoryDAOImpl implements CategoryDAO{
private static List<Category> categories=new ArrayList<>();
static {
Category category=new Category();
//first category
category.setId(1);
category.setName("Televison");
category.setDescription("this is a flat screen tv");
category.setImageURL("CAT_1.png");
categories.add(category);
/*
* //second category category=new Category(); category.setId(2);
* category.setName("Mobile"); category.setDescription("this is a apple phone");
* category.setImageURL("CAT_2.png");
*
*
* categories.add(category);
*
* //third category
*
* category=new Category();
*
* category.setId(3); category.setName("fridge");
* category.setDescription("this is a double door fridge");
* category.setImageURL("CAT_3.png");
*
*
* categories.add(category);
*
* //fourth category
*
* category=new Category(); category.setId(4);
* category.setName("washing machine");
* category.setDescription("this is an automatic washing machine ");
* category.setImageURL("CAT_4.png");
*
*
* categories.add(category);
*
*/
}
@Override
public List<Category> list() {
// TODO Auto-generated method stub
return categories;
}
}
HTTP狀態500 –內部服務器錯誤類型異常報告
Message Servlet.init() for servlet [dispatcher] threw exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Servlet.init() for servlet [dispatcher] threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Root Cause
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pageController' defined in file [C:\Users\apurv\fullStackPractice\shopping\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\onlineshopping\WEB-INF\classes\com\apurv\onlineshopping\controller\PageController.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [com.apurv.onlineshopping.controller.PageController] for resource metadata: could not find class that it depends on
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:526)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
pom.xml,其中我已將其他模塊包含為依賴項
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.apurv</groupId>
<artifactId>onlineshopping</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>onlineshopping Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<javaee.version>7.0</javaee.version>
<springmvc.version>4.3.6.RELEASE</springmvc.version>
</properties>
<dependencies>
<!--adding backend -->
<dependency>
<groupId>com.apurv</groupId>
<artifactId>shoppingbackend</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-
webmvc -->
<!-- https://mvnrepository.com/artifact/javax/javaee-api -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<finalName>onlineshopping</finalName>
</build>
</project>
pom.xml of the module which i have included in the above
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.apurv</groupId>
<artifactId>shoppingbackend</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shoppingbackend</name>
<url>http://maven.apache.org</url>
<properties>
<javaee.version>7.0</javaee.version>
<springmvc.version>4.3.6.RELEASE</springmvc.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<!-- https://mvnrepository.com/artifact/javax/javaee-api -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springmvc.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<finalName>shoppingbackend</finalName>
</build>
</project>
問題的根源在這里:
無法自檢bean類[com.apurv.onlineshopping.controller.PageController]中的資源元數據:找不到它依賴的類
DI容器找不到另一個.jar中定義的類來解決問題,讓我們看一下代碼:
您注入一個DAO組件:
@Controller
public class PageController {
@Autowired
private CategoryDAO categoryDao;
可以在web.xml中定義的包裝(不是.jars)中找到:
<context:component-scan base-package="com.apurv.onlineshopping.controller"/>
<context:component-scan base-package="com.apurv.shoppingbackend.daoImpl "/>
因為我發現您的兩個模塊是單獨存儲的,所以構建系統沒有任何信息可以在網上找到依賴項,除非您手動插入它們。
我的解決方案是:將兩個獨立模塊組織到父模塊pom中:
這里id父pom.xml :
<?xml version="1.0" encoding="UTF-8"?>
<project ...
<groupId>com.apurv</groupId>
<artifactId>so</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>shoppingbackend</module>
<module>onlineshopping</module>
</modules>
</project>
接下來在您的模塊中給父對象添加引用:onlineshopping的pom.xml
<project ...
<modelVersion>4.0.0</modelVersion>
<!--unnecessary <groupId>com.apurv</groupId>-->
<artifactId>onlineshopping</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>onlineshopping</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>com.apurv</groupId>
<artifactId>so</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
... tail of your code is unchanged ...
和shoppingbackend的pom.xml
<project ...
<modelVersion>4.0.0</modelVersion>
<!--unnecessary <groupId>com.apurv</groupId>-->
<artifactId>shoppingbackend</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shoppingbackend</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>com.apurv</groupId>
<artifactId>so</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
... tail of your code is unchanged ...
下一步構建根模塊:
mvn package
其余代碼未更改,您可以找到完整的倉庫: https : //github.com/enginetag/so-apurv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.