2013-08-07 2 views
1

Это очень легко, используя Glassfish:JBoss эквивалентность GlassFish перемежаются DOCROOT

Рассмотрим мой абсолютный путь на UNIX /apps/static_content/. Использование GlassFish, я просто определить альтернативный корень DOC как:

<property name="alternatedocroot_1" 
    value="from=/static/* dir=/apps/static_content/"/> 

Когда я загрузить мои изображения и другие файлы данных, я могу сохранить их в каталог /apps/static_content, и в моей странице JSF я могу показать мой статическое содержимое обычно как:

<p:graphicsimage value="/static/external_web_app.png"/> 

мне действительно нужно для достижения той же функциональности в JBoss AS7

Как я могу это сделать?

+0

JBoss не поддерживает ничего подобного. – BalusC

ответ

0
  • Вариант 1: Вы могли бы попытаться развернуть отдельный разобранном .war файл, и использовать его для статического контента

В вашем случае: В .../jboss-7/standalone/deployments/ должно быть static.war/.

Так что закачки идут в этот каталог, и содержимое возвращается в обычном порядке.

Что касается подробностей, см Is it possible to deploy an exploded war file (unzipped war) in JBoss AS 7

Как отметил BalusC: Вы не должны перераспределять/удалить этот каталог, как только данные были загружены. У вас должна быть регулярная резервная копия этого каталога.

Насколько я знаю, это единственная возможность сделать это только по конфигурации/настройке.


  • Вариант 2: Создать отдельный веб-приложение с именем static.war. Добавить сервлет поток статический контент

Таким образом, нет необходимости загружать/сохранять файлы в файловой системе ниже ../deployments/, это может быть любой каталог, но вам нужен дополнительный сервлет, так что решаются программно.

Простой потокового сервлет может выглядеть следующим образом (только не потоковое - никакой аутентификации и т.д.):

public class DownloadServlet extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

     final File dir = new File("/var/cms/storage/"); 
     final String start = "/static/"; 
     final String relativePath = request.getRequestURI().substring(
       request.getRequestURI().indexOf(start) + start.length()); 
     final File file = new File(dir, relativePath); 
     final String ct = URLConnection.guessContentTypeFromName(file.getName()); 
     response.setContentType(ct); 

     final InputStream is = 
      new BufferedInputStream(new FileInputStream(file)); 
     try { 
      final boolean closeOs = true; 
      org.apache.commons.fileupload.util.Streams.copy 
        (is, response.getOutputStream(), closeOs); 
     } finally { 
      is.close(); 
     } 
    } 

Карта все адреса в этом сервлета:

<servlet-mapping> 
    <servlet-name>DownloadServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Название static.war обеспечивает /static/ Интернет контекст, чтобы он был совместим с URL-адресами вашего кода.

+0

OP намерен сохранять загруженные файлы и обслуживать их обратно. Это не идет вместе с WAR. – BalusC

+0

@BalusC Возможно, он не указан/поддерживается, и, вероятно, центру обработки данных это не понравится. Я протестировал его, он работает с использованием взломанного .war с использованием JBoss 7.1.1: я мог бы загружать файлы в этот каталог, и отработка работает нормально. – Beryllium

+0

Пока вы не перевернете WAR. – BalusC

0

Если вы изучите каталог jboss, вы обнаружите, что есть много возможностей для хранения различных типов данных, таких как jboss.serer.data.dir.

Вы можете попросить этот путь к каталогу через свойства системы и сохранить в папке данные, которые используют ваши службы, в таком каталоге.

String path = System.getProperty("jboss.server.data.dir"); 

Затем вы можете использовать путь как вы хотите, если только статические, как показано в вашем примере вы устанавливаете непосредственно имя каталога.

Это должно работать, я надеюсь: р

пса: как предыдущий ответ предложить сохраненные данные будут держать в каталоге, и вы не должны перераспределять/удалить этот каталог .. Это будет держать ваши данные там.

+0

Как я могу получить доступ к этому пути на моей странице jsf? – maress

+0

Использование сервлета. – BalusC

+0

Используйте сервлет или бэк-компонент с помощью простого метода, который возвращает желаемый путь. – LMG

1

Этот вопрос немного стар, но отвечает, если кому-то нужно это делать с более новыми версиями JBoss/Wildfly.

JBoss AS был переименован в Wildfly с версии 8 (то есть Wildfly 8 является JBoss AS 8), а версия JBoss, поддерживаемая Red Hat, была переименована в JBoss EAP. Таким образом, это относится к:

  • Wildfly (любая версия)
  • JBoss EAP (начиная с версии 7)

Прежде всего следует отметить, что "альтернативный корневой документ" особенность в GlassFish не работает как это. Пожалуйста, ознакомьтесь с этим вопросом для объяснения поведения этой функции: Alternate docroot not working on glassfish 4

Теперь, чтобы ответить на этот вопрос, JBoss/Wildfly строится на Undertow, что позволит вам делать именно то, что вам нужно. Обратитесь к этому вопросу о том, как настроить сеанс как веб-сервер для статического контента: How to configure Wildfly to serve static content (like images)?

+0

Обновите свой ответ и добавьте версии, к которым это относится. – ppovoski

Смежные вопросы