在Spring-MVC中访问应用程序属性

7

刚接触Spring-MVC。

我想把两个属性(uploadFolder=.., downloadFolder=..)存储在.properties文件中,并在HomeController类(由MVC模板自动创建)中访问它。

请问:

1)我应该创建一个app.properties文件,将其放置在/src/main/resources下,这样做正确吗?还是应该放在/webapp/resources下?

2)我应该以以下方式在servlet-context.xml中放置一个bean。这样做正确吗?

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

3) 现在我该如何在Java控制器中访问它?

4) 我该如何在JSP中访问它们?

我无法表达我有多感激你。

2个回答

21

有几种不同的方法可以实现。我采用以下方式。在应用程序上下文中:

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

请确保在你的文件顶部包含以下内容以引入 "util" 命名空间:

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"

我通常把我的属性文件放在src/main/resources目录下。只要它们在类路径上,就可以了。然后,在你的控制器中,你可以用注解来标注你的字段/方法:

@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;
    }
}

然后,在你的JSP文件中:

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

希望这对你有所帮助。如果你有任何问题,请告诉我。


想知道如何在服务类中获取那个属性? - Tom
你能这样做吗?将属性文件的位置替换为外部位置? - B. TIger

0

1) 更好的方法是使用src/main/resources

2) 是的,但这个messages有不同的目的

3)

src/main/resources中的属性文件创建bean的一种方法:

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

在你的控制器中直接注入该引用。

以下是你的控制器的样子,包括 XML:

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

控制器类,相关部分:

public class MyController extends ... {

 private Properties foldersConfig;

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

4) 如果您将属性放在视图 - 模型中,就可以访问它们,但这不是一个好的解决方案。在控制器中获取所需内容(路径),并将其放入结果中。


我推断文件应该在src/main/resources下,它应该被称为folder.properties,并且上面的bean规范应该在servlet-context.xml中。 您能否展示如何注入引用?这是我在发布此帖子之前就缺失的关键部分。 - srini.venigalla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接