亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 14. struts2.x note.txt

?? 在達內培訓java筆記
?? TXT
字號:
Struts 2.x初階

1.MVC原理
2.Struts框架的介紹
3.Struts2.x快速上手
4.Struts2.x框架的分析

*******************************************************************************
一、MVC原理
   1. Model1---> Model2 ---> MVC Framework
   2. Html/JavaScript --> dynamic web content                          動態,可交互;   3. CGI --> Servlet     -->   JSP  -->  MVC (Model1 --> Model2) --> Framework     進程調用  線程調用,性能提高               靜態內容與動態內容分離;         框架     本地語言  可移植           頁面中嵌入java    javabean --> 控制器
*******************************************************************************
二、Struts框架的起源和發展   設計理念:基于請求(http request) ---struts,WebWork....           基于事件驅動,組件編程    ---JSF,Tapestry,ZK,echo

   1.Struts1.x     M:沒有定義設計方法     C:ActionServlet + struts-config.xml(核心控制器)         Action:業務邏輯的控制器     V:JSP實現(EL) + Tags +Tiles .....

   2.WebWork        open source (開源組織:opensymphony)         Rickard Oberg --- Jboss/XDoclet(annotation)      C:核心控制器(ServletDispatcher)         業務控制器(Action)          --- 使用攔截器鏈     V:支持JSP模板,FreeMarker, Velocity 等....

   3.Struts2.x     Struts1.x + WebWork 的整合(血統來自于WebWork)      ServletDiapatcher --> FilterDispatcher 
   4.Struts1.x    vs.  Struts2.x     1)Struts1.x:       非常依賴Servlet API        execute(mapping,form,request,response){...}      2)WebWork       攔截器鏈設計,擺脫對Servlet API的依賴       Action     3)Struts2.x:       控制器更加徹底:業務控制器Action---支持POJO       不再支持內置的IoC容器(Spring) 
*******************************************************************************
三、Struts2.x快速上手
itcompany系統的部分功能:
登錄模塊
公司信息查詢


1.登錄應用————struts2.x快速上手

1)創建web工程,設置環境
A.WEB-INF/lib/
	+Struts2.x需要的基本.jar


B.web.xml:
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>
		org.apache.struts2.dispatcher.FilterDispatcher
	</filter-class>
</filter>

<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
	<filter-name>struts-cleanup</filter-name>
	<filter-class>
		org.apache.struts2.dispatcher.ActionContextCleanUp
	</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts-cleanup</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

C.在classpath下添加struts.xml
src/	+ struts.xml (手工做時,則發布在WebRoot/WEB-INF/classes/) 


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="login" extends="struts-default">
		...
	</package>
</struts>


2)login.jsp
	使用基本的<html>標簽
	<form action="Login.action" method="post">
	username
	password


3)Controller的開發(POJO)
   +com.LoginAction
	private String username;
	private String password;

	//getter,setter方法

	public String execute() throws Exception {
		//處理登錄邏輯
	}



注釋:
	execute方法:普通的方法,沒有任何的Servlet API、Struts2.x API的耦合
	跳轉:
		"success"
		"fail"

4)配置Controller Action
struts.xml
	+Action的配置
<struts>
	<package name="login" extends="struts-default">
		<action name="Login" class="com.LoginAction">
			<result name="success">/successful.jsp</result>
			<result name="fail">/login.jsp</result>
		</action>
	</package>
</struts>











********************************************
*通過不斷重構demo,來深入了解Struts應用。*
********************************************

2.改進Controller Action
implements Action(Interface of xwork)


1)Login.jsp---->Logon.jsp(重新提供)
	<form action="Logon.action" method="post">


2)public class LogonAction implements Action 
	execute() {
		...
		return this.SUCCESS;
		return this.ERROR;
	}

注釋:閱讀Action接口的源碼




3.使用Servlet API添加狀態跟蹤(HttpSession)

1)在LogonAction的execute方法添加:
	ActionContext.getContext().getSession().put("username", getUsername());


ActionContext
	+getSession()
	注意:返回的不是HttpSession,而是一個Map的封裝,
	Struts2.x框架的內置攔截器實現了Session和HttpSession之間的轉換

2)在目標頁面successful.jsp添加
	${username }

輸出該Session中key為"username"的值


4.實現系統的另外一個功能:
	點擊鏈接,查詢并列舉出所有的Company信息

1)successful.jsp
	<a href="ListComp.action">查看公司信息</a>

2)提供處理查詢公司信息的Action:
ListCompsAction
	private List comps;
	//其中,comps放置的是pojo.Company的列表

在execute()方法中,添加如下代碼:
String username = (String)ActionContext.getContext().getSession().get("username");
if("maxwell".equals(username)) {
	Company comp = new Company();
	comp.setCompName("Tarena");
	comp.setAddress("天河區崗頂");
	comp.setCity("廣州市");
	comp.setEmail("hr@tarena.com.cn");

	Company comp1 = new Company();
	comp1.setCompName("Tecent");
	comp1.setAddress("深南路55號");
	comp1.setCity("深圳市");
	comp1.setEmail("hr@qq.com.cn");

	Company comp2 = new Company();
	comp2.setCompName("IBM Research Center(Chinese)");
	comp2.setAddress("王府井3樓");
	comp2.setCity("北京市");
	comp2.setEmail("hr@ibm.com");


	companies.add(comp);
	companies.add(comp1);
	companies.add(comp2);

	this.setComps(companies);
	//跳轉到顯示頁面
	return this.SUCCESS;
} else {
	return this.LOGIN;
}


3)提供配置(struts.xml)
<action name="ListComp" class="com.ListCompsAction">
	<result name="success">/viewCompanies.jsp</result>
	<result name="login">/logon.jsp</result>
</action>
	

4)viewCompanies.jsp顯示數據
<table border=1>
	<tr>
		<th>公司名</th>
		<th>城市</th>
		<th>地址</th>
		<th>郵箱</th>
	</tr>
	<%
		ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
		List<Company> comps = (List) vs.findValue("comps");
		for(Company comp : comps) {
	%>
		<tr>
			<td><%=comp.getCompName() %></td>
			<td><%=comp.getCity() %></td>
			<td><%=comp.getAddress() %></td>
			<td><%=comp.getEmail() %></td>
		</tr>
	<%
		}
	 %>
</table>



注釋:
	struts.valueStack
		Action中的成員屬性,屬性可能是
		(1)請求的參數
		(2)下一個頁面顯示的數據
		這些屬性的值被封裝起來,并放置在ValueStack對象中,

		ValueStack對象的獲取:
		ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");

		開發人員可以通過屬性名來從ValueStack中讀取數據



5.對視圖的改進(使用struts標簽庫)
	盡可能的消滅jsp中的Java代碼
1)加入標簽庫:
<%@ taglib prefix="s" uri="/struts-tags"%>

2)logon.jsp---->logonPage.jsp
<table border=1>
	<s:form action="Logon" method="post">
		<tr>
			<s:textfield name="username" label="username"></s:textfield>
		</tr>
		<tr>
			<s:password name="password" label="password"></s:password>
		</tr>
		<tr>
			<s:submit value="login"></s:submit>
		</tr>
	</s:form>
</table>

注解:
<s:form/>標簽
<s:textfield/>
<s:password/>
<s:submit/>



3)viewCompanies.jsp----->listCompanies.jsp
<h1>It公司信息列表</h1>
<table border=1>
	<tr>
		<th>公司名</th>
		<th>城市</th>
		<th>地址</th>
		<th>郵箱</th>
	</tr>
	<!-- 迭代輸出ValueStack對象中的comps, 其中status為迭代索引 -->
	<s:iterator value="comps" status="index">
		<!-- 判斷索引是否為奇數 -->
		<s:if test="#index.odd == true">
			<tr style="background-color:yellow">
		</s:if>
		<s:else>
			<tr style="background-color:red">
		</s:else>
			<td><s:property value="compName"/></td>
			<td><s:property value="city"/></td>
			<td><s:property value="address"/></td>
			<td><s:property value="email"/></td>
		</tr>
	</s:iterator>
</table>

注解:
<s:if test/>:判斷標簽
<s:else/>

<s:iterator/>迭代輸出,等價于jstl中的<c:forEach/>






6.i18n的支持
1)定義資源文件
resource包下
+itcomps.properties
+itcomps_en.properties
內容:
login.title=Please input your username and password
login.username=User Name
login.password=Password
login.submit=Login


login.success.msg=Congratulation, successfully Login!
view.comps.link=View the companies information
view.comps.title=View Companies
view.comps.compName=Company Name
view.comps.city=City
view.comps.addr=Address
view.comps.email=Email Box


+itcomps.txt

login.title=請輸入用戶名和密碼
login.username=用戶名
login.password=密碼
login.submit=登錄


login.success.msg=恭喜你,成功登錄了!
view.comps.link=查看公司信息
view.comps.title=查看It公司信息
view.comps.compName=公司名字
view.comps.city=城市
view.comps.addr=地址
view.comps.email=郵箱

+使用native2ascii工具把itcomps.txt轉換為itcomps_zh_CN.properties
內容:
login.title=\u8BF7\u8F93\u5165\u7528\u6237\u540D\u548C\u5BC6\u7801
login.username=\u7528\u6237\u540D
login.password=\u5BC6\u7801
login.submit=\u767B\u5F55


login.success.msg=\u606D\u559C\u4F60\uFF0C\u6210\u529F\u767B\u5F55\u4E86\uFF01
view.comps.link=\u67E5\u770B\u516C\u53F8\u4FE1\u606F
view.comps.title=\u67E5\u770BIt\u516C\u53F8\u4FE1\u606F
view.comps.compName=\u516C\u53F8\u540D\u5B57
view.comps.city=\u57CE\u5E02
view.comps.addr=\u5730\u5740
view.comps.email=\u90AE\u7BB1


2)添加struts.properties在類路徑下,并加入如下設置:
struts.custom.i18n.resources=resource.itcomps


3)輸出信息(2種方式)
方式一:
<s:text name="key"></s:text>
key:國際化信息的key,輸出為其value


方式二:使用OGNL表達式
%{getText('key')}
例如:
<s:textfield name="username" label="%{getText('login.username')}"></s:textfield>
<s:property value="%{getText('key')}"/>



7.添加數據校驗(編碼式)
需求:登記用戶
1)logon.jsp---->enroll.jsp
	<s:form action="enroll" method="post">


2)開發EnrollAction 
	extends ActionSupport

	添加校驗方法
	@Override
	public void validate() {
		if(getUsername() == null || getUsername().equals("")) {
			this.addFieldError("username", "username.required");
		}
		
		if(getPassword() == null || getPassword().equals("")) {
			this.addFieldError("password", "password.required");
		}
	}

演示


3)加入i18n的支持
定義資源文件的內容:
username.required=User Name is required!
password.required=Password is required!

username.required=用戶名為必錄項!
password.required=密碼為必錄項!

使用native2ascii工具更新_zh_CN.properties文件


修改EnrollAction代碼:
this.addFieldError("username", this.getText("username.required"));



注意:
前提是要求輸入域必須在<s:form/>中。


8.聲明式驗證
1)logon.jsp
	使用struts2標記

2)在Action下添加同名的校驗配置

LogonAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<message key="username.required"></message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="requiredstring">
			<message key="password.required"></message>
		</field-validator>
	</field>
</validators>







*******************************************************************************
四、Struts2.x框架的分析
1)框架架構

2)基本流程

3)Struts2.x的基本配置
web.xml
struts.xml
struts.properties





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品中文字幕一区二区小辣椒| 91久久精品一区二区二区| 成人开心网精品视频| 欧美美女一区二区| 综合电影一区二区三区| 国产麻豆午夜三级精品| 欧美日韩一区二区三区高清| 国产精品久久久久久妇女6080| 日韩成人伦理电影在线观看| 精品国产乱码久久久久久图片| 亚洲国产一区二区在线播放| 成人99免费视频| 久久久亚洲欧洲日产国码αv| 丝袜美腿亚洲综合| 欧洲亚洲精品在线| 一区二区中文视频| 成人av资源在线观看| 久久亚洲免费视频| 久草在线在线精品观看| 5858s免费视频成人| 亚洲成人福利片| 欧美在线不卡视频| 一区二区欧美在线观看| heyzo一本久久综合| 国产精品素人视频| 成人污视频在线观看| 国产亚洲综合av| 国产经典欧美精品| 国产日韩欧美电影| 成人深夜福利app| 国产欧美日产一区| 国产宾馆实践打屁股91| 国产蜜臀av在线一区二区三区| 黄网站免费久久| 国产亚洲精品精华液| 成人免费毛片嘿嘿连载视频| 日本一区二区三区在线不卡 | 国产精品一区不卡| 精品国产一区二区三区久久影院 | 中文字幕亚洲一区二区av在线| 国产成人av一区二区三区在线观看| 久久影视一区二区| 高清在线成人网| 最新日韩av在线| 91国内精品野花午夜精品| 亚洲线精品一区二区三区 | 日韩欧美国产综合在线一区二区三区| 日韩黄色免费网站| 日韩欧美国产小视频| 777奇米四色成人影色区| 人人精品人人爱| 亚洲精品在线电影| 99精品在线免费| 午夜婷婷国产麻豆精品| 欧美丰满嫩嫩电影| 国产精品99久久久久久似苏梦涵 | 亚洲电影视频在线| 91精品黄色片免费大全| 国产一区二区美女诱惑| 中文字幕在线观看一区| 制服丝袜一区二区三区| 丁香五精品蜜臀久久久久99网站| 亚洲免费av网站| 日韩网站在线看片你懂的| 国产一区 二区 三区一级| 亚洲少妇中出一区| 日韩欧美一级特黄在线播放| 成av人片一区二区| 日韩av电影免费观看高清完整版| 国产亚洲一二三区| 欧美无砖专区一中文字| 国模无码大尺度一区二区三区| 成人欧美一区二区三区小说| 91麻豆精品国产无毒不卡在线观看| 大陆成人av片| 青青草视频一区| 亚洲免费观看在线视频| 精品少妇一区二区| 欧美亚男人的天堂| 成人性生交大片免费看中文| 日本女优在线视频一区二区| 亚洲欧洲性图库| 久久麻豆一区二区| 9191成人精品久久| 色婷婷综合久久久中文一区二区 | 成+人+亚洲+综合天堂| 日韩精品视频网| 亚洲精选在线视频| 国产亚洲欧美中文| 日韩一区二区三区电影 | 成人免费视频视频在线观看免费| 五月天激情综合| 亚洲久草在线视频| 国产精品免费视频网站| 久久亚洲一区二区三区四区| 欧美一级在线免费| 欧美区视频在线观看| 色婷婷精品大视频在线蜜桃视频| 国产精品香蕉一区二区三区| 久久99精品国产.久久久久久| 日韩福利电影在线| 一区二区日韩av| 亚洲精品老司机| 日韩毛片在线免费观看| 中文字幕一区二区三区在线观看| 久久久国际精品| 久久久精品国产99久久精品芒果| 欧美大片国产精品| 欧美变态口味重另类| 欧美一区二区视频在线观看| 欧美日韩日日摸| 欧美高清hd18日本| 制服丝袜成人动漫| 日韩一卡二卡三卡国产欧美| 日韩午夜电影在线观看| 日韩精品一区二区三区三区免费 | 欧美亚洲日本国产| 91国偷自产一区二区三区成为亚洲经典 | 91国产精品成人| 在线免费av一区| 欧美三电影在线| 91.麻豆视频| 日韩一级免费观看| 久久久夜色精品亚洲| 国产欧美精品一区二区色综合朱莉| 久久综合九色综合欧美亚洲| 午夜精品久久久久久久| 日韩福利视频网| 国产原创一区二区三区| 国产在线播放一区三区四| 国产一区二区三区国产| 成人app在线观看| 欧美亚洲综合在线| 日韩色在线观看| 国产日本一区二区| 亚洲人精品午夜| 婷婷国产在线综合| 精东粉嫩av免费一区二区三区| 国产成人啪午夜精品网站男同| 成人激情视频网站| 欧美日本一区二区三区四区 | 欧美a级一区二区| 激情综合色综合久久| 成人性色生活片免费看爆迷你毛片| k8久久久一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 51精品久久久久久久蜜臀| 精品国产乱码久久久久久夜甘婷婷 | 中文字幕中文字幕一区二区| 亚洲成av人片一区二区梦乃 | 2021国产精品久久精品| 中文一区在线播放| 亚洲国产成人av网| 国产精品一区免费在线观看| 欧美亚州韩日在线看免费版国语版| 日韩欧美在线网站| 亚洲丝袜另类动漫二区| 久久精品久久综合| 日本精品免费观看高清观看| 精品国产一区二区三区av性色| 亚洲欧美国产毛片在线| 精久久久久久久久久久| 欧美日韩综合一区| 国产精品国产馆在线真实露脸| 日本成人在线一区| 色婷婷av一区二区三区大白胸| 精品国产成人系列| 日日摸夜夜添夜夜添精品视频| 不卡的看片网站| 日韩精品一区二区三区在线| 一区二区免费视频| 懂色av中文一区二区三区| 日韩一区二区三区四区| 亚洲欧美激情在线| 岛国一区二区三区| 久久婷婷色综合| 日韩av网站在线观看| 欧美三级韩国三级日本三斤| 中文字幕电影一区| 国产一区在线视频| 欧美一区二区三区在线观看视频| 亚洲激情欧美激情| 91亚洲精品久久久蜜桃网站| 国产日韩影视精品| 国产精品香蕉一区二区三区| 日韩欧美一级二级三级| 日本sm残虐另类| 777午夜精品视频在线播放| 亚洲线精品一区二区三区八戒| 色综合一区二区| 亚洲特黄一级片| 99re成人精品视频| 亚洲丝袜另类动漫二区| 成人a级免费电影| 国产精品久久久久精k8 | 日本一区二区成人| 国产福利一区在线| 欧美国产乱子伦 | 久久精品av麻豆的观看方式| 欧美一区二区免费观在线|