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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 14. struts1.x note.txt

?? 在達(dá)內(nèi)培訓(xùn)java筆記
?? TXT
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
Day1:
overview:
1.MVC概述
2.Struts框架 (技術(shù)概覽) 
3.Struts開(kāi)發(fā)步驟
4.Struts新手上路
5.Struts詳解
6.使用工具構(gòu)建struts應(yīng)用
**************************************************************

一 MVC概述 (教材Page 219) 
1 起源

2 設(shè)計(jì)理念
    圖(Page 219) 

    Controller:
    Model:
    View:

3.分層設(shè)計(jì)對(duì)Model的影響

4.Web MVC的發(fā)展(Page 221 ~ 227) 
  Model1 ---> Model2 ---> Framework
    1)Model1的特點(diǎn)(Page 222) 
    2)Model2的特點(diǎn)(Page 224) 
    3)Framework的引入(Page 226) 

  引入框架的作用
    A. 使得功能組件松散耦合,甚至可配置
    B. 提供公用的服務(wù):
       例如:i18n,安全,表單的重復(fù)提交,文件上傳……
    C. 簡(jiǎn)化開(kāi)發(fā)模型——使得開(kāi)發(fā)人員的精力集中在業(yè)務(wù)邏輯之上
  框架的分類
    A.設(shè)計(jì)的思路
      白盒框架:使用時(shí),需要了解其內(nèi)部結(jié)構(gòu)(extends);入侵性框架
      黑盒框架:不需了解其代碼細(xì)節(jié),最多實(shí)現(xiàn)其接口;非入侵性框架
    B.功能、作用
      Web:Strusts1.x, WebWork, Strusts2.x(發(fā)展1.x和webwork), JSF(抗衡.net), Tapestry,
          Shale, ZK, Echo, (根本全是Servlet規(guī)范) ……
      Business:Spring, Seam
      Persistence(持久層):Hibernate, Toplink, OpenOJB, ……
  評(píng)價(jià)框架的優(yōu)劣?
    A.設(shè)計(jì)理念    先進(jìn)?
    B.編程模型    簡(jiǎn)單?
    C.是否擁抱規(guī)范、標(biāo)準(zhǔn)?
    D.社區(qū)是否龐大?第三方的支持程度?


程序設(shè)計(jì)思路
  可維護(hù)性:預(yù)見(jiàn)需求(預(yù)見(jiàn)多年后的事) 
  可重用: 
          代碼可重用(最低級(jí)別):粒度:方法(常用代碼塊),類,包,組件(類庫(kù)) 
          設(shè)計(jì)的可重用:框架(半成品,如Hibernate);產(chǎn)品(開(kāi)發(fā)軟件);算法、設(shè)計(jì)模式
          分析的可重用(最高級(jí)別,見(jiàn)不到代碼):文檔、規(guī)范、標(biāo)準(zhǔn)(ISO:CMM,CMMI) 
  可擴(kuò)展性:

*****************************************************

二、Struts框架 (技術(shù)概覽) 
1.Struts簡(jiǎn)介
  Apache
  OpenSource
  官方網(wǎng)站:http://jakarta.apache.org

MVC
Servlet, JSP, 資源文件, 定制標(biāo)簽庫(kù)

Struts框架的位置


2.Struts快速上手
需求描述:
    系統(tǒng)的登錄

開(kāi)發(fā)步驟
1) 創(chuàng)建項(xiàng)目、搭建環(huán)境
    下載Struts開(kāi)發(fā)包
    把%STRUTS_HOME%/lib/*.jar拷貝到WEB-INF/lib
    把%STRUTS_HOME%/contrib/struts-el/lib/*.jar拷貝到WEB-INF/lib
    把%STRUTS_HOME%/lib/*.tld拷貝到WEB-INF(新版本無(wú)需這么做) 
    將%STRUTS_HOME%/contrib/struts-el/lib/*.tld 拷貝到WEB-INF(新版本無(wú)需這么做) 
2) 配置WEB-INF/web.xml文件

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

3) 在WEB-INF創(chuàng)建struts-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
  <form-beans />
  <global-exceptions />
  <global-forwards />
  <action-mappings />
  <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>

4) 提供login.jsp
引入struts標(biāo)簽庫(kù)
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html:form action="/login">
    <table>
        <tr>
            <td>用戶名:</td>
            <td><html:text property="username"></html:text></td>
        </tr>
        <tr>
            <td>密  碼:</td>
            <td><html:password property="password"></html:password></td>
        </tr>
        <tr>
            <td colspan=2 align=center>
                <html:submit value="登錄"></html:submit>
            </td>
        </tr>
    </table>
</html:form>

5) 提供Form Bean
com.form.LoginForm
public class LoginForm extends ActionForm {

    private String username;
    private String password;
    
    //getter, setter
}

配置文件更新:
<form-beans>
    <form-bean name="loginForm" type="com.form.LoginForm"></form-bean>
</form-beans>

6) 提供action:LoginAction extends Action
public class LoginAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
            throws Exception {
        LoginForm loginForm = (LoginForm)form;
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
        
        boolean isLogin = false;
        if("maxwell".equals(username) && "123".equals(password)) {
            isLogin = true;
        }
        
        if(isLogin) {
            return mapping.findForward("success");
        } else {
            return mapping.findForward("error");
        }
    }

}

配置文件更新:
<action-mappings>
      <action path="/login" type="com.action.LoginAction" name="loginForm">
          <forward name="success" path="/success.jsp"></forward>
          <forward name="error" path="/error.jsp"></forward>
      </action>
  </action-mappings>




3.Struts技術(shù)詳解
1) struts的MVC模型 (Page229) 
2) 主要組件詳解
    1)ActionServlet
    繼承HttpServlet類,需要在web.xml中配置
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
         <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    2)Action
    開(kāi)發(fā)人員必須繼承這個(gè)Action類,供ActionServlet所驅(qū)動(dòng)。
    職責(zé):調(diào)用業(yè)務(wù)邏輯方法
          將控制權(quán)返回給ActionServlet并且提供相關(guān)的路由信息
    public class LoginAction extends Action {
    ......
    }
    步驟:
     (1) 繼承Action類。
     (2) 覆蓋 execute(...)方法。
     (3) 返回ActionForward對(duì)象 (提供決策信息給ActionServlet選擇適當(dāng)?shù)囊晥D響應(yīng)用戶) 。
     (4) 在struts-config.xml中配置

    <action-mappings>
        <action input="/index.jsp"              :ActionForm驗(yàn)證失敗的跳轉(zhuǎn)頁(yè)面
            name="aForm"                        :與Action對(duì)應(yīng)的FormBean對(duì)象
            path="/myAction"                    :請(qǐng)求URI(/myAction.do) 
            scope="session"                     :FormBean作用域范圍 
            type="action.LoginAction"           :自定義的Action類
            validate="true"                     :FormBean是否調(diào)用validate(...)方法
        >
        <forward name="success" path="/success.jsp" /> :成功跳轉(zhuǎn)的頁(yè)面
        </action>
        ......
    </action-mappings>
    注:scope的值可以是request和session,默認(rèn)是session

    3)ActionForm:封裝HTTP請(qǐng)求中的數(shù)據(jù)
    將用戶提交的數(shù)據(jù)自動(dòng)填充(在相應(yīng)的action的execute方法被調(diào)用之前)到form的屬性中
    無(wú)需手工調(diào)用request.getParameter(…) 
    開(kāi)發(fā)人員必須繼承這個(gè)ActionForm類
    public class LoginForm extends ActionForm {
        ......
    }
3) 處理流程(程序中的關(guān)系) 


****************************************************************************
三、使用IDE工具生成struts項(xiàng)目



Day2:
1 視圖選擇
2 國(guó)際化
3 Struts中的異常處理
4 動(dòng)態(tài)表單
5.標(biāo)簽庫(kù)
*************************************************************************

1 視圖選擇
局部轉(zhuǎn)發(fā)與全局轉(zhuǎn)發(fā)(優(yōu)先級(jí):局部轉(zhuǎn)發(fā)的優(yōu)先級(jí)比全局轉(zhuǎn)發(fā)的優(yōu)先級(jí)高) 
1) 局部轉(zhuǎn)發(fā):只對(duì)某個(gè)Action可見(jiàn)
  <action ...>
    <forward name="success" path="/success.jsp" />
  </action>

2) 全局轉(zhuǎn)發(fā):對(duì)所有的Action可見(jiàn)(共享) 
    <global-forwards>
        <forward name="success" path="/globalsuccessful.jsp"></forward>
    </global-forwards>


例子:
把登錄例子中的成功跳轉(zhuǎn)設(shè)置為全局轉(zhuǎn)發(fā)。



2 I18N
I18N解決辦法
創(chuàng)建多個(gè)資源文件,根據(jù)用戶設(shè)置選擇不同資源文件
ApplicationResources.properties
ApplicationResources_en.properties
ApplicationResources_zh.properties


資源文件:
用于映射頁(yè)面中的靜態(tài)信息、按鈕標(biāo)簽、錯(cuò)誤信息等,
通過(guò)一個(gè)屬性文件(.properties) 把所有頁(yè)面的靜態(tài)信息集中在一起,便于修改。

例子:
編寫(xiě)資源文件的步驟:
1) 編輯資源文件

login_en.properties
login.title=Login Page
login.success=Congratuation! You successfully login our System!
login.username=User Name
login.password=Password

添加對(duì)中文的支持txt:
login.title=登錄頁(yè)面
login.success=恭喜你!你已經(jīng)成功登錄我們的系統(tǒng)了!
login.username=用戶名
login.password=密碼
login.submit=登錄


轉(zhuǎn)換本地編碼為Unicode:
native2ascii login.txt login_zh.properties  ----->生成login_zh.properties文件
login.title=\u767b\u5f55\u9875\u9762
login.success=\u606d\u559c\u4f60\uff01\u4f60\u5df2\u7ecf\u6210\u529f\u767b\u5f55\u6211\u4eec\u7684\u7cfb\u7edf\u4e86\uff01
login.username=\u7528\u6237\u540d
login.password=\u5bc6\u7801
login.submit=\u767b\u5f55


2)在struts-config.xml文件中配置資源文件<message-resources parameter="login" />

3)在JSP文件中使用<bean:message key="login.title"/>標(biāo)簽輸出資源文件中的值

4)演示效果:
修改瀏覽器的設(shè)置
英文界面少寫(xiě)了"login.submit";則是找出中文的


3 Struts中的異常處理

java class: try/catch/finally/throws/throw/custom Exception class
jsp: page指令 + web.xml配置<error-page>
struts: try/catch/finally/throws/throw/custom Exception class

         聲明方式(*)------->struts-config.xml
         定制異常處理器(*) 

ActionErrors(或ActionMessages):異常的集合類
ActionMessage:具體異常類
關(guān)系圖


方法一:
在actionform的validate方法中處理(很少使用,一般用驗(yàn)證框架實(shí)現(xiàn)用戶輸入合法性驗(yàn)證) 

(1)重寫(xiě)action form的validate方法
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = new ActionErrors();
    if(username == null || username.equals("") || username.length() > 50) {
        ActionMessage msg = new ActionMessage("error.username");
        errors.add("errorusername", msg);
    }
    return errors;
}
  
login_en.properties的內(nèi)容
error.username=Please input the correct user name!
login_zh
error.username=請(qǐng)輸入正確的用戶名信息!error.username=\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u7528\u6237\u540d\u53ca\u5bc6\u7801\uff01

(2)配置struts-config.xml文件
在action標(biāo)記內(nèi)添加一個(gè)input屬性和validate屬性
其中,
input屬性的值-----表示發(fā)生錯(cuò)誤后跳轉(zhuǎn)到的頁(yè)面
validate屬性的值-----表示ActionServlet是否去執(zhí)行ActionForm的validate(...)方法,并且這個(gè)屬性默認(rèn)值是true
    <action-mappings>
        <action name="loginForm" 
                path="/login" 
                type="com.action.LoginAction" 
                input="/login.jsp"
                validate="true">
            <forward name="fail" path="/fail.jsp"></forward>
        </action>
    </action-mappings>


(3)在login.jsp頁(yè)面中加入<html:errors/>輸出錯(cuò)誤。


方法二:
在action的execute方法中處理(極少使用,知道這種方法就可以了) 
(1)在action的execute方法中寫(xiě)錯(cuò)誤處理的代碼(和action form里valdiate方法的代碼基本一致) 


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线亚洲视频| 精品福利一区二区三区| 91色在线porny| 国产精品18久久久久久久久久久久| 天堂av在线一区| 日韩精彩视频在线观看| 亚洲成人精品一区| 午夜精品久久久久久久久久久| 亚洲在线一区二区三区| 亚洲成人激情社区| 亚洲成a人在线观看| 午夜视频在线观看一区| 午夜精品视频在线观看| 日本最新不卡在线| 六月丁香综合在线视频| 国产原创一区二区| 北岛玲一区二区三区四区| 成人国产精品免费观看动漫| 成人免费观看av| 在线欧美一区二区| 91.xcao| 日韩一区二区精品| 久久综合九色综合97婷婷| 精品日韩在线一区| 国产欧美精品一区二区色综合 | 在线不卡一区二区| 日韩一卡二卡三卡| 日本一区二区三区dvd视频在线| 国产精品国产三级国产aⅴ入口 | 韩日精品视频一区| 极品少妇xxxx偷拍精品少妇| 国产成人精品一区二区三区四区| 成人动漫精品一区二区| 在线精品视频免费观看| 日韩视频一区在线观看| 亚洲国产精品二十页| 亚洲另类色综合网站| 日本在线不卡视频| 风间由美中文字幕在线看视频国产欧美 | 久国产精品韩国三级视频| 国产综合久久久久久鬼色 | 欧美电影免费观看高清完整版| 久久久亚洲精品石原莉奈| 日韩一区中文字幕| 三级欧美在线一区| 国产精品一卡二卡在线观看| 91女神在线视频| 日韩一区二区免费视频| 中文字幕一区av| 亚洲成av人影院| 国产成人av自拍| av在线综合网| 岛国精品一区二区| 粉嫩欧美一区二区三区高清影视| 一本色道亚洲精品aⅴ| 555夜色666亚洲国产免| 中文字幕第一区综合| 亚洲成a人v欧美综合天堂下载| 黄一区二区三区| 欧美怡红院视频| 2023国产精品视频| 亚洲一区二区三区四区在线观看| 国产在线精品不卡| 欧美三级资源在线| 中文字幕亚洲一区二区av在线 | jlzzjlzz欧美大全| 日韩午夜在线影院| 亚洲一区在线免费观看| 成人一级视频在线观看| 日韩欧美第一区| 亚洲黄色在线视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 激情五月激情综合网| 国产一区二区91| 欧美裸体一区二区三区| 中文字幕精品三区| 韩国精品免费视频| 91精品国产综合久久精品图片| 亚洲天堂福利av| 国产不卡视频在线观看| 欧美电影免费提供在线观看| 亚洲一区二区精品视频| 99久久久国产精品| 中文字幕va一区二区三区| 久久精品99久久久| 欧美高清你懂得| 一区二区欧美在线观看| 99视频在线精品| 中文字幕av一区二区三区| 国产精品综合一区二区| 欧美电影免费观看高清完整版在线 | 51精品秘密在线观看| 国产精品久久三区| 日韩理论片中文av| 国产伦精一区二区三区| 制服丝袜激情欧洲亚洲| 亚洲高清免费视频| 欧美性xxxxx极品少妇| 亚洲成人黄色小说| 欧美日韩精品久久久| 五月天欧美精品| 欧美日韩精品一区视频| 亚洲福利视频一区| 欧美人体做爰大胆视频| 五月综合激情日本mⅴ| 色婷婷av一区二区三区大白胸| 欧美xxxxx牲另类人与| 日韩高清不卡在线| 欧美精品九九99久久| 亚洲sss视频在线视频| 欧美日韩高清在线| 一区二区三区四区亚洲| 色先锋aa成人| 一区二区三区四区在线播放| 色www精品视频在线观看| 国产精品福利一区二区| 99re免费视频精品全部| 亚洲欧美日韩国产成人精品影院 | 日本不卡免费在线视频| 欧美福利视频一区| 蜜臀久久久久久久| 日韩美女主播在线视频一区二区三区| 午夜久久电影网| 日韩免费高清视频| 国产精品一级黄| 亚洲欧美在线另类| 欧洲精品一区二区| 青青草国产精品亚洲专区无| 精品久久久久av影院| 懂色av中文字幕一区二区三区| 日本一区二区久久| 色八戒一区二区三区| 五月婷婷欧美视频| 久久久久久久综合色一本| 成人精品免费视频| 最新高清无码专区| 狠狠色伊人亚洲综合成人| 久久超碰97中文字幕| 日韩av在线播放中文字幕| 亚洲成人动漫在线观看| 亚洲va欧美va人人爽午夜| 国产综合久久久久影院| 国产剧情一区在线| 91成人国产精品| 中文字幕一区二区在线观看| 欧美日韩精品一区二区天天拍小说| 一区二区三区视频在线观看| 在线不卡欧美精品一区二区三区| 精品一区二区三区在线观看国产| 国产欧美日韩中文久久| 色94色欧美sute亚洲线路二| 美女爽到高潮91| 1024亚洲合集| 欧美一区在线视频| 懂色一区二区三区免费观看| 亚洲福利视频导航| 国产精品三级电影| 91精品国产综合久久久蜜臀图片| 国产精品99久久久久| 亚洲国产裸拍裸体视频在线观看乱了 | 久久av资源网| 中文字幕成人av| 欧美一区二区三区不卡| 大白屁股一区二区视频| 国产亚洲va综合人人澡精品| 在线观看日韩电影| 久久国产精品色| 亚洲综合免费观看高清完整版| 欧美精品一区男女天堂| 欧美日免费三级在线| 国产福利不卡视频| 美女一区二区三区| 一区二区三区四区精品在线视频| 久久久久久夜精品精品免费| 国产精品网站在线播放| 欧美日韩的一区二区| 岛国av在线一区| 狠狠色丁香婷婷综合久久片| 中文字幕在线一区免费| 精品人伦一区二区色婷婷| 欧美日韩在线观看一区二区| www.色精品| 国产一区二区在线看| 日日骚欧美日韩| 悠悠色在线精品| 中国av一区二区三区| 久久色视频免费观看| 在线成人小视频| 欧美日韩精品一区二区三区四区| 色综合亚洲欧洲| 欧美喷水一区二区| 成人aa视频在线观看| 精品亚洲国产成人av制服丝袜| 亚洲国产一区视频| 亚洲日本va午夜在线影院| 国产欧美日韩综合精品一区二区 | 亚洲乱码日产精品bd| 国产欧美一区二区精品秋霞影院 | 欧美韩日一区二区三区四区| 欧美xxx久久|