Пользовательский сервлет загрузки - PullRequest
0 голосов
/ 25 января 2012

Я изучил код BalusC для пользовательского сервлета загрузки по абсолютному пути (см. http://balusc.blogspot.com/2007/07/fileservlet.html#FileServletServingFromAbsolutePath).. Я не являюсь экспертом по Java для веб-разработчиков, поэтому я хотел бы, чтобы кто-нибудь смог объяснить мне эту часть кода

private String filePath;

// Actions ------------------------------------------------------------------------------------

public void init() throws ServletException {

    // Define base path somehow. You can define it as init-param of the servlet.
    this.filePath = "/files";

    // In a Windows environment with the Applicationserver running on the
    // c: volume, the above path is exactly the same as "c:\files".
    // In UNIX, it is just straightforward "/files".
}

Когда вызывается метод init? Зачем нам нужно указывать filePath в методе init?

У меня есть XHTML (Mojarra + IceFaces) с чем-то вроде приведенного ниже кода, который прекрасно работает. На моей странице отсутствует только часть загрузки файла, на которую ссылается тег outputLink

                <ice:tree id="tree"
                          value="#{treeBean.model}"
                          var="item"
                          hideRootNode="false"
                          hideNavigation="false"
                          >
                    <ice:treeNode>
                        <f:facet name="icon">
                            <ice:panelGroup style="display: inline">
                                <h:graphicImage value="#{item.userObject.icon}" />
                            </ice:panelGroup>
                        </f:facet>
                        <f:facet name="content">
                            <ice:panelGroup style="display: inline-block">
                                <ice:outputLink value="#{item.userObject.filePath}">
                                    <ice:outputText value="#{item.userObject.fileName}"/>
                                </ice:outputLink>
                            </ice:panelGroup>
                        </f:facet>
                    </ice:treeNode>
                </ice:tree>

В моем компоненте Backing у меня есть два поля fileName (только имя файла с расширением, например, Image.jpeg) и filepath (путь ABSOLUTE файла на сервере). Наконец я хочу скачать файл с пользовательским сервлетом, как я могу это сделать?

Приветствия,

UPDATE

Скажем, mi base-dir - /SRC, и под этим каталогом у меня есть все мои страницы xhtml и WEB-INF и META-INF, и дополнительно у меня есть каталог с именем dataFiles в разделе dataFiles, который у меня есть следующая структура

  --dataFiles
  |----Enterprise1
  |    |--User1
  |    |   |--goodFiles
  |    |   |  |--ok.txt
  |    |   |--badFiles
  |    |      |--bad.txt
  |    |--User2 
  |    |   |--goodFiles
  |    |   |  |--ok.txt
  |    |   |--badFiles
  |    |      |--bad.txt
  |----Enterprise2
       |--User1
       |   |--goodFiles
       |   |  |--ok.txt
       |   |--badFiles
       |      |--bad.txt
       |--User2 
           |--goodFiles
           |  |--ok.txt
           |--badFiles
              |--bad.txt

именно так я рендерил дерево с помощью IceFaces, и у меня просто есть имя файла в компоненте поддержки (т.е. ok.txt или bad.txt), но я не могу понять, как загрузить файл, указывающий по ссылке в дереве.

1 Ответ

0 голосов
/ 26 января 2012

Ну наконец-то все заработало.

Прежде всего, благодаря BalusC, здесь были некоторые посты, которые помогли мне понять, но кто-то их удалил.В любом случае, вот что я выучил.

  1. В методе init сервлета переменная filePath должна указывать на абсолют путь к файлам для загрузки.
  2. В web.xml шаблон servlet-map-url-pattern будет запускать сервлет, когда браузер имеет этот шаблон URL.
  3. На странице xhtml значение ссылки должно начинаться с URL-шаблона, за которым следует имя (или путь + имя файла), поэтому при нажатии на ссылку начинается загрузка.

Это все, что мне нужно было сделать!

В примере вопроса переменная filePath в методе init сервлета будет указывать на абсолютный путь, что-то вроде C: \ myApp \ dataFiles Затем в xhtml будет вызываться сервлет с чем-то вроде

<ice:outputLink value="dl/myPath/#{myBean.fileName}>
    <ice:outputText value="#{myBean.fileName}"/>
</ice:outputLink>

Примечание 1: первая часть значения outputLink равна dl / , это потому, что url-шаблон для загружаемого сервлета

Примечание 2:в outputLink значение myPath может быть dl / Enterprise1 / User1 / file1.ext

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...