Как получить свойства в файлах JSP с помощью spring mvc 3
Я очень новичок в приложении spring mvc 3 для аннотаций. У меня есть два файла свойств -
WEB-INF\Resources\general.properties,
WEB-INF\ресурсы\jdbc_config.properties
Теперь я хочу настроить их через spring -servlet.xml. Как я могу это достичь?
В целом. свойства,
label.username = User Name:
label.password = Password:
label.address = Address:
... и т.д.
jdbc_config.properties,
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost:[port_number]/
app.jdbc.username=root
app.jdbc.password=pass
--- и т.д.
Если я хочу получить label.username и app.jdbc.driverClassName на моей странице jsp, как мне их закодировать?
Я также хочу получить доступ к этим значениям свойств из моей службы. Как получить эти значения свойств с помощью соответствующих ключей на уровне метода в классе обслуживания или классе контроллера?
Ответы
Ответ 1
Я предполагаю, что ваш файл spring -servlet.xml является одним из ваших файлов контекста приложения. Если этот случай добавит в него следующий bean:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>WEB-INF/resources/general</value>
<value>WEB-INF/resources/jdbc_config</value>
</list>
</property>
</bean>
тогда вы можете получить значение свойства в JSP (не забудьте добавить тегlib spring в верхней части вашего JSP):
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<table>
<tr>
<td>User Name:</td>
<td><spring:message code="label.username" />:</td>
</tr>
<tr>
<td>Driver Class Name:</td>
<td><spring:message code="app.jdbc.driverClassName" />:</td>
</tr>
etc...
</table>
Ответ 2
Вам нужно различать свойства приложения (конфигурация) и сообщения локализации. Оба используют файлы свойств JAVA, но они выполняют разные задачи и обрабатываются по-разному.
Примечание. Я использую конфигурацию Spring на основе Java в приведенных ниже примерах. Конфигурация может быть легко выполнена и в XML. Просто проверьте Spring JavaDoc и справочную документацию.
Свойства приложения
Свойства приложения должны быть загружены как источники ресурсов в контексте вашего приложения. Это можно сделать с помощью @PropertySource
аннотации в классе @Configuration
:
@Configuration
@PropertySource("classpath:default-config.properties")
public class MyConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
Затем вы можете вводить свойства, используя @Value
аннотацию:
@Value("${my.config.property}")
private String myProperty;
Сообщения о локализации
Сообщения о локализации - это немного другая история. Сообщения загружаются как ресурсные пакеты, и создается специальный процесс разрешения для получения правильного сообщения о переводе для указанного locale.
В Spring эти сообщения обрабатываются MessageSource
s. Вы можете определить свой собственный, например, через ReloadableResourceBundleMessageSource
:
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/messages/messages");
return messageSource;
}
Вы можете получить доступ к этим сообщениям из beans, если вы позволите Spring вставить MessageSource
:
@Autowired
private MessageSource messageSource;
public void myMethod() {
messageSource.getMessage("my.translation.code", null, LocaleContextHolder.getLocale());
}
И вы можете переводить сообщения в своих JSP с помощью тега <spring:message>
:
<spring:message code="my.translation.code" />
Ответ 3
Я закончил использование среды
Добавьте эти строки в конфигурацию
@PropertySource("classpath:/configs/env.properties")
public class WebConfig extends WebMvcConfigurerAdapter{...}
Вы можете получить свойства с контроллера с помощью автономной среды
public class BaseController {
protected final Logger LOG = LoggerFactory.getLogger(this.getClass());
@Autowired
public Environment env;
@RequestMapping("/")
public String rootPage(ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) {
LOG.debug(env.getProperty("download.path"));
return "main";
}
}
Ответ 4
Сначала импортируйте весенний тег lib:
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
Чем импортировать свойство из вашего application.properties
<spring:eval var="registration_url" expression="@environment.getProperty('service.registration.url')"/>
Чем использовать вашу переменную
<a href="<c:out value="${registration_url}"/>" class="btn btn-primary btn-block"> test </a>