?? struts2.txt
字號:
一、struts2的請求處理過程
通過url.action找到struts2的過濾器
過濾器在src的在struts.xml中找到action標簽的name屬性,
進而通過class屬性確定真正的action,通過
method屬性確定action方法,如果不寫method默認是
execute方法
被調用方法在執行結束前返回一個字符串通過這個字符串在struts.xml
action標簽中找到對應的頁面轉發。
二、struts2與strutx1.X的比較
相同點:
都是mvc
struts2:
沒有form可以直接使用后臺的pojo
action是一個pojo,方法名可以隨意給定
核心配置文件是struts.xml在src的根目錄下
struts在與spring整合時更規范
struts1.X:
可要加載數據必須有form其form必須繼承于ActionForm
action不是一個pojo而是要繼承于Action
核心配置文件是struts-config.xml在/web-inf/目錄下
struts在與spring整合時不是很規范,通過struts1.x的
插件將struts與spring整合在一起。
三、struts2如何實現
1、引入struts2的相關類包
2、修改web.xml加入一個監聽器
3、在src的根目下加入struts.xml
4、寫action,寫jsp頁面。
四、在struts2中如何加載request、session對象
實現RequestAware、SessionAware接口加入類型是Map有session或
request屬性及其set、get方法,通過put或get方法從map中取值。
原理:
1、調用方法之前將HttpServertRequest的值通過put方法注入
到Map中
2、調用結束后將map中的值再寫入到HttpServertRequest對象中。
五、如何確定到底調用action的那一個方法
<action method="方法"/>
在url處寫"name!方法名.action"
六、struts2與spring整合
1、在web.xml中加入一個監聽器,加載applicationContext.xml
2、修改struts.xml中action標簽的class屬性,其指的不是具體的action
而是applicationContext.xml中bean標簽的id屬性。
3、在applicationContext.xml中加入一個bean標記,
id屬性與struts.xml中的class屬性值必須對應,class
屬性說明具體的action
一、struts2的請求處理過程
通過url.action找到struts2的過濾器
過濾器在src的在struts.xml中找到action標簽的name屬性,
進而通過class屬性確定真正的action,通過
method屬性確定action方法,如果不寫method默認是
execute方法
被調用方法在執行結束前返回一個字符串通過這個字符串在struts.xml
action標簽中找到對應的頁面轉發。
struts中可以有多個配置文件,一般是一個功能模板一個,不同團隊不影響,實現如下:
1、在/WEB-INF/下加入新的struts-config.xml文件
2、在web.xml中在ActionServlet的配置中說明具體的struts-config.xml文件所在位置
多個文件用,分隔開。
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config-1.xml,
/WEB-INF/struts-config-2.xml</param-value>
</init-param>
對于spring有多個applicationContext.xml該如何處理
struts2.0的特點
1、form是一個pojo
2、action是一個pojo,所以struts2.0與框架的藕合度非常低。
實現Action時有時會繼承于ActionSupport,
覆蓋execute方法,從而創建一個Action。
因為ActionSupport提供了很多方法可以為開發提供方便。
3、支持依賴注入,主要借助于spring來實現
4、支持攔截處理,相當于是aop
綜上struts2.0吸了spring及webwork2的優點,是強強聯合的產品。
struts2.0環境配置
1、引入struts類包
2、修改web.xml,說明加載struts的監聽器,在啟動tomcat容器時通過監聽器
加載struts2核心控制類。
<filter>
<filter-name>webwork</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、在src根目錄下加入struts.xml文件,說明具體action及相應的跳轉
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="login" namespace="" extends="struts-default">
<action name="login" class="action.LoginAction" method="login">
<result name="success"></result>
<result name="input"></result>
<result>success.jsp</result>
</action>
</package>
二、加載多個struts.xml文件
struts.xml不變
在struts.xml中加入
<include file="struts-1.xml"/>
struts2.0實現登陸
1、寫一個pojo
public class UsersVO
{
private String userName;
private String pwd;
//get及set方法
}
2、寫一個Action
public class LoginAction
{
private UsersVO user;
//get及set方法
public String login()
{
if("accp".equals(user.getUserName) && "accp".equals(user.getPwd))
{
return "success";
}
return "error";
}
}
3、配置struts.xml文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="login" namespace="" extends="struts-default">
<action name="login" class="action.LoginAction" method="login">
<result name="success"></result>
<result name="input"></result>
<result>success.jsp</result>
</action>
</package>
4、在jsp頁面中調用action
<s:form action="login">
用戶名<input name="user.userName" type="text">
<s:passward name="user.pwd" label="密碼"/>
<s:submit/>
</s:form>
struts2.0與spring2.0的結合
1、在/WEB-INF/中加入applicationContext.xml文件并引入spring相關的類包
2、applicaitonContext.xml中Action配置信息如下:
<bean id="insert" class="struts.MakeAction">
<property name="facade">
<ref local="facadeProxy" />
</property>
</bean>
3、在web.xml文件中指定spring的監聽器,加載applicationContext.xml文件
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
4、修改src根目下的struts.xml中的action標簽,其class不再指向真正的Action類,而是spring的一個bean的ID名稱
<action name="insert" class="insert" method="insert">
<result name="error">/error.jsp</result>
<result name="success">/succ.jsp</result>
</action>
九、ognl語言
#:
1、取request、application、session中的值
<s:property value="#request.user.userName"/>
2、定義一個Map
<s:set name="list" value="#{1:'a',2:'b',3:'c'}"/>
十、將值直接映射到List集合中
buies[0].buyID
buies[1].buyName
struts2中的相關標簽:
非ui組件
--判斷
<s:if test="#request.user.userName=='張三'">
是張三
</s:if>
<s:elseif test="#request.user.userName=='李四'">
是李四
</s:elseif>
<s:else>
不知道
</s:else>
--迭代
<s:iterator value="#request.users" id="user1" state="state">
<s:property value="#user1.userName"/>
</s:iterator>
--設置set
name 是 String 變量名字
scope 否 String 變量作用域,可以為application, session, request, page, 或action.
value 否 Object/String 將會賦給變量的值
id 否 Object/String 用來標識元素的id。在UI和表單中為HTML的id屬性
--顯示屬性
<s:property value=""/>
ui組件
下拉列表
語法
<s:select list="" listKey="" listValue="" value="" label=""/>
list:代表數據來源于一個集合
listKey:顯示的值
listValue:真正的值
value:如果listValue中的值與value中的值相等,則對應項會選中
label:顯示標簽名
實例:
1、常數
<s:select list="#{1:'a1',2:'a2',3:'a3'}" listKey="key"
listValue="value" value="{'a1','a2'}"
2、可以取在application、session、request中的對象
<s:select list="#request.sexes" listKey="name" listValue="code"
value="{'01'}"/>
復選框:
1、普通集合
<s:checkboxlist name="skills1"
label="Skills 1"
list="{ 'Java', '.Net', 'RoR', 'PHP' }"
value="{ 'Java', '.Net' }" />
2、hashMap
<s:checkboxlist name="skills2"
label="Skills 2"
list="#{ 1:'Java', 2: '.Net', 3: 'RoR', 4: 'PHP' }"
listKey="key"
listValue="value"
value="{ 1, 2, 3 }"/>
<s:token/>:保證一個請求只被執行一次
1、在jsp中加入標簽
<s:token/>
3、若用token在對應的action中加入攔截器,內容如下:
<action name="Token" class="tutorial.CoolTagAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result name="invalid.token">/token.jsp</result>
<result>/token.jsp</result>
</action>
引入struts2的css及javaScript腳本
< s:head />
<s:datatimerpicker>:時間選擇器
<s:datetimepicker name="birthday" label="Birthday" />:顯示時間
兩個組合框,第一個組合框發生改變時,自動更新第二個組合框
1、代碼中直接構造集合
<s:doubleselect
tooltip="Choose Your State"
label="State"
name="region" list="{'North', 'South'}"
value="'South'"
doubleValue="'Florida'"
doubleList="top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}"
doubleName="state"
headerKey="-1"
headerValue="---------- Please Select ----------"
emptyOption="true" />
2、 取已有集合中的值
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -