背景
這次在項目中與到了jsp頁面中的struts标簽的一些技術點,初次接觸這些技術點的時候并沒有感覺到陌生,反而感覺跟angular的機制非常的思想,是以學起來也非常的簡單
路徑問題
jsp中我們采用相對路徑還是絕對路徑,這個問題很是讓人頭痛,原因就是如果采用的是相對路徑那麼他也有他的好處就是代碼非常的靈活,但是如果我們想複制粘貼代碼就會非常的麻煩,原因是因為你的相對路徑都是不一樣的,是以很容易出錯,
這個時候我們出現的解決方案就是使用
${pageContext.request.contextPath},
他的作用就是去出部署的應用程式名,不管部署路徑如何,他的所有路徑都是正确
例如我們的圖檔的路徑是
/images/title.gif”
,為了通路出錯我們在前面加上
${pageContext.request.contextPath},
這樣你的路徑就不會再出錯了,可以達到同樣效果的還有
例如我們form表單
action="${pageContext.request.contextPath }/servlet/addBookServlet",我請求的就是servlet中的addBookServlet方法
Why jsp頁面 in WEB-INF
為什麼我的jsp頁面都要放到WEB-INF下面,原因就是如果我們放到了WEB-IF下面,那麼我們隻有通過請求才可以通路,是以很好的實作了我們項目的隐蔽性,而且我們不是讓客戶直接通路jsp頁面的而是通過請求來進行通路
說到通路的請求了,那麼我來實作如何當我們的Action傳回給Struts的時候,可以給我們正常的傳回我的頁面,這裡涉及到直接根據路徑進行傳回,還有重定向傳回
重定向傳回與轉發傳回非常的相似,也非常容器弄混,是以我們通過舉一個例子來說一下如何區分
重定向就是我去A家借錢,可是A家傳回資訊告訴我說他們家沒有錢,不過他告訴我B家有錢,是以我就又去B家借錢,然後通過兩次請求我就終于借到了錢
轉發就是我就A家找老王借錢,但是老王沒有錢,但是他告訴他的妻子說,他妻子有錢,是以他就把錢借給我了,是以我隻請求了一次
重定向的缺點就是重定向無法儲存資料,原因就在于他請求了兩次
<result name="updateSuccess" type="redirectAction">adminCategorySecond_findAll.action?page=</result>
我們在使用的時候type=“redirectAion” 或者是type=“redirect”他們連個是有差別的,第一個熱directAion是不用代action字尾的,他自動會幫助我們加上去,而redirect是必須要寫上字尾的
Struts标簽
1<%@taglib prefix=”s” url=”/struts-tags”%>
這是表示的我們引入Struts的标簽庫,我們可以使用struts中的标簽。struts中的标簽不依賴與表現技術,而且他還提供了大量的标簽,可以在我們的表現層中使用
2表示判斷使用,如果我們的狀态為1則顯示這裡面的内容
<s:if test="#order.state == 1">
<a href="${ pageContext.request.contextPath }/order_findByOid.action?oid=<s:property value="#order.oid" />">付款</a>
</s:if>
3.疊代iteratorlist代碼
其實我感覺就跟我們 angular4是一樣的,ngfor标簽來實作循環進行顯示到頁面上
<s:iterator var="orderItem" value="#order.orderItems">
<tr>
<td width="60">
<img src="${ pageContext.request.contextPath }/<s:property value="#orderItem.product.image"/>"/>
</td>
<td>
<s:property value="#orderItem.product.pname"/>
</td>
<td>
<s:property value="#orderItem.subtotal"/>
</td>
<td class="quantity" width="60">
<s:property value="#orderItem.product.shop_price"/>
</td>
<td width="140">
<span class="subtotal">¥<s:property value="#orderItem.subtotal"/></span>
</td>
</tr>
</s:iterator>
4.标簽
它用于通路我們Action中棧值所存儲的屬性,這個表示的是對象中屬性的值
<s:property value="#orderItem.subtotal"/>
5使用公共頁面
在我們後天的時候,當我們遇到公共的功能的時候我們會抽取出來封裝成一個類,每當使用的時候我們調用就可以了 ,在前台頁面上也可以實作這個功能,我們把菜單頁面進行抽取。這句代碼的意思就是我們包含于menu.jsp頁面
<
%@ include file="menu.jsp" %>
總結
也許隻有一步步的走過才知道這其中的感覺吧!