Я создал сценарий PHP для запуска / остановки сервера GlassFish. В PHP я использую shell_exec метод для выполнения команд start-domain и stop-domain.
Для запуска сервера
shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin start-domain domain1");
Чтобы остановить сервер
shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin stop-domain domain1");
Хотя сценарий запускает и останавливает сервер, есть проблема, которую я не могу понять. Кодировка символов меняется на другую, а специальные символы, поступающие из клиентских запросов, больше не форматируются правильно.
Персонажи с правильной кодировкой
Персонажи с неправильной кодировкой
Кажется, что настройки для UTF-8 игнорируются, и он возвращается к другой кодировке, которая, как я считаю, на «ISO-8859-1».
domain.xml
<jdbc-connection-pool connection-validation-method="auto-commit" ...>
<property name="characterEncoding" value="UTF-8"></property>
</jdbc-connection-pool>
sun-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/some-directory-war</context-root>
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class java code.</description>
</property>
</jsp-config>
<!-- Change the default character encoding from ISO-8859-1 to UTF-8 -->
<parameter-encoding default-charset="UTF-8"/>
</sun-web-app>
Во время своего расследования я обнаружил множество статей, в которых говорилось об определении набора символов в sun-web.xml (старая версия Glassfish - мой случай), но это не помогло.
После некоторого тестирования я заметил, что если я вхожу в систему с www-данными в консоли, используется оболочка по умолчанию / bin / sh, и запуск домена из этого вызывает ту же проблему. Однако, если я переключусь на / bin / bash, это сработает.
Кто-нибудь знает, в чем может быть разница?
Будем очень признательны за любую информацию по этому поводу!
Очевидно, языковой стандарт оболочки влияет на то, как сервер GlassFish интерпретирует запросы. Я не считаю это логичным, так как у домена для этого есть свой файл настроек ...
Помог следующий комментарий пользователя: shell_exec
$locale = "en_US.UTF-8";
setlocale(LC_CTYPE, $locale);
putenv('LC_CTYPE=' . $locale);
shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin start-domain domain1");
Работает как часы!