216

Spring Boot アプリケーションのコンテキスト ルートをプログラムで設定しようとしています。コンテキスト ルートの理由は、アプリにアクセスしlocalhost:port/{app_name}て、すべてのコントローラー パスをアプリに追加するためです。

これは、Web アプリのアプリケーション構成ファイルです。

@Configuration
public class ApplicationConfiguration {

  Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);

  @Value("${mainstay.web.port:12378}")
  private String port;

  @Value("${mainstay.web.context:/mainstay}")
  private String context;

  private Set<ErrorPage> pageHandlers;

  @PostConstruct
  private void init(){
      pageHandlers = new HashSet<ErrorPage>();
      pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
      pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
  }

  @Bean
  public EmbeddedServletContainerFactory servletContainer(){
      TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
      logger.info("Setting custom configuration for Mainstay:");
      logger.info("Setting port to {}",port);
      logger.info("Setting context to {}",context);
      factory.setPort(Integer.valueOf(port));
      factory.setContextPath(context);
      factory.setErrorPages(pageHandlers);
      return factory;
  }

  public String getPort() {
      return port;
  }

  public void setPort(String port) {
      this.port = port;
  }
}

これは、メイン ページのインデックス コントローラーです。

@Controller
public class IndexController {

  Logger logger = LoggerFactory.getLogger(IndexController.class);

  @RequestMapping("/")
  public String index(Model model){
      logger.info("Setting index page title to Mainstay - Web");
      model.addAttribute("title","Mainstay - Web");
      return "index";
  }

}

アプリケーションの新しいルートは にあるはずですがlocalhost:12378/mainstay、まだ にありlocalhost:12378ます。

Spring Boot がリクエスト マッピングの前にコンテキスト ルートを追加しない原因は何ですか?

4

19 に答える 19

440

なぜ独自のソリューションを展開しようとしているのですか。Spring-boot はすでにそれをサポートしています。

まだ持っていない場合は、application.propertiesファイルをに追加しますsrc\main\resources。そのプロパティ ファイルに、次の 2 つのプロパティを追加します。

server.contextPath=/mainstay
server.port=12378

更新 (Spring Boot 2.0)

Spring Boot 2.0 以降 (Spring MVC と Spring WebFlux の両方がサポートcontextPathされているため) は次のように変更されました。

server.servlet.context-path=/mainstay

その後、カスタム サーブレット コンテナーの構成を削除できます。コンテナーで何らかの後処理を行う必要がある場合はEmbeddedServletContainerCustomizer、構成に実装を追加できます (たとえば、エラー ページを追加するため)。

基本的に、内部のプロパティはデフォルトとして機能し、配信するアーティファクトの横にある別のプロパティを使用するか、JVM パラメータを追加することで、application.propertiesいつでもオーバーライドできます ( )。application.properties-Dserver.port=6666

リファレンス ガイド、特にプロパティセクションも参照してください。

クラスServerPropertiesEmbeddedServletContainerCustomizer. のデフォルトはcontextPathです""。コード サンプルでは、​​ を にcontextPath直接設定していTomcatEmbeddedServletContainerFactoryます。次に、ServerPropertiesインスタンスはこのインスタンスを処理し、パスから にリセットします""。(この行nullチェックを行いますが、デフォルトでは""常に失敗し、コンテキストをに設定して、""あなたのものを上書きします)。

于 2013-12-06T07:29:51.593 に答える
37

Spring Boot を使用している場合は、Bean の初期化を介してサーバー プロパティを構成する必要はありません。

代わりに、基本的な構成で 1 つの機能を使用できる場合は、アプリケーション構造applicationの下にあるという「プロパティ」ファイルで設定できます。src\main\resources「プロパティ」ファイルは 2 つの形式で利用できます

  1. .yml

  2. .properties

構成を指定または設定する方法は、形式によって異なります。

特定のケースで、拡張子を使用することにした場合、次の構成設定で呼び出さ.propertiesれるファイルがありますapplication.propertiessrc\main\resources

server.port = 8080
server.contextPath = /context-path

OTOH、.yml拡張子 (つまり) を使用する場合は、次の形式 (つまり)application.ymlを使用して構成を設定する必要があります。YAML

server:
    port: 8080
    contextPath: /context-path

Spring Boot のより一般的なプロパティについては、以下のリンクを参照してください。

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

于 2016-02-09T14:34:31.840 に答える
1

application.propertiesas で設定できますAPI_CONTEXT_ROOT=/therootpath

そして、以下で説明するように、Java クラスでアクセスします。

@Value("${API_CONTEXT_ROOT}")
private String contextRoot;
于 2016-12-09T10:47:41.543 に答える
1

server.contextPath=/mainstay

JBOSS に war ファイルが 1 つあれば、うまくいきます。それぞれが jboss-web.xml を含む複数の war ファイルの中で、機能しませんでした。コンテンツを含む WEB-INF ディレクトリ内に jboss-web.xml を配置する必要がありました

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <context-root>mainstay</context-root>
</jboss-web>
于 2017-11-01T13:08:22.503 に答える
1

Spring Boot 1.5 では:

に次のプロパティを追加しますapplication.properties

server.context-path=/demo

注:/demoはコンテキスト パス URL です。

于 2017-11-11T16:11:16.403 に答える
0

次のようにする必要があります: server.servlet.context-path = / demo 引用符がないことに注意してください '/' で始まる値のみ この値は application.properties ファイルに入ります

于 2020-04-25T23:37:27.560 に答える
0
<!-- Server port-->

server.port=8080

<!--Context Path of the Application-->

server.servlet.context-path=/ems
于 2020-04-15T18:11:42.340 に答える