<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    探索與發(fā)現(xiàn)

    研究java技術(shù)

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      83 隨筆 :: 0 文章 :: 109 評論 :: 0 Trackbacks

    閱讀struts MailReader文檔筆記:
    MailReader應用程序基于struts 1.2.0開發(fā)。
    1:主頁是index.jsp。由于struts的Action不能指定歡迎頁面
    ,而首次會從服務(wù)器配置的歡迎列表去查找出相應的頁面返回給用戶,
    那么我們怎么來用struts的actions而不是普通的jsp頁面返回給用戶呢,
    一個解決方案是在一個頁面寫上要轉(zhuǎn)發(fā)到我們的歡迎頁面,代碼:
    <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
    <logic:redirect action="/Welcome"/>
    在相應的struts-config.xml配置文件加上
    <!-- Display welcome page -->
    <action path="/Welcome" forward="/welcome.jsp" />
    但其它頁面還不能保證用戶不能訪問到,我們在應用當中一般會把所有的
    jsp頁面放到WEB-INF目錄下面,然后在struts-config.xml做一下映射就可以了,以保證用戶不能直接訪問到。

    2:<message-resources parameter="org.apache.struts.webapp.example.MessageResources" />
    在同一個struts里面只能有一個默認的存放本地化的消息文本(Resource Bundle)
    那很我們指定多個的時候可以用它的一個屬性key指定
    例如:
    <message-resources parameter="org.apache.struts.webapp.example.AlternateMessageResources" key="alternate" />
    那么我們在頁面用的時候這樣出別
    <bean:message key="key0"/>;
    <bean:message key="key1" bundle="alternate"/>

    3:<html:link>有兩個優(yōu)點:
    (1)允許在url中以多種方式包含請求。
    (2)當用戶關(guān)閉cookie時,會自動重寫url,把sessionid作為請求參數(shù)包含在url當中,用于跟蹤用戶的session狀態(tài),而不像servlet,jsp還要
    自己硬編碼實現(xiàn)
    它有幾個重要的屬性:
    *forward:指定全局轉(zhuǎn)發(fā)鏈接(只適用于(flobal-forwards>forward,而不能引用action forward子元素)
    *href:指定完整的url鏈接(<html:link url="http//www.sina.com"/>)
    *page:指定相對于當前網(wǎng)頁的url(<html:link page="/test.do"/>

    4:PlugIn(struts插件)
    在struts-config.xml要加上相應的描述語句
    <plug-in className="org.apache.struts.webapp.example.memory.MemoryDatabasePlugIn">
    ? <set-property property="pathname" value="/WEB-INF/database.xml"/>
    </plug-in>
    其中MemoryDatabaseplugIn是自己開發(fā)的一個插件,它必須org.paache.struts.action.PlugIn接口,包含兩個方法init,destroy
    init在struts加載時自動被調(diào)用,destroy當應用關(guān)閉時調(diào)用,可以放一些釋放資源的語句(如關(guān)閉數(shù)據(jù)庫連接的語句等)
    并且這個里面還包含屬性pathname,也要相應的get,set方法,以便在struts框架在加載插件時,會自動調(diào)用setPathname()方法,把
    <set-property>子元素的pathname設(shè)置成MemoryDatabasePlugIn里對應屬性的值value="/WEB-INF/database.xml"
    還要注意就是<plug-in>必須位于其它配置元素后面,出現(xiàn)多個按順序加載

    5:
    <!-- Process a user logon -->
    <action??? path="/SubmitLogon"
    ????????????????? type="org.apache.struts.webapp.example.LogonAction"
    ????????????????? name="LogonForm"
    ???????????????? scope="request"
    ???????????????? input="logon">
    ?<exception
    ?????????????????? key="expired.password"
    ????????????????? type="org.apache.struts.webapp.example.ExpiredPasswordException"
    ????????????????? path="/ExpiredPassword.do"/>
    ?????? </action>
    scope推薦使用request,當然也可以用session,一個ActionForm只對應一次請求,不要越過request,
    如果我們使用type="org.apache.struts.validator.DynaValidatorForm"
    那么它會自動創(chuàng)建一個ActionForms與之對應
    exception子元素,當一個用戶登錄以后,有可能 "ExpiredPasswordException"(超時) 會拋出.
    ?如果發(fā)生了的話 Struts 會捕獲exception 并發(fā)送到 "ExpiredPassword" action.

    6:
    自己開發(fā)一個定制標記<app:checkLogon/>用戶檢查用戶是否登錄
    package org.apache.struts.webapp.example;
    import ...

    public final class CheckLogonTag extends TagSupport {

    ??? private String name = Constants.USER_KEY;
    ??? private static String LOGIN_PATH = "/Logon.do";
    ??? private String page = LOGIN_PATH;

    ??? public int doStartTag() throws JspException {
    ??? return (SKIP_BODY);
    ??? }

    ??? public int doEndTag() throws JspException {
    ??? ?boolean valid = false;
    ??? ?HttpSession session = pageContext.getSession();
    ??? ?if ((session != null) && (session.getAttribute(name) != null)) {
    ??? ???? valid = true;
    ??????? }
    ??????? if (valid) {
    ??????????? return (EVAL_PAGE);
    ??????? } else {
    ??????????? ModuleConfig config =
    ??????????????? (ModuleConfig) pageContext.getServletContext().getAttribute(
    ??????????????????? org.apache.struts.Globals.MODULE_KEY);

    ??????????????? try {
    ??????????????????? pageContext.forward(config.getPrefix() + page);
    ??????????????? } catch (ServletException e) {
    ??????????????????? throw new JspException(e.toString());
    ??????????????? } catch (IOException e) {
    ??????????????????? throw new JspException(e.toString());
    ??????????????? }

    ??????????? return (SKIP_PAGE);
    ??????? }
    ??? }

    ??? public void release() {
    ??????? super.release();
    ??????? this.name = Constants.USER_KEY;
    ??????? this.page = LOGIN_PATH;
    ??? }
    }
    但如果比較大的應用還是用標準的jaas驗證

    7
    <html:link action="/EditRegistration?action=Edit">
    -------
    ///////////////////////////////////
    <logic:equal
    name="RegistrationForm"
    property="action"
    scope="request"
    value="Edit"
    >
    <app:checkLogon/><!--如果action與Edit相等就執(zhí)行這里,否則不會執(zhí)行-->
    </logic:equal>
    1)////
    <logic:present name="test">
    如果在action中設(shè)置了test就執(zhí)行到這兒。如:request.setAttribute("test","test")或session.setAttribute("test","test")
    <bean:write name="test"/>
    </logic:present>

    package org.apache.struts.webapp.example;
    public final class EditSubscriptionAction extends Action
    {

    ??? public EditSubscriptionAction()
    ??? {
    ??????? log = LogFactory.getLog("org.apache.struts.webapp.Example");
    ??? }

    ??? public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
    ??????? throws Exception
    ??? {
    ??????? HttpSession session = request.getSession();
    ??????? String action = request.getParameter("action");
    ??????? if(action == null)
    ??????????? action = "Create";
    ??????? String host = request.getParameter("host");
    ??????? if(log.isDebugEnabled())
    ??????????? log.debug("EditSubscriptionAction:? Processing " + action + " action");
    ??????? User user = (User)session.getAttribute("user");
    ??????? if(subscription == null && !action.equals("Create"))///create
    ??????? {
    ??????????? if(log.isTraceEnabled())
    ??????????????? log.trace(" No subscription for user " + user.getUsername() + " and host " + host);
    ??????????? return mapping.findForward("failure");
    ??????? }
    ??????? else //edit
    ?????? --------------------
    }
    8 MailReader源碼<struts 1.2 webapps下struts-mailreader.war并且包含說明文檔,是每一個初學者和有經(jīng)驗的,應該要看的文章

    posted on 2006-05-21 01:33 蜘蛛 閱讀(2144) 評論(5)  編輯  收藏 所屬分類: struts

    評論

    # re: 閱讀struts MailReader文檔小記 2006-05-22 14:38 綠色使者、綠色心情
    使用jstl很多時候比自定義標簽效果要更好一些,比如上面的需求  回復  更多評論
      

    # re: 閱讀struts MailReader文檔小記 2006-11-19 08:10 成人用品
    常樂集團成立于2004年9月。我們主要經(jīng)營成人用品性用品的批發(fā)和零售,本著誠信第一的原則,我們不斷擴大銷售范圍,產(chǎn)品不斷走向全國各個城市。我們的目標是讓更多的人用我們的產(chǎn)品,讓更多的人能提高生活質(zhì)量!
    電話:13605487249
    QQ:609797387
    網(wǎng)址:http://www.sex0539.com/ 常樂成人用品性用品批發(fā)商城  回復  更多評論
      

    # re: 閱讀struts MailReader文檔小記 2006-11-19 08:11 成人用品
    常樂集團成立于2004年9月。我們主要經(jīng)營成人用品性用品的批發(fā)和零售,本著誠信第一的原則,我們不斷擴大銷售范圍,產(chǎn)品不斷走向全國各個城市。我們的目標是讓更多的人用我們的產(chǎn)品,讓更多的人能提高生活質(zhì)量!
    電話:13605487249
    QQ:609797387
    網(wǎng)址:http://www.sex0539.com/ 常樂成人用品性用品批發(fā)商城  回復  更多評論
      

    # re: www.e68d.com 2007-02-16 10:34 liang
    hello  回復  更多評論
      

    # 北京千源網(wǎng)站建設(shè) 2007-03-30 22:56 北京千源網(wǎng)站建設(shè)
    千源設(shè)計一家是以設(shè)計為主導、專業(yè)為企業(yè)提供網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,平面設(shè)計,標志設(shè)計,F(xiàn)lash動畫設(shè)計服務(wù)的設(shè)計工作室。
    http://www.websdesign.cn  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲福利视频网址| 亚洲AV色吊丝无码| 一级特黄特色的免费大片视频| 妞干网免费视频在线观看| 亚洲日韩精品无码专区加勒比☆| 国产片AV片永久免费观看 | 欧洲乱码伦视频免费| 亚洲成a人片在线观看中文!!!| 中文字幕在线免费观看| 亚洲区视频在线观看| 香蕉97超级碰碰碰免费公| 亚洲人成自拍网站在线观看| 啦啦啦手机完整免费高清观看| 亚洲精品宾馆在线精品酒店| 国产乱色精品成人免费视频| 成人久久久观看免费毛片| 亚洲无线码在线一区观看| 国产激情免费视频在线观看| 久久亚洲AV成人无码国产| 久久久久久国产a免费观看黄色大片| 亚洲人xxx日本人18| 全部免费毛片在线| 三年片免费观看大全国语| 久久亚洲精品无码aⅴ大香| 最近中文字幕mv免费高清电影| 日韩电影免费在线观看网址| 亚洲精品国产精品乱码在线观看| 曰批视频免费40分钟试看天天| 亚洲精品无码一区二区| 久久国产成人亚洲精品影院| 一级毛片**不卡免费播| 亚洲色在线无码国产精品不卡| 亚洲黄片毛片在线观看| 久久大香香蕉国产免费网站| 亚洲av无码电影网| 精品国产人成亚洲区| 99久久久精品免费观看国产| 羞羞视频在线免费观看| 久久综合亚洲鲁鲁五月天| 亚洲国产一区二区视频网站| 久久久久久毛片免费播放|