在摸索中漸漸找到了屬于自己的學(xué)習(xí)方式 learn ** in action 而且喜歡上了in action 系列的書
我的記性實(shí)在不是很好 但是我知道自己擅長(zhǎng)的是歸納和總結(jié) 加上我是完美主義者 所以到現(xiàn)在很多問題我都從根源上理解和解決了 所以in action 的學(xué)習(xí)方法是最適合我的
Struts的核心是MVC的控制層 它將模式和視圖連接起來(lái) 可以用來(lái)定義超鏈 表單和用戶動(dòng)作組件
超鏈可以這樣






也可以














通過(guò)實(shí)現(xiàn)的ActionForm來(lái)處理表單數(shù)據(jù)和完成驗(yàn)證的工作
定位和實(shí)例化ActionForm



在html表單中的action 指向一個(gè)Action 用這個(gè)Action來(lái)處理數(shù)據(jù) Struts會(huì) 自動(dòng)把其看作form來(lái)處理
看例子






























html的表單交出以后 根據(jù)action屬性轉(zhuǎn)向一個(gè)url來(lái)處理 在這里就是LogonSubmit 它通過(guò)LogonAction來(lái)處理數(shù)據(jù)
強(qiáng)制把其數(shù)據(jù)作為了Form的字段數(shù)據(jù) 就像Hibernate持久化了一個(gè)POJO一樣 然后通過(guò)一定的邏輯來(lái)進(jìn)行驗(yàn)證from和想要的數(shù)據(jù)是否符合 從而實(shí)現(xiàn)了驗(yàn)證
例子
文件目錄樹
webtest
| |-- index.jsp
|
| |-- META-INF
| | |-- MANIFEST.MF
| |
| |-- pages
| | |-- logon.jsp
| | |-- struts-power.gif
| | |-- velocity-power.gif
| | |-- welcome.jsp
| |
| |-- WEB-INF
| | |-- struts-bean.tld
| | |-- struts-config.xml
| | |-- struts-html.tld
| | |-- struts-logic.tld
| | |-- struts-nested.tld
| | |-- struts-tiles.tld
| | |-- tiles-defs.xml
| | |-- validation.xml
| | |-- validator-rules.xml
| | |-- web.xml
| |
| | |classes
| | |
| | | |-- ergal
| | | | |-- Constants.class
| | | | |-- LogoffAction.class
| | | | |-- LogonAction.class
| | | | |-- LogonForm.class
| | | | |-- UserDirectory.class
| | | | |-- UserDirectoryException.class
| | | |
| | | |-- resources
| | | | |-- application.properties
| | | | |-- users.properties
| | |-- lib
......
| | |
| | |--src
| | | |-- build.xml
| | |
| | | |-- java
| | | |
| | | | |-- ergal
| | | | | |-- Constants.java
| | | | | |-- LogoffAction.java
| | | | | |-- LogonAction.java
| | | | | |-- LogonForm.java
| | | | | |-- UserDirectory.java
| | | | | |-- UserDirectoryException.java
| | | | |
| | | |-- resources
| | | | |-- application.properties
| | | | |-- users.properties
核心部分
index.jsp




直接轉(zhuǎn)向welcome.jsp
welcome.jsp






























這里用了taglib 里面是個(gè)邏輯引用 定義在web.xml中
這里還用了present和notPresent 用來(lái)判別制定對(duì)象是否存在來(lái)決定是否處理內(nèi)容
logon.jsp



























這里的action指向了logonSumit
現(xiàn)在來(lái)看struts-config.xml


































































先是給一個(gè)ActionForm命名 并制定類 然后定義全局可用的forwards 都賦予一個(gè)邏輯地址
然后action-mapping
<action
path="/logonSubmit"
type="ergal.LogonAction"
name="logonForm"
scope="request"
validate="true"
input="/pages/logon.jsp">
<forward
name="success"
path="/pages/welcome.jsp"/>
</action>
制定了actionForm和來(lái)源地址
Form很簡(jiǎn)單 就像一個(gè)POJO
LogonForm.java



















































ActionForm有個(gè)基本效驗(yàn)方法
ActionErrors
|
validate
(
ActionMapping
mapping, javax.servlet.ServletRequestrequest)
|
可以重寫這個(gè)方法 定制 主要用來(lái)檢驗(yàn)域是否都輸入了數(shù)據(jù)
驗(yàn)證Action
LogonAction.java






































































這里引用了另一個(gè)定制的一個(gè)驗(yàn)證數(shù)據(jù)的UserDirectory
UserDirectory.java







































































































































這里用了class的getClassLoder()方法 和ClassLoader的getResourceAsStream()方法
ClassLoader
|
getClassLoader
()
返回該類的類加載器。 |
InputStream
|
getResourceAsStream
(
String
name)
返回讀取指定資源的輸入流。 |
最后返回的是一個(gè)InpuStream
java.util
類 Properties
java.lang.Objectjava.util.Dictionary <K,V>
java.util.Hashtable < Object , Object >
java.util.Properties
public class Properties
Properties
類表示了一個(gè)持久的屬性集。
Properties
可保存在流中或從流中加載。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。
一個(gè)屬性列表可包含另一個(gè)屬性列表作為它的“默認(rèn)值”;如果未能在原有的屬性列表中搜索到屬性鍵,則搜索第二個(gè)屬性列表。
因?yàn)?
Properties
繼承于
Hashtable
,所以可對(duì)
Properties
對(duì)象應(yīng)用
put
和
putAll
方法。但強(qiáng)烈反對(duì)使用這兩個(gè)方法,因?yàn)樗鼈冊(cè)试S調(diào)用方插入其鍵或值不是
Strings
的項(xiàng)。相反,應(yīng)該使用
setProperty
方法。如果在“有危險(xiǎn)”的
Properties
對(duì)象(即包含非
String
的鍵或值)上調(diào)用
store
或
save
方法,則該調(diào)用將失敗。
load
和
store
方法按下面所指定的、簡(jiǎn)單的面向行的格式加載和存儲(chǔ)屬性。此格式使用 ISO 8859-1 字符編碼。可以使用
Unicode 轉(zhuǎn)義符
來(lái)編寫此編碼中無(wú)法直接表示的字符;轉(zhuǎn)義序列中只允許單個(gè) 'u' 字符。可使用 native2ascii 工具對(duì)屬性文件和其他字符編碼進(jìn)行相互轉(zhuǎn)換。
loadFromXML(InputStream)
和
storeToXML(OutputStream, String, String)
方法按簡(jiǎn)單的 XML 格式加載和存儲(chǔ)屬性。默認(rèn)使用 UTF-8 字符編碼,但如果需要,可以指定某種特定的編碼。XML 屬性文檔具有以下 DOCTYPE 聲明:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
注意,導(dǎo)入或?qū)С鰧傩詴r(shí) 不 訪問系統(tǒng) URI (http://java.sun.com/dtd/properties.dtd);該系統(tǒng) URI 僅作為一個(gè)惟一標(biāo)識(shí) DTD 的字符串:
<?xml version="1.0" encoding="UTF-8"?> <!-- DTD for properties --> <!ELEMENT properties ( comment?, entry* ) > <!ATTLIST properties version CDATA #FIXED "1.0"> <!ELEMENT comment (#PCDATA) > <!ELEMENT entry (#PCDATA) > <!ATTLIST entry key CDATA #REQUIRED> 重要的方法
String
|
getProperty
(
String
key)
用指定的鍵在此屬性列表中搜索屬性。 |
String
|
getProperty
(
String
key,
String
defaultValue)
用指定的鍵在屬性列表中搜索屬性。 |
void
|
load
(
InputStream
inStream)
從輸入流中讀取屬性列表(鍵和元素對(duì))。 |
void
|
store
(
OutputStream
out,
String
comments)
以適合使用
load
方法加載到
Properties
表中的格式,將此
Properties
表中的屬性列表(鍵和元素對(duì))寫入輸出流。
|
Enumeration
<?>
|
propertyNames
()
返回屬性列表中所有鍵的枚舉,如果在主屬性列表中未找到同名的鍵,則包括默認(rèn)屬性列表中不同的鍵。 |
這里用到了load方法從InputStream中加載流 然后用getProperty()方法
該類展示了如何從property文件中讀取 鍵值 并和傳值進(jìn)行比較
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
