получить абсолютный путь к папке apache webcontents из файла класса java [дубликат]

этот вопрос уже есть ответ здесь:

необходимо получить абсолютный путь в файле класса java, внутри динамического веб-приложения...

  • на самом деле мне нужно получить путь к папке apache webapps... где веб-приложений, развернутых

  • например /Апач-корень/веб-приложений/Мой-развернуть-приложение/папку WebContent/изображения/imagetosave.формат JPG

  • нужно получить это в файле класса java, а не на странице jsp или любой странице просмотра...

какие идеи?

7 ответов


на самом деле мне нужно получить путь к папке apache webapps... где развернуты webapps

например /Апач-корень/веб-приложений/Мой-развернуть-приложение/папку WebContent/изображения/imagetosave.формат JPG

как упоминалось во многих других ответах, вы можете просто использовать ServletContext#getRealPath() чтобы преобразовать относительный путь веб-контента в абсолютный путь файловой системы диска, чтобы вы могли использовать его дальше в File или FileInputStream. Этот ServletContext находится в сервлетах, доступных по наследству getServletContext() способ:

String relativeWebPath = "/images";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath, "imagetosave.jpg");
// ...

имя файла "imagetosave.jpg " означает, что вы пытаетесь сохранить загруженное изображение с помощью FileOutputStream. Общедоступной папкой webcontent является неправильно место для хранения загруженных изображений! Все они будут потеряны, когда webapp будет перераспределен или даже когда сервер будет перезапущен с очисткой. Простая причина в том, что загруженные изображения они вообще не содержатся в файле войны, который будет развернут.

вы должны обязательно искать другое место за пределами папка webapp deploy как более постоянное хранилище загруженных изображений, чтобы она оставалась неповрежденной при нескольких развертываниях / перезапусках. Лучший способ-подготовить фиксированную локальную папку файловой системы диска, такую как /var/webapp/uploads и предоставьте это как некоторую настройку конфигурации. Наконец, просто сохраните изображение там.

String uploadsFolder = getItFromConfigurationFileSomehow(); // "/var/webapp/uploads"
File file = new File(uploadsFolder, "imagetosave.jpg");
// ...

посмотреть также:


Если у вас есть javax.сервлет.ServletContext вы можете вызвать:

servletContext.getRealPath("/images/imagetosave.jpg")

чтобы получить фактический путь, где хранится изображение.

ServletContext можно получить из javax.сервлет.http.Объекта httpsession.

однако, вы можете захотеть взглянуть на использование:

servletContext.getResource("/images/imagetosave.jpg")

или

servletContext.getResourceAsStream("/images/imagetosave.jpg") 

String path =  MyClass.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

Это должно возвращать ваш абсолютный путь на основе местоположения файла класса.


я смог получить ссылку на ServletContext в фильтре. Что мне больше всего нравится в этом подходе, так это то, что он происходит в методе init (), который вызывается при первой загрузке веб-приложения, что означает, что выполнение происходит только один раз.

public class MyFilter implements Filter {
    protected FilterConfig filterConfig;
    public void init(FilterConfig filterConfig) {
        String templatePath = filterConfig.getServletContext().getRealPath(filterConfig.getInitParameter("templatepath"));
        Utilities.setTemplatePath(templatePath);
        this.filterConfig = filterConfig;
}

я добавил "templatepath" в filterConfig через интернет.XML-код:

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.myapp.servlet.MyFilter</filter-class>
    <init-param>
        <param-name>templatepath</param-name>
        <param-value>/templates</param-value>
    </init-param>
</filter>    
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

вы можете получить путь в контроллер:

public class MyController extends MultiActionController {
private String realPath;

public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    realPath = getServletContext().getRealPath("/");
    String classPath = realPath + "WEB-INF/classes/" + MyClass.ServletContextUtil.class.getCanonicalName().replaceAll("\.", "/") + ".java";
    // add any code
}

способ -1 :

//Шаг 1 : импорт Java.чистая.InetAddress;

InetAddress ip = InetAddress.getLocalHost();

/ / step2: укажите путь к файлу

String filepath="GIVE YOUR FILE PATH AFTER WEB FOLDER something like /images/grid.png"

//step3: захватить все peices вместе

String a ="http://"+ip.getHostAddress()+":"+request.getLocalPort()+""+request.getServletContext().getContextPath()+filepath;

Способ - 2 :

//Шаг: 1-получить абсолютный url

String path = request.getRequestURL().toString();

//Шаг: 2-затем подстрока с контекстным путем

path = path.substring(0, path.indexOf(request.getContextPath()));

//Шаг: 3-укажите путь к файлу после веб-папки

String finalPath = "GIVE YOUR FILE PATH AFTER WEB FOLDER something like /images/grid.png"
path +=finalPath;

мой Предложение

  1. сохранить файл, который вы хотите открыть в пакете по умолчанию исходной папки и открыть файл непосредственно, чтобы сделать вещи простыми и ясными.
    Примечание : это происходит потому, что он присутствует в пути к классу вашей IDE, если вы кодируете без IDE, то держите его вместо вашего Java скомпилированного файла класса или в общей папке, к которой вы можете получить доступ.

УДАЧИ


Вы можете написать ServletContextListener:

public class MyServletContextListener implements ServletContextListener
{

    public void contextInitializedImpl(ServletContextEvent event) 
    {
        ServletContext servletContext = event.getServletContext();
        String contextpath = servletContext.getRealPath("/");

        // Provide the path to your backend software that needs it
    }

    //...
}

и настроить его в интернете.в XML

<listener>
    <listener-class>my.package.MyServletContextListener</listener-class>
</listener>