SSH 2での経路問題
2705 ワード
今日プロジェクトをしている間に解けない問題に遭遇しました.私が構成したstruts 2 actionはresult対応のページにどうしてもジャンプできません.
struts 2.xmlはこう書きます.
返される結果はsuccessで、timline.jspにジャンプしても問題ありませんが、timeline.jspは表示できません.最初はパス絶対パスに対する問題だと思い、packageのnamespaceをデフォルトに設定しました.再実行すると、プログラムはtimeline.jspに戻ることができます.
よく考えてみると、先端の問題かも?するとFireDebugがジャンプして生成したHtmlと対応するフロントエンドログを開きます.
私は拭いて、とても穴のお父さん、すべてのJSバッグと資源はすべて探し当てていません.JSPを細かくレビューしてみると、フロントエンドの導入されたJSはすべて相対経路で書かれていて死んでいることがわかりました.
例:
このパスjs.css.style.cssは相対パスを使用していますが、私のactionが存在するpackageはnamespceを構成しているので、actionが要求を実行してからtimeline.jspに戻ると、この相対パスが変わり、JSPはlocalhost:80//アプリケーション名/user/js/css/style.cssをロードします.
解決策は、jspに絶対パスを用いてjsとリソースをロードすることであり、JSPファイルでは以下のように修正されます.
これにより、どこからJSPへのアクセス要求が来ても、JSのロードとリソースファイルのロードは間違いありません.
struts 2.xmlはこう書きます.
<package name="timelineUser" extends="struts-default" namespace="/user">
<action name="user_login" class="com.hywang.timeline.actions.UserAction" method="login">
<result name="success">/timeline.jsp</result>
<result name="error">login.jsp</result>
</action>
返される結果はsuccessで、timline.jspにジャンプしても問題ありませんが、timeline.jspは表示できません.最初はパス絶対パスに対する問題だと思い、packageのnamespaceをデフォルトに設定しました.再実行すると、プログラムはtimeline.jspに戻ることができます.
よく考えてみると、先端の問題かも?するとFireDebugがジャンプして生成したHtmlと対応するフロントエンドログを開きます.
私は拭いて、とても穴のお父さん、すべてのJSバッグと資源はすべて探し当てていません.JSPを細かくレビューしてみると、フロントエンドの導入されたJSはすべて相対経路で書かれていて死んでいることがわかりました.
例:
<link rel="stylesheet" href="js/css/style.css" type="text/css" media="screen" />
このパスjs.css.style.cssは相対パスを使用していますが、私のactionが存在するpackageはnamespceを構成しているので、actionが要求を実行してからtimeline.jspに戻ると、この相対パスが変わり、JSPはlocalhost:80//アプリケーション名/user/js/css/style.cssをロードします.
解決策は、jspに絶対パスを用いてjsとリソースをロードすることであり、JSPファイルでは以下のように修正されます.
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
request.equals("");
%>
<!-- CSS -->
<link href="<%=basePath%>js/css/timeline.css" rel="stylesheet">
<link rel="stylesheet" href="<%=basePath%>js/css/style.css" type="text/css" media="screen" />
<link rel="stylesheet" href="<%=basePath%>js/css/fx.slide.css" type="text/css" media="screen" />
<link rel="stylesheet" href="<%=basePath%>js/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="<%=basePath%>js/bootstrap/css/bootstrap-responsive.min.css">
これにより、どこからJSPへのアクセス要求が来ても、JSのロードとリソースファイルのロードは間違いありません.