16

In Spring web mvc

1) If we define DispatcherServlet as below

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

it looks for file named appServlet-servlet.xml under WEB-INF folder as mentioned in the spring reference.

My question is can we change this file name and location it looks for? (I think using context or init parameters we can do this,can any body tell me what exactly it should be?)

2) In every spring web mvc web.xml,we will have the below line:

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

Here, My question is what context files it looks for? (is is this context loader listener which looks for dispatcherservlet-servlet.xml?)

3) Difference between dispatcherservlet-servlet.xml and applicationcontext.xml? (I saw some examples..where people are importing applicationcontext.xml into dispatcherservlet-servlet.xml?)

4) Please tell me how many contexts we can have for spring web and are there any naming conventions for this(like dispatcher servlet)?/

Bozho
  • 588,226
  • 146
  • 1,060
  • 1,140
javanoob
  • 6,070
  • 16
  • 65
  • 88
  • I hope the link below will be able to answer you question. http://stackoverflow.com/questions/11815339/role-purpose-of-contextloaderlistener-in-spring – user2292029 Apr 17 '13 at 18:10

3 Answers3

20
  1. "The namespace can also be set explicitly via the namespace servlet init-param." You can set whatever path you want there, relative to the context root

  2. No, the ContextLoaderListener looks for applicationContext.xml (or for the file specified by the context-param contextConfigLocation. Again the path is relative to the context-root. I usually place mine in /WEB-INF/classes/applicationContext.xml, and set this as a value of the context-param).

  3. The dispatcherServlet-servlet.xml is a child context to the one defined by applicationContext.xml. The child context can access beans from the parent context, but the opposite is not true. So imagine you have a "web" context, with all controllers and web-related stuff, and a "main" context with everything else

  4. It is advisable to have as few contexts as possible (for the sake of simplicity). But you can define multiple dispatcher servlets, and hence have multiple "child" contexts.

Bozho
  • 588,226
  • 146
  • 1,060
  • 1,140
  • Bozho, Thanks for your reply...I am still not clear with the first two answers. (1) The question is about the name of the dispatcher servlet context file and path it looks for. By default file should be `.xml` and should be under `WEB-INF` folder can we change these rules by using init param? (2)so it looks for `applicationcontext.xml`, could you describe about the path also? – javanoob Sep 19 '10 at 14:22
  • @javanoob - see updated. you can set paths relative to the context root. – Bozho Sep 19 '10 at 14:41
  • **ContextLoaderListener** accept `classpath:/path/to/spring.xml` syntax for **contextConfigLocation**. – gavenkoa Apr 16 '14 at 17:26
16

My question is can we change this file name and location it looks for?

Did you mean that you want to use a file which is NOT named as appServlet.xml

Copying-pasting from mvc-shocase/web.xml

<!-- Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
dira
  • 30,304
  • 14
  • 54
  • 69
  • Hi, Thanks for your response..The question was about can we change the name from `appServlet-servlet.xml`(you mentioned it as `appServlet.xml`)BTW..how did you know that i was referring to that example(mv-showcase) :) ? – javanoob Sep 20 '10 at 08:51
0

1A)Yes, but we need to pass the init-param to the DispatcherServlet with name and value as "contextConfigLocation" and "location of ur file" respectively in DD or web.xml file.

2A)Bozho already answered. It[the ContextLoaderListener] looks to load the context xml file(s) provided as context param-value mapped to context param-name for the context-param. Looking for the "dispatcherservlet-servlet.xml" is a default process in Spring MVC. ContextLoaderListener don't looks for it.

3A)Bozho already answered.

4A)Bozho already answered.

krock
  • 28,904
  • 13
  • 79
  • 85