7

New to Spring-MVC.

I want to store two properties (uploadFolder=.., downloadFolder=..) in a .properties file and access it in HomeController class (automatically created by the MVC template).

Can you please guide me how..

1) Created an app.properties file with the above and placed it under /src/main/resources. is this correct or should it go under /webapp/resources?

2) Placed a bean in servlet-context.xml in the following manner. is this correct?

<beans:bean id="messageSource"
   class="org.springframework.context.support.ResourceBundleMessageSource">
   <beans:property name="basename" value="app" />
</beans:bean>

3) Now how do I access this in Java controllers?

4) How do I access these in a JSP?

I can't tell how much I will thank you.

srini.venigalla
  • 5,137
  • 1
  • 18
  • 29

2 Answers2

21

There are a few different ways to do it. I do the following. In app context:

<util:properties id="myProps" location="classpath:app.properties" />

Make sure you have the following at the top of your file to include the "util" namespace:

xmlns:util="http://www.springframework.org/schema/util" 
xsi:schemaLocation= "... http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"

I usually put my properties files in src/main/resources. As long as they're on the classpath, you're good. Then, in your controller, you can annotate your field/method with:

@Controller
public class MyController {

    @Value("#{myProps['uploadFolder']}")
    private String uploadFolder

    @Value("#{myProps['downloadFolder']}")
    private String downloadFolder

    @RequestMapping("myPage")
    public String loadPage(ModelMap m) {
        m.addAttribute("uploadFolder", uploadFolder);
        m.addAttribute("downloadFolder", downloadFolder);
        return "myPage";
    }

    public void setUploadFolder(String uploadFolder) {
        this.uploadFolder = uploadFolder;
    }
    public void setDownloadFolder(String downloadFolder) {
        this.downloadFolder = downloadFolder;
    }
}

Then, in your JSP:

Download folder: ${downloadFolder} <br/>
Upload folder: ${uploadFolder}

HTH. Let me know if you have any questions.

stephen.hanson
  • 9,014
  • 2
  • 47
  • 53
0

1) Better way is by using src/main/resources

2) yes, but this messageshave different purpose

3)

One way to make a bean from the properties file in src/main/resources:

<bean id="foldersConfig" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
   <property name="location" >
      <value>/WEB-INF/classes/folders.properties</value>
   </property>
</bean>

And in your controller simply inject the reference.

Here how your controller will look like, the xml:

<bean id="myController" class="my.project.package.controller.MyController">
 ...
 <property name="foldersConfig" ref="foldersConfig" />
</bean>

The controller class, related part:

public class MyController extends ... {

 private Properties foldersConfig;

 public void setFoldersConfig(Properties config) {
   this.foldersConfig = config;
 }
}

4) You can access if you put the properties in the View - Model, but this not good solution. Take what you need in the controller (the paths) and put it in the result.

Goran Nastov
  • 995
  • 1
  • 9
  • 17
  • I am inferring that the file should be under src/main/resources, it should be called folder.properties, and the above bean spec should be in servlet-context.xml. Can you please show how to inject the reference? That is the critical part I was missing even before making this post. – srini.venigalla Apr 06 '12 at 14:58