1

私のアプリケーションでは、struts2を使用し、パスの問題を解決するための基本アクションを作成します。

class BaseAction{
  private String path;
  static{
  HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();+"/";
  }
}

次に、他のすべてのアクションがこの基本アクションを拡張します。

私のjspページで、ベースとしてパスを追加します。

xx.jsp:

....
<head>
  <base href="<s:property value='path'/>">
  <script ... src="res/test.js" />
</head>

それは私自身のマシンでうまく機能します。

http:// localhost:8080 / app test.jsは、「http:// localhost:8080 / app / res/test.js」で見つけることができます。

しかし、他の人が私のアプリにアクセスしようとすると、次のようになります。

http://192.168.xx:8080/app

現在、ブラウザは引き続き「http:// localhost:8080 / app / res/test.js」でtest.jsをダウンロードしようとします。

もちろん、それを取得することはできません。実際のパスは次のようになります: http://192.168.xx:8080 / app / res / test.js

以来、「パス」はアクションのハードコードですが、これを修正するためのアイデアはありますか?

4

3 に答える 3

3

初期化ブロックでstaticは、リクエストが利用可能になるとは思いません。私はします:

<base href="${request.contextPath}" />
于 2011-03-30T11:16:32.180 に答える
0

リモート ホストとポートではなく、ローカル ホストとポートをベース パスに設定しています。

結局、これは基本パスを作成するための適切な構造ではありません。代わりに、次のように作成することをお勧めします。

path = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath()) + "/";

または、JSTL/EL で適切に

<c:set var="r" value="${pageContext.request}" />
<base href="${fn:replace(r.requestURL, r.requestURI, r.contextPath)}/" />
于 2011-03-30T12:31:56.313 に答える