導航:首頁 > 編程語言 > strutsjava代碼使用標簽

strutsjava代碼使用標簽

發布時間:2025-10-09 22:14:27

① 怎麼在 js 代碼中使用 jsp 標簽或 java 代碼

JSP 標簽還是很方便的,比如 Struts、Spring 等提供給我們的 JSP 標簽,可以用它們來獲取變數或進行一些計算。比如
struts2 的 <s:url value="/admin/unmi.action"/>
會為我們自動在前面附加上應用上下文,如實際會生成
/testsite/admin/unmi.action。還有更多更方便的標簽使用,比如用標簽獲取到 session 或請求中的數據作為 js
的變數等。

引申此話題的,其實不光是在 JS 中使用 JSP 標簽,可用 JSP 標簽的地方當然可以直接寫 Java 代碼,即 ScriptLet 代碼。

如果是在 JSP 中內嵌的 JS 代碼,那當然好辦,JSP 文件中能用什麼標簽,js 代碼中也能隨便用,因為 JSP 標簽會先在服務端解釋生成相應的 JS 代碼,丟給客戶端執行。

那如果是在單獨的 JS 文件中想要使用 JSP 標簽,該如何辦呢?還直接像 JSP 那樣使用標簽的話,對不起 JS
文件中給你原樣顯示出來,因為 JS 文件不被伺服器端解釋。其實到現在問題也基本有了答案,要解決的問題就是要讓服務端去解釋你的標簽,有兩種方案。

一. js 文件命名為 JSP 文件,寫 js 內容,其中用標簽,然後用 <script src="/scripts/tags.js.jsp"></script> 把該 JSP 文件當作 JS 文件那樣引入。

因為 JSP 文件會被服務端解釋,所以把該 JSP 文件當作 JS 文件來寫,JS 文件里應該是什麼,你的 JSP
文件也應該輸出什麼,只是裡面可以放標簽,要知道它將會輸出什麼。用 <script> 來引入的話,頁面順理的把它認為是一段外部 JS
代碼。

例如文件 /scripts/tags.js.jsp 中的內容是:

<%@ taglib prefix="s" uri="/struts-tags" %>
var currentUser = '<s:property value="#session.userName" />';
alert("currentUser: " + currentUser);

那麼在某個網頁中用 <script src="/scripts/tags.js.jsp"></script> 引入該文件時,上面的 JS 代碼將會彈出當前 session 中的用戶名來。

上面代碼執行都沒問題的,但是你直接瀏覽 http://unmi/testsite/scripts/tags.js.jsp 你看到的是擠在一團的代碼,不像查看普通 JS 文件那樣有清晰的換行和退格,原因是瀏覽器默認只認擴展名,它的 mime 類型,也就是 Content-Type text/html。要讓它更像是個 JS 文件那得給它加上響應類型的設置,在 tags.js.jsp 文件第一行加上:

<%response.setContentType("text/javascript;charset=utf-8");%>

這時候對於瀏覽器來說,無論從哪個方向來看它都是個切切實實的 JS 文件,只擴展名不同罷了。

上面的方法實際表現是沒什麼問題的,不過還有兩點不那麼完美,第一,文件名看起來像 JSP 文件,有些令人誤解;第二,在 IDE 中打開該 JSP 文件,沒法應用 JS 的語法加亮,給編輯帶來不少麻煩。下面的方法充分解決前面兩個問題。

二. 直接在 JS 文件中使用 JSP 標簽

講下原理,不是說應用伺服器端默認不解釋 JS 中的標簽嗎,那我們可以讓個別的 JS 文件同樣受到伺服器端的關注,不是把 js 原文直接拋給客戶端,而是先解釋其中的標簽,或是其中的 java 代碼。

Tomcat 這種應用伺服器我們通常也會稱它為 Servlet 容器,因為它執行的是 Servlet,JSP 自然也是 Servlet。在 %TOMCAT_HOME%/conf/web.xml 中我們可以看到實際處理 JSP 文件的 Servlet 是:

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>

org.apache.jasper.servlet.JspServlet,所以我們可以在自己應用的 web.xml
文件中配置某些特別的文件同樣由 JspServlet 來處理。比如要特別處理 /scripts/tags.js 文件,在應用的 web.xml
中只要加上:

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/scripts/tags.js</url-pattern>
</servlet-mapping>

注意,上面是 Tomcat 6.x 或更早版中應用的 web.xml 的寫法,後來 servlet-mapping 中
url-pattern 可同時寫多個,加上 Tomcat 7 自身的古怪,這一設置會覆蓋掉原 jsp 的設置,所以在 Tomcat 7
中應用必須配置成如下(也就是必須默認項也帶上,然而列出自己的希望被當作 jsp 的 js 文件,可多個,不把 *.jsp/*.jspx
帶上的話,你原有的 jsp 會當作文本文件直接展示出源碼來):

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>/scripts/tags.js</url-pattern>
</servlet-mapping>

我們配置 /scripts/tags.js 要由 JspServlet 來處理,不會影響到現有的其他任何 JS 文件。

那現在的 /scripts/tags.js 可不是普通的 js 文件了,它可是具有放置 JSP 標簽和寫 Java
代碼的超能力了,因為其中的 JSP 標簽和 Java 代碼首先會經由服務端來解釋。它集 JS 和 JSP 於一身,另外也別忘了給該 JS
文件前面加上代碼:

<%response.setContentType("text/javascript;charset=utf-8");%>

不然單獨瀏覽它也就只是不那麼好看。

無疑,這是目前我能想的最完美的一種方式了,且兼容於其他的 Servlet 容器,也不用改動公共部分的東西。/scripts/tags.js 在 JS IDE 中打開也漂亮多了,因為它就是個 JS 文件,只是被賦予了 JSP 的功能。

② 如何在jsp頁面中使用struts2標簽

要在jsp中使用struts2.0的標簽,首先要在頁面使用taglib指令,將struts2的tld文件導入
<%@taglibprefix="s"uri="/struts-tags"%>

struts2的標簽主要分為兩大類:

  1. UI標簽 這個幾乎不怎麼用就不介紹了

  2. 非UI標簽

    if,elseif和else
    <s:iftest="link_type==1">//只有當test的的值為true時,才會執行if語句塊裡面的內容
    文字
    </s:if>
    <s:elseiftest="link_type==2">
    圖片
    </s:elseif>
    <s:else>
    -----
    </s:else>
    迭代標簽的使用
    iterator描述:
    用於遍歷集合(java.util.Collection)或枚舉值(java.util.Iterator)。
    <ol>
    <s:iteratorvalue="#request.names"status="stuts">
    <s:iftest="#stuts.odd==true">//判斷取出數據的奇偶性
    <li>White<s:property/></li>
    </s:if>
    <s:else>
    <listyle="background-color:gray"><s:property/></li>
    </s:else>
    </s:iterator>
    </ol>
    上述代碼的顯示效果就是相鄰的兩行顏色是區分開來的

    URL地址標簽,<s:url>用於生成一個URL地址,可以通過URL標簽指定的<s:param>
    子元素向URL地址發送請求參數
    <s:urlaction="">
    <s:paramname=""value=""></s:param>
    </s:url>

    超鏈接<ahref>一般和<s:url>標簽一起使用,用於帶多個參數。
    <ahref="
    <s:urlaction="">
    <s:paramname=""value=""></s:param>
    <s:paramname=""value=""></s:param>
    <s:paramname=""value=""></s:param>
    </s:url>">
    鏈接到...
    </a>


    set標簽,用於將某個值放入指定的范圍內。例如application,session等。
    <s:setname="user"value="userName"scope=」request」/>

    Struts2頁面開發中常用標簽使用規范:
    2.1.通過<inputname="userName"type="text"class=""size="15">
    往action中傳值,action中要有相應的屬性,並提供SET/GET方法。
    (在數量少時可以使用request.getParameter(「userName」);)

    2.2.在頁面顯示action傳來的數據,使用property標簽。需要顯示的數據從action中獲得。

    2.3.往action中的實體對象內傳值,使用textfield標簽。

    2.4.在頁面中判斷指定值使用<s:if>標簽。判斷數據從action中獲得。

    2.5.在頁面中需要循環列表顯示的數據使用<s:iterator>標簽,列表數據從action中獲得。

    2.6.URL地址和超鏈接可以使用<ahref>和<s:url>,在傳多值時建議<ahref>和<s:url>一起使用

③ java代碼中***.do的含義。

*.do 和java沒有直接關系,這是apache struts 1框架發明的東西. struts 2框架默認為*.action
當提交form後 ,WEB container會在struts-config.xml 找到/resourceSearchAction.do對應的回Action類,然後答action處理完成業務邏輯後,會返回一個跳轉關鍵字,例如"SUCCESS"或"FAILED"等,WEB container根據關鍵字到struts-config.xml 找到對應頁面鏈接,並跳轉到指定頁面。

當然以上是單純使用struts框架的情況,如果增加了spring框架的話會麻煩些。

這里WEB container是JavaEE術語, 特指能處理servlet和jsp的處理器

閱讀全文

與strutsjava代碼使用標簽相關的資料

熱點內容
java自己封裝orm 瀏覽:775
常熟三軸數控編程怎麼樣 瀏覽:986
幼兒學編程的APP有哪些 瀏覽:635
編程貓家長留言怎麼說 瀏覽:479
小藍車的app叫什麼 瀏覽:300
實習生app推廣是什麼 瀏覽:935
什麼網站不怎麼需要資質 瀏覽:189
無線網路連接的mac 瀏覽:360
mongodbjava驅動下載 瀏覽:372
蘋果app授權店有哪些 瀏覽:353
淘寶怎麼看品類數據 瀏覽:750
java返回空數組 瀏覽:67
word圖片導出到文件夾 瀏覽:118
如何保存網站里的文件 瀏覽:570
如何查看伺服器鏡像文件 瀏覽:480
蘋果型號a1700圖片高防 瀏覽:567
web文件上傳後伺服器端如何接收 瀏覽:287
word的常用工具欄有哪些 瀏覽:868
78升級螢石雲 瀏覽:271
eclipsejava生成可執行文件 瀏覽:822

友情鏈接