2013-04-30 79 views
0

我有問題(當我從另一個組件類調用方法)與NullPointerException這樣的:自動裝配Autowired的註釋中的Servlet春天

ERROR [UploadServlet] - Servlet.service() for servlet UploadServlet threw exception 
java.lang.NullPointerException 
    at pl.crai.servlets.FileUploadServlet.doPost(FileUploadServlet.java:77) 
    at pl.crai.servlets.FileUploadServlet.handleRequest(FileUploadServlet.java:286) 
    at org.springframework.web.context.support.HttpRequestHandlerServlet.service(HttpRequestHandlerServlet.java:67) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) 

我春天的版本是3.2,這是我的servlet類注射:

@Component 
public class FileUploadServlet implements HttpRequestHandler { 

    @Autowired 
    private MessagesPersistence messagesPersistence; 

接下來,我applicationContext.xml

<bean name="UploadServlet" class="pl.crai.servlets.FileUploadServlet"> 

    </bean> 

彈簧servlet.xml中:

<mvc:annotation-driven /> 
    <import resource="applicationContext.xml" /> 
    <context:component-scan base-package="pl.crai" /> 

和整個web.xml

<display-name></display-name> 

    <listener> 
     <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 
    <filter> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping > 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

     <servlet> 
     <servlet-name>downloadAttachments</servlet-name> 
     <servlet-class>pl.crai.servlets.DownloadAttachmentsSerlvet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>downloadAttachments</servlet-name> 
     <url-pattern>/downFile/*</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>downloadMultipleAttachments</servlet-name> 
     <servlet-class>pl.crai.servlets.DownloadMultipleAttachmentsServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>downloadMultipleAttachments</servlet-name> 
     <url-pattern>/downMultipleFile/*</url-pattern> 
    </servlet-mapping> 


    <servlet> 
    <display-name>UploadServlet</display-name> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class> 
    org.springframework.web.context.support.HttpRequestHandlerServlet 

    </servlet-class> 

</servlet> 

<servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/uploadFile</url-pattern> 
</servlet-mapping> 

    <filter> 
     <filter-name>LoginFilter</filter-name> 
     <filter-class>pl.crai.filters.LoginFilter</filter-class> 

    </filter> 
    <filter-mapping> 
     <filter-name>LoginFilter</filter-name> 
     <url-pattern>*.html</url-pattern> 
    </filter-mapping> 

</web-app> 

我試圖嘗試使用不同的設置(沒有的servlet @Component annatotion,與@Component("UploadServlet"),沒有在XML文件中的配置,以及更多......) 請幫忙!編輯======================= =============

所以..當我刪除<import resource= from spring-servlet.xml自動裝配在我​​的項目中的另一個組件不起作用。

我的web.xml的uprgade版本是:

<display-name></display-name> 
    <listener> 
     <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 
    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:applicationContext.xml</param-value> 
    </context-param> 

    <filter> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping > 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

     <servlet> 
     <servlet-name>downloadAttachments</servlet-name> 
     <servlet-class>pl.crai.servlets.DownloadAttachmentsSerlvet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>downloadAttachments</servlet-name> 
     <url-pattern>/downFile/*</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>downloadMultipleAttachments</servlet-name> 
     <servlet-class>pl.crai.servlets.DownloadMultipleAttachmentsServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>downloadMultipleAttachments</servlet-name> 
     <url-pattern>/downMultipleFile/*</url-pattern> 
    </servlet-mapping> 


    <servlet> 
    <display-name>UploadServlet</display-name> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class> 
    org.springframework.web.context.support.HttpRequestHandlerServlet 
      <!-- org.springframework.web.context.support.HttpRequestHandlerServlet --> 
    </servlet-class> 

    </servlet> 

    <servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/uploadFile</url-pattern> 
    </servlet-mapping> 


    <filter> 
     <filter-name>LoginFilter</filter-name> 
     <filter-class>pl.crai.filters.LoginFilter</filter-class> 

    </filter> 
    <filter-mapping> 
     <filter-name>LoginFilter</filter-name> 
     <url-pattern>*.html</url-pattern> 
    </filter-mapping> 

</web-app> 

但它仍然無法與另一個異常工作:

Allocate exception for servlet UploadServlet 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'UploadServlet' is defined 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:549) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1096) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:278) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1121) 
    at org.springframework.web.context.support.HttpRequestHandlerServlet.init(HttpRequestHandlerServlet.java:57) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:211) 
+0

是否已經設置了春天'ContextLoaderListener'適當的'contextConfigLocation'? – NilsH 2013-04-30 12:12:27

+0

當你完全得到異常?你注射失敗還是行動? – erencan 2013-04-30 12:12:51

+0

行動時我得到異常。 – mjoger 2013-04-30 12:23:42

回答

-1

UploadServlet應該在你的根Web應用程序上下文定義(由ContextLoaderListener加載的那個):

因此,所做的更改應該是,將bean添加到您的applicationContext.xml文件中,您已經做了東北。 而不是通過ContextLoaderListenerservlet-context.xml文件 最多可以裝入applicationContext.xml中刪除<import resource..,而不是通過<import resource...,所以在你的web.xml:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 
+0

我必須在第一篇文章回答 – mjoger 2013-04-30 14:26:19

+0

我檢查了你的編輯..你似乎已經做了所需的一切,奇怪,它仍然無法正常工作。您在啓動時是否看到任何異常?你有可能在github中放置一個精簡的項目嗎? – 2013-04-30 15:07:01