47

Spring MVC で Web アプリケーションのルート/ベース URL を取得する最良の方法は何ですか?

ベース URL = http://www.example.comまたはhttp://www.example.com/VirtualDirectory

4

13 に答える 13

29

ベース URL が " http://www.example.com " の場合、"http://" なしで" www.example.com " の部分を取得するには、次のようにします。

コントローラーから:

@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public ModelAndView doSomething(HttpServletRequest request) throws IOException{
    //Try this:
    request.getLocalName(); 
    // or this
    request.getLocalAddr();
}

JSP から:

ドキュメントの上にこれを宣言します。

<c:set var="baseURL" value="${pageContext.request.localName}"/> //or ".localAddr"

次に、それを使用するには、変数を参照します。

<a href="http://${baseURL}">Go Home</a>
于 2013-03-30T13:01:50.973 に答える
18

独自のメソッドを作成して取得することもできます。

public String getURLBase(HttpServletRequest request) throws MalformedURLException {

    URL requestURL = new URL(request.getRequestURL().toString());
    String port = requestURL.getPort() == -1 ? "" : ":" + requestURL.getPort();
    return requestURL.getProtocol() + "://" + requestURL.getHost() + port;

}
于 2016-03-14T02:45:52.047 に答える
11

request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath())

于 2015-03-04T10:17:47.947 に答える
9

コントローラーでは、 を使用しますHttpServletRequest.getContextPath()

JSP では、Spring のタグ ライブラリを使用します: または jstl

于 2012-10-26T16:43:55.303 に答える
7

次のいずれかを注入しUriCompoenentsBuilderます。

@RequestMapping(yaddie yadda)
public void doit(UriComponentBuilder b) {
  //b is pre-populated with context URI here
}

. または、自分で作成します(サリムの回答に似ています):

// Get full URL (http://user:pwd@www.example.com/root/some?k=v#hey)
URI requestUri = new URI(req.getRequestURL().toString());
// and strip last parts (http://user:pwd@www.example.com/root)
URI contextUri = new URI(requestUri.getScheme(), 
                         requestUri.getAuthority(), 
                         req.getContextPath(), 
                         null, 
                         null);

その後、その URI から UriComponentsBuilder を使用できます。

// http://user:pwd@www.example.com/root/some/other/14
URI complete = UriComponentsBuilder.fromUri(contextUri)
                                   .path("/some/other/{id}")
                                   .buildAndExpand(14)
                                   .toUri();
于 2015-12-07T13:00:06.580 に答える
2

JSPで

<c:set var="scheme" value="${pageContext.request.scheme}"/>
<c:set var="serverPort" value="${pageContext.request.serverPort}"/>
<c:set var="port" value=":${serverPort}"/>

<a href="${scheme}://${pageContext.request.serverName}${port}">base url</a>

参照https://github.com/spring-projects/greenhouse/blob/master/src/main/webapp/WEB-INF/tags/urls/absoluteUrl.tag

于 2016-12-11T05:54:36.007 に答える
1
     @RequestMapping(value="/myMapping",method = RequestMethod.POST)
      public ModelandView myAction(HttpServletRequest request){

       //then follow this answer to get your Root url
     }

サーブレットのルート URl

jsp で必要な場合は、コントローラーに入り、ModelAndView にオブジェクトとして追加します。

または、クライアント側で必要な場合は、javascript を使用して取得します: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript

于 2011-02-16T10:22:32.357 に答える
0

この質問に対する答えは、ServletContextのみを使用してアプリケーションのURLを見つけることで、ルートURLが必要な特別な理由がない限り、代わりに相対URLを使用する必要がある理由がわかります。

于 2011-09-21T12:37:11.043 に答える