SSH 2での経路問題

2705 ワード

今日プロジェクトをしている間に解けない問題に遭遇しました.私が構成したstruts 2 actionはresult対応のページにどうしてもジャンプできません.
 
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のロードとリソースファイルのロードは間違いありません.