programing

봄 부팅 웹 앱이 준비된 후 자동으로 브라우저 시작

topblog 2023. 7. 12. 22:11
반응형

봄 부팅 웹 앱이 준비된 후 자동으로 브라우저 시작

스프링 부팅 애플리케이션을 시작한 후 브라우저를 자동으로 실행하려면 어떻게 해야 합니까?브라우저가 로드되면 사용자가 인덱스 페이지를 보고 웹 앱과 상호 작용을 시작할 수 있도록 웹 앱이 배포되고 요청을 처리할 준비가 되었는지 확인하는 수신기 메서드 콜백이 있습니까?

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    // launch browser on localhost 
}

아래 코드가 작동했습니다.

@EventListener({ApplicationReadyEvent.class})
void applicationReadyEvent() {
    System.out.println("Application started ... launching browser now");
    browse("www.google.com");
}

public static void browse(String url) {
    if(Desktop.isDesktopSupported()){
        Desktop desktop = Desktop.getDesktop();
        try {
            desktop.browse(new URI(url));
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }else{
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec("rundll32 url.dll,FileProtocolHandler " + url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
@SpringBootApplication
@ComponentScan(basePackageClasses = com.io.controller.HelloController.class)
public class HectorApplication {

    public static void main(String[] args) throws IOException {
       SpringApplication.run(HectorApplication.class, args);
       openHomePage();
    }

    private static void openHomePage() throws IOException {
       Runtime rt = Runtime.getRuntime();
       rt.exec("rundll32 url.dll,FileProtocolHandler " + "http://localhost:8080");
    }
}

자바 코드로 할 수 있습니다.봄 부츠에 기성품이 들어 있는지 잘 모르겠습니다.

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class Browser {
    public static void main(String[] args) {
        String url = "http://www.google.com";

        if(Desktop.isDesktopSupported()){
            Desktop desktop = Desktop.getDesktop();
            try {
                desktop.browse(new URI(url));
            } catch (IOException | URISyntaxException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{
            Runtime runtime = Runtime.getRuntime();
            try {
                runtime.exec("xdg-open " + url);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

저는 최근에 직접 이 문제를 해결하기 위해 노력하고 있습니다. 이 질문을 받은 지 오래되었지만, 저의 작동(그리고 매우 기본적인/간단한) 해결책이 아래에 나와 있습니다.이것은 당신의 앱에서 필요에 따라 리팩터로 작동하기를 원하는 모든 사람들을 위한 출발점입니다!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.awt.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        openHomePage();
    }

    private static void openHomePage() {
        try {
            URI homepage = new URI("http://localhost:8080/");
            Desktop.getDesktop().browse(homepage);
        } catch (URISyntaxException | IOException e) {
            e.printStackTrace();
        }
    }
}

응용 프로그램을 다음과 같이 패키지화하는 경우WAR파일, 응용 프로그램 서버 구성 등TomcatIDE를 통해 구성된 응용 프로그램 서버를 다시 시작하면 IDE에서 브라우저 탭을 자동으로 열 수 있습니다.

응용프로그램을 패키지로 만들려는 경우JAR파일, IDE는 웹 브라우저를 열 수 없으므로 웹 브라우저를 열고 원하는 링크를 입력해야 합니다.localhost:8080하지만 개발 단계에서는 이러한 지루한 단계를 밟는 것이 매우 지루할 수 있습니다.

스프링 부트 응용 프로그램이 준비된 후 Java 프로그래밍 언어로 브라우저를 열 수 있습니다.다음과 같이 타사 라이브러리를 사용할 수 있습니다.Selenium또는 다음 코드 스니펫을 사용합니다.

브라우저를 여는 코드 조각입니다.

@EventListener({ApplicationReadyEvent.class})
private void applicationReadyEvent()
{
    if (Desktop.isDesktopSupported())
    {
        Desktop desktop = Desktop.getDesktop();
        try
        {
            desktop.browse(new URI(url));
        } catch (IOException | URISyntaxException e)
        {
            e.printStackTrace();
        }
    } else
    {
        Runtime runtime = Runtime.getRuntime();
        String[] command;

        String operatingSystemName = System.getProperty("os.name").toLowerCase();
        if (operatingSystemName.indexOf("nix") >= 0 || operatingSystemName.indexOf("nux") >= 0)
        {
            String[] browsers = {"opera", "google-chrome", "epiphany", "firefox", "mozilla", "konqueror", "netscape", "links", "lynx"};
            StringBuffer stringBuffer = new StringBuffer();

            for (int i = 0; i < browsers.length; i++)
            {
                if (i == 0) stringBuffer.append(String.format("%s \"%s\"", browsers[i], url));
                else stringBuffer.append(String.format(" || %s \"%s\"", browsers[i], url));
            }
            command = new String[]{"sh", "-c", stringBuffer.toString()};
        } else if (operatingSystemName.indexOf("win") >= 0)
        {
            command = new String[]{"rundll32 url.dll,FileProtocolHandler " + url};

        } else if (operatingSystemName.indexOf("mac") >= 0)
        {
            command = new String[]{"open " + url};
        } else
        {
            System.out.println("an unknown operating system!!");
            return;
        }

        try
        {
            if (command.length > 1) runtime.exec(command); // linux
            else runtime.exec(command[0]); // windows or mac
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }    
}

Selenium을 사용하여 브라우저 열기

셀레늄 라이브러리를 사용하려면 다음 종속성을 에 추가합니다.pom.xml파일.

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>

그런 다음 기본 클래스에 다음 코드 조각을 추가합니다.

@EventListener({ApplicationReadyEvent.class})
private void applicationReadyEvent()
{
    String url = "http://localhost:8080";

    // pointing to the download driver
    System.setProperty("webdriver.chrome.driver", "Downloaded-PATH/chromedriver");
    ChromeDriver chromeDriver = new ChromeDriver();
    chromeDriver.get(url);
}

알림: 다음과 같은 대부분의 인기 있는 브라우저를 사용할 수 있습니다.FirefoxDriver,OperaDriver,EdgeDriver그러나 브라우저 드라이버를 미리 다운로드해야 합니다.

Runtime rt = Runtime.getRuntime();
        try {
            rt.exec("cmd /c start chrome.exe https://localhost:8080");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

위의 코드는 저에게 효과가 있었습니다.크롬을 바꿈.exe를 선택한 브라우저로 이동하고 원하는 URL로 이동합니다.참고: http 또는 https와 같은 구성을 포함해야 하며, 선택한 브라우저를 설치해야 합니다. 그렇지 않으면 브라우저를 자동으로 열지 않고 앱이 실행됩니다.하지만 창에서만 작동합니다.

언급URL : https://stackoverflow.com/questions/27378292/launch-browser-automatically-after-spring-boot-webapp-is-ready

반응형