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

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

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

    隨筆-124  評論-49  文章-56  trackbacks-0
     
    ForwardAction是統(tǒng)一訪問形式
    配置struts-config.xml即可
    <action-mappings>
     <action path="/preAddStudentAction" forward="/WEB-INF/AddStudent.jsp" />
     <forward name="success" path="/login_success.jsp"/>
    </action-mappings>
    全局的
    <global-forwards>
     <forward name="success" path="/login_success.jsp"/>
    </global-forwards>
    對象名為ActionFroward,運行期不能改修配置,即調(diào)用froward.setReadirect(false);
    ForwardAction執(zhí)行完所有內(nèi)容,forward屬性到轉(zhuǎn)向頁面就停了
    posted @ 2009-11-30 08:12 junly 閱讀(238) | 評論 (0)編輯 收藏
    可以加入ValidatorPlugIn動態(tài)驗證框架插件
    org.apache.struts.validator.ValidatorPlugIn
    posted @ 2009-11-30 08:12 junly 閱讀(216) | 評論 (0)編輯 收藏

    一 配置異常(在struts-config.xml文件中定義),定制異常有兩種:
    1 全局異常(Global Exceptions)
    <global-exceptions>
     <exception key="invalideUser"
     path="/Login.jsp" type="com.future.struts.MyException" />
    </global-exceptions>
    2 局部異常(Local Exception)
    <action-mappings>
      <action attribute="loginForm" name="loginForm"
       path="/loginAction(出錯轉(zhuǎn)向的路徑)" scope="request"
       input="/login.jsp"http://異常轉(zhuǎn)向的頁面,同exception中的path,優(yōu)先級path高于input
      />
      <exception key="invalideUser(異常信息的key)" path="/Error.jsp"
      type="cn.itcast.ItcastException(異常類全名)" />
    </action-mappings>
     path:出現(xiàn)異常后跳轉(zhuǎn)的頁面
     key:異常信息的鍵,對應的值在資源文件當中
     type:所要處理的異常類
    二 在相應的action中的execute方法中拋出異常
    三 在異常處理頁面(path所指的頁面)使用html:errors標簽打印異常信息
    1 建立資源文件ApplicationResources.properties
    內(nèi)容:invaliduser=it is an invalid user(key/value)
    2 配置struts-config.xml文件
      <message-resources parameter="cn.itcast.ApplicationResources" key="invalideuser"/>
    3 使用html:errors標記打印信息
      <html:errors />
      --------------------------------------------
    1 編程式異常
      * 截獲異常
      * 創(chuàng)建相應的異常消息
      * 傳遞異常消息
      * 轉(zhuǎn)向相應的頁面處理異常
    2 聲明式異常(自動處理的異常)
      * 在struts-config.xml文件中配置<exeception/>標簽
      * 理解局部和全局exception
      * 注意局部<exception/>標簽需要配置到<forward/>標簽的前面
     
      <exeception/>標簽中的屬性說明:
          * key:指異常信息對應的國際化消息文本,這個key值需要在國際化資源文件中定義
          * type:處理那種異常
          * path:定義一但出現(xiàn)異常,需要轉(zhuǎn)向那個頁面,如果不定義path,
                 默認情況下將使用<action>標簽中input屬性對應的頁面
          * scope:可以取值request和session,默認為request
          * handler:導常的處理類,struts默認采用org.apache.struts.action.ExceptionHandler,
                    如果做個性化的異常處理可以繼承此類復寫相應的方法
    -------------------------------------------------------------------------
    個性異常類定義
    一 方法:
    1 定義MessageResources.propertices資源文件
    2 在struts-config中配置<exception/>
      <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"
       handler="com.bjsxt.struts.ErrorCodeException" />
    3 編寫異常類ErrorCodeException繼承RuntimeException
    public class ErrorCodeException extends RuntimeException {
     private String errorCode;//這是key對應的值
     private Object[] args;//這是參數(shù)集合
     public ErrorCodeException(String errorCode){
      this(errorCode,null);
     }
     public ErrorCodeException(String errorCode,Object args0){
      this(errorCode,new Object[]{args0});
     }
     public ErrorCodeException(String errorCode,Object[] args){
      this.errorCode=errorCode;
      this.args=args;
     }
     public String getErrorCode() {
      return errorCode;
     }
     public Object[] getArgs() {
      return args;
     }
    }
    4 編寫ErrorCodeExceptionHandler類繼承ExceptionHandler,
      復寫public ActionForward execute(Exception ex, ExceptionConfig ae,
             ActionMapping mapping, ActionForm formInstance,
             HttpServletRequest request, HttpServletResponse response)
             throws ServletException{}方法:
    public ActionForward execute(Exception ex, ExceptionConfig ae,
             ActionMapping mapping, ActionForm formInstance,
             HttpServletRequest request, HttpServletResponse response)
             throws ServletException {
             //添加判斷
           ------------------------------------------------------------
          if(!(ex instanceof ErrorCodeException)){
           return super.execute(ex, ae, mapping, formInstance, request, response);
          }
          ------------------------------------------------------------
             ActionForward forward;
             ActionMessage error;
             String property;

             // Build the forward from the exception mapping if it exists
             // or from the form input
             if (ae.getPath() != null) {
                 forward = new ActionForward(ae.getPath());
             } else {
                 forward = mapping.getInputForward();
             }

             // Figure out the error
             if (ex instanceof ModuleException) {
                 error = ((ModuleException) ex).getActionMessage();
                 property = ((ModuleException) ex).getProperty();
             } else {
              //改修這個地方
              //----------------------------------------------
              ErrorCodeException ece=(ErrorCodeException)ex;
              String errorCode=ece.getErrorCode();
              Object[] args=ece.getArgs();
              error = new ActionMessage(errorCode, args);
              property = error.getKey();
              //------------------------------------------------
                 //error = new ActionMessage(ae.getKey(), ex.getMessage());
                 //property = error.getKey();
             }

             this.logException(ex);

             // Store the exception
             request.setAttribute(Globals.EXCEPTION_KEY, ex);
             this.storeException(request, property, error, forward, ae.getScope());

             if (!response.isCommitted()) {
                 return forward;
             }
             return null;
         }
    }
    5 頁面直接拋出異常
    public void login(String username,String password){
      if(!"admin".equals(username)){
        throw new ErrorCodeException("user.not.found",username,age);
      }
    }
    ---------------------------------------------------------------------
    二 方法:
    1 定義MessageResources.propertices資源文件
      內(nèi)容:error.exception={0}
    2 在struts-config中配置<exception/>
      <exception key="error.exception" type="com.bjsxt.struts.ErrorCodeException"/>
    3 編寫異常類ErrorCodeException繼承RuntimeException
    public class ErrorCodeException extends RuntimeException {
      public ErrorCodeException(String msg){
        super(msg);
      }
    }
    4 頁面直接拋出異常
    public void login(String username,String password){
      if(!"admin".equals(username)){
        throw new ErrorCodeException("名稱"+usrname+"錯誤!");
      }
    }


    --------------------------------------------------------------------------
    1 ApplicationResources.properties文件
       num2Meg=is not a double
    2 struts-config.xml
       <message-resources parameter="ApplicationResources" />
    3 ActionMessages errs=new ActionMessages();
    errs.add("num1Error",new ActionMessage("num2Meg"));
    //errs.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("num2Meg"));


    this.saveErrors(request,errs);

    頁面
    <html:errors property="num1Error"/>
    //<html:errors/>//全局不能指定property
    errs.header="<script>alert("
    errs.footer=")</script>"

    posted @ 2009-11-30 08:11 junly 閱讀(505) | 評論 (0)編輯 收藏

    Converter添加java.util.Date類型轉(zhuǎn)換器
    1 編寫UtilDateConverter轉(zhuǎn)換器類,
    實現(xiàn)Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)
    public class UtilDateConverter implements Converter {
     public Object convert(Class type, Object value) {
      System.out.println("UtilDateConverter.value="+value);
      if(value==null){
       return value;
      }
      if(value instanceof Date){//instanceof判斷是否屬于此類型
       return value;
      }
      Date d=null;
      if(value instanceof String){

       SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
       try {
        d=sdf.parse(value.toString());
       } catch (Exception e) {
        e.printStackTrace();
       }
      }
      return d;
     }
    }
    2 利用servlet的init()方法注冊轉(zhuǎn)換器到ConvertUtils(com.sun.org.apache.commons.beanutils.ConvertUtils)
    public class UtilDateConverterInitServlet extends HttpServlet {
     public void init() throws ServletException {
      System.out.println("UtilDateConverterInitServlet.init()");
      ConvertUtils.register(new UtilDateConverter(),Date.class);
     }
    }
    3 配置servlet,并設(shè)</load-on-startup>值
     <servlet>
        <servlet-name>UtilDateConverterInitServlet</servlet-name>
        <servlet-class>com.bjsxt.servlet.UtilDateConverterInitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>UtilDateConverterInitServlet</servlet-name>
        <url-pattern>/servlet/UtilDateConverterInitServlet</url-pattern>
      </servlet-mapping>
    ------------------------------------------------------------------------
    方法二:
    1 編寫UtilDateConverter轉(zhuǎn)換器類,
    實現(xiàn)Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)
    (同上)
    2 編寫UtilDateConverterInitWithPlugIn類實現(xiàn)PlugIn接口的init()方法
    public class UtilDateConverterInitWithPlugIn implements PlugIn {
     public void destroy() {
     }
     public void init(ActionServlet arg0, ModuleConfig arg1)
       throws ServletException {
      System.out.println("UtilDateConverterInitServlet.init()");
      ConvertUtils.register(new UtilDateConverter(),Date.class);
     }
    }
    3 在struts-config.xml文件中配置<plug-in>標簽
    <plug-in className="com.bjsxt.servlet.UtilDateConverterInitWithPlugIn"/>

    posted @ 2009-11-30 08:10 junly 閱讀(384) | 評論 (0)編輯 收藏

    DynaActionForm 配態(tài)form
    1 配置動態(tài)form屬性<form-property>name屬性,type屬性類型,primitive type必須使用包裝類型。
    <form-beans>
       <form-bean name="addStudentForm" type="org.apache.struts.action.DynaActionForm">
        <form-property name="sname" type="java.lang.String" initial=""(初始值)></form-property>
        <form-property name="birth" type="java.sql.Date"></form-property>
        <form-property name="major" type="java.lang.String"></form-property>
        <form-property name="score" type="java.util.float"></form-property>
       </form-bean>
    </form-beans>
    2 配置action標記
      <action-mappings>
       <action path="/addstudentform"
               type="com.yourcompany.struts.AddAction"
               name="addStudentForm(form的名子)">
       </action>
      </action-mappings>
    3 獲取頁面的值:
    動態(tài)ActionForm其實是把頁面的html元素的名字和值放到名字和值放到map中,所以通過get方法可以取出相應的值
    (1) String sname=(String)addStudentForm.get("sname");
     EL:   ${dynabean(addStudentForm).map.prop}
    (2) String sname=(String)addStudentForm.get("sname");
    動態(tài)ActionForm的驗證,通常使用動態(tài)驗證框架validator

    屬性名及類型一致才可以拷貝
    可以通過BeanUtils.copyProperties(userbean目標對象,form源對象)方法進行對象的復制

    posted @ 2009-11-30 08:10 junly 閱讀(309) | 評論 (0)編輯 收藏

    網(wǎng)站struts.apache.org
    實踐步驟:
    1 搭建環(huán)境
      (1)導入jar包
         使用其中相關(guān)的類(可將所有jar全部導入)
      (2)建立一個配置文件:struts-config.xml
         作用:方便struts用戶使用
         位置:一般放在WEB-INF下
      (3)配置web.xml
         注冊struts中心控制器-----ActionServlet
      <servlet>
      <servlet-name>action</servlet-name>
      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>()Navigate下Open Type輸入actionServlet復制目錄
      <init-param>//讀初始化文件的信息
       <param-name>config</param-name>//參數(shù)名
       <param-value>/WEB-INF/struts-config.xml</param-value>//文件名
      </init-param>
      <load-on-startup>0</load-on-startup>//服務(wù)啟起就實例化,0最早
     </servlet>
     <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.do</url-pattern>//對所有的do請求都作處理
     </servlet-mapping>
      注意事項:
      struts配置文件的位置
      預先加載控制器
    ------------------------------------------------------------------
    2 建立ActionForm
      (1)建一個Bean類,繼承org.apache.struts.action.ActionForm
      (2)注冊,修改配置文件struts-config.xml
      <form-bean>
      <form-beans>
       <form-bean name="變理名" type="類全名"/>
      </form-beans>
      意注:struts-config.xml文件中<form-beans>和<action-mappings>的順序不能變,有DTD約束規(guī)定。
    ------------------------------------------------------------
    3 建立Action
     (1)建立一個類,繼承org.apache.struts.action.Action。重寫execute方法
        需要強制轉(zhuǎn)型
        LoginFrom lof=(LoginFrom)form;
        調(diào)用其它模塊
        跳轉(zhuǎn)(根據(jù)關(guān)鍵字,關(guān)鍵字參照該action中forward標簽中的name屬性)
        mapping.findForward("name屬性");
     (2)注冊,修改配置文件struts-config.xml
     <action>
     <action-mappings>
            <action path="指明調(diào)用者(JSP)能通過中心控制器ActionServlet找到該Action"
                    type="指明該action類全名"
                    name="該action引用的form的名稱">
               <forward name="loginSuccess" path="index.jsp"></forward>
            </action>
        </action-mappings>
    4 頁面訪問
    <form action="<%=request.getContextPath()%>/login.do">
    -------------------------------------------------------------------
    Struts framework的工作原理工科

    1 讀敢配置 (初始化ModuleConfig對象)
    Struts框架總控制器(ActionServlet)是一個Servlet,在web.xml中配置成自動啟動的Servlet。
    讀取配置文件(struts-config.xml)的配置信息,為不同的Struts模塊初始化相應的ModuleConfig
    對名:ActionConfig,
          ControlConfig,
          FormBeanConfig,
          MessageResourcesConfig
    2 發(fā)送請求
    請求上傳WEB服務(wù)器(處理.do的請求)
    3 填充FORM(實例化,復位,填充數(shù)據(jù),校驗,保存)
    (*.do請求)從ActionConfig中找出對應該請求的Action子類,如沒有對應的Action,控制器直接轉(zhuǎn)發(fā)給
    JSP或靜態(tài)頁面。如有對應的Action且這個Action有一個相應的ActionForm.
    ActionForm被實例化并用http請求的數(shù)據(jù)填充其屬性,并且保存在ServletContext中(request或session中),
    這樣它們就可以被其它Action對象或者JSP調(diào)用。
    4 派發(fā)請求
    控制器根據(jù)配置信息ActionConfig將請求派發(fā)到具體的Action,相應的FormBean一并傳給這個Action的execute()方法.
    5 處理業(yè)務(wù)
    Action一般只包含一個execute方法,它負責執(zhí)行相應的業(yè)務(wù)邏輯(調(diào)用其它業(yè)務(wù)模塊).完畢返回一個ActionForward對象,
    控制器通過該ActionForward對象來進行轉(zhuǎn)發(fā)工作
    6 返回響應
    Action根據(jù)業(yè)務(wù)處理的不同結(jié)果返回一個目標響應對象給總控制器,該目標響應對象對應一個具體的JSP頁面或另一Action.
    7 查找響應(可以是一個Action)
    8 響應用戶
    -----------------------------------------------------------------------------------------------------------
    組件
    ActionSerlet,Action Classes,Action Mapping(此處包括ActionForward),ActionForm Bean.
    Struts中的MVC:
    1 模型(Model):本質(zhì)上來說在Struts中Model是一個商業(yè)邏輯類,開發(fā)者實現(xiàn)商業(yè)邏輯。
    2 視圖(View):View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構(gòu)成,利用他們可以快速建立應用系統(tǒng)的界面。
    3 控制器(Controller),前端控制器是一個Servlet,它將客戶端請求轉(zhuǎn)發(fā)到相應的后端控制器Action類。
    注意:官方認為ActionForm Bean應為控制層(Controller)組件,自已寫的JavaBeans為模型(Model)
    -----------------------------------------------------------------------------------
    ActionServlet(中心控制器)
     定義:繼承自javax.servlet.http.HttpServlet類,是中心控制器(總控制器)。它提供一個中心位置來處理全部的終端請求。
     作用:接受請求,填充數(shù)據(jù),派發(fā)請求,響應用戶。
     配置:在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>
      <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    注意:struts-config.xml文件系統(tǒng)默主調(diào)用,可以不<init-param>配置
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    -------------------------------------------------------------------
    Action
    發(fā)出該action請求時初始化,不是在讀取配置時,并且只初始化一次。
    Action是線程不安全的,因為所有的請求共享一個別action實例。
    所以:不要用實例變量或者類變是共享只是針對某個請求的數(shù)據(jù)
          注意資源操作的同步性。
    應用:
    統(tǒng)計一個action訪問次數(shù)
    public class CountAction extends Action {
     private Integer count=0;
     public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response)
       throws Exception {
      synchronized(count){//加鎖
      count++;
      }
      PrintWriter out=response.getWriter();
      out.print("count="+count);
      return null;
     }
    }

    ----------------------------------------------------
    ActionMapping
    是對struts-config.xml中action標簽中所有屬性的封裝類。
    mapping.getName()(String)
    mapping.getPath()(String)
    mapping.getType()(String)
    String[] forwardNames=mapping.findForwards();
    for(String forward:forwardNames){
     ActionForward forward=mapping.findForward(forward);
     String forwardPath=forward.getPath();
    }
    相應的set方法不能使用。
    -----------------------------------------------------
    ActionForward(導航器)
    ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許他們按照name屬性來檢索。
    name:邏輯名稱
    path:頁面或者模塊訪問路徑。
    redirect:默認為false.設(shè)為true時為容器外跳轉(zhuǎn),相當于response.sendRedirect();
    在xml文件中的path中要寫絕對路徑。
    --------------------------------------------------------------
    ActionForm工作原理
    步驟:
    (1)檢查Action的映射,確定Action中已經(jīng)配置了對ActionForm的映射
    (2)根據(jù)name屬性,查找form bean中的配置信息
    (3)檢查Action的form bean的使用范圍,確定在此范圍下(request,session),是否已經(jīng)有些form bean的實例。
    (4)假如當前范圍下,已經(jīng)存在了些form bean的實例,而是對當前請求來說,是同一種類型的話,就重用。
    (5)否則,就重新構(gòu)建一個form bean的實例(調(diào)用構(gòu)造方法),并且保存在一定作用范圍。
    (6)form bean的reset()方法被調(diào)用
       在作數(shù)據(jù)收集前被調(diào)用,是一個重置的方法.
    (7)調(diào)用對應的setter方法,對狀態(tài)屬性賦值
    (8)如果validatede的屬性設(shè)置為true,就調(diào)用form bean的validate()方法。
       該方法進行表單的服務(wù)器端驗證.
    (9)如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數(shù),傳給Action實例的execute()方法并執(zhí)行。
    注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現(xiàn)什么處理功能,所以重新覆蓋。

               
    注意:
    1 無參構(gòu)造方法必須有
    2 Scope缺省值是session
    3 調(diào)用setter方法,實質(zhì)上是對應的標準set方法
    分析:
    4 從過程去查看
    HttpSessionAttributeListener
    ServletRequestAttributeListener
    5 從結(jié)果去查看
    ---------------------------------------------------
    ActionForm
    reset()方法,用于恢復屬性,在重新復值前由controller調(diào)用。
    valldate()方法,用于校驗屬性,返回ActionErrors,如果成功返回null,默認返回null.
    關(guān)閉校驗功能設(shè)置struts-config.xml中<action>標簽的validate屬性為false.
    validate
    ----------------------------------------------------------
    struts-config.xml文件中的action標簽
    1 attribute屬性
    用來存取form的關(guān)鍵字,缺省值與name一樣,如果設(shè)了必須用該屬性。
    2 validate屬性(action中的屬性)
    用來控制是否校驗表單,缺省為false,false不校驗。
    3 input屬性
    當表單校驗失敗時將請求轉(zhuǎn)發(fā)的URL(或目標模塊,可以為另一個別action),結(jié)合validate屬性使用,為相對路徑。
    在ActionForm類的validate方法中手動添加錯誤
    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
      ActionErrors errors=new ActionErrors();
      ActionMessage message=new ActionMessage("error");//應為鍵值對
      errors.add("error",message);
      return errors;
    }
    ---------------------------------------------------------------------------
    struts-config.xml文件中的<global-forwards>全局跳轉(zhuǎn)標簽
    <global-forwards>
      <forward name="error" path="Error.jsp"/>
    </global-forwards>
    使用方式同action中的forwar標簽

    posted @ 2009-11-29 22:59 junly 閱讀(2336) | 評論 (0)編輯 收藏
    1 實例化:servlet容器創(chuàng)建servlet實例,構(gòu)造方法
    2 初始化:該容器調(diào)用init()方法
      init()
      init(ServletConfig config){
        config.getParamter("aaa");
      }
      web.xml
      <servlet>
     <param-name>aaa</param-name>
     <param-value>1</param-value>
      </servlet>
    3 服務(wù):如果請求servlet,則容器調(diào)用service()方法
    4 銷毀:銷毀實例前調(diào)用destroy()方法
    posted @ 2009-11-29 22:50 junly 閱讀(240) | 評論 (0)編輯 收藏

    一個java類,運行在服務(wù)器端的,處理web請求
    //客戶端跳轉(zhuǎn)
    response.sendRedirect()
    //服務(wù)器端跳轉(zhuǎn)
    RequsetDispatcher dispatcher=request.getRequestDispatcher("/...");
    dispatcher.forward(request,response);
    dispatcher.include()
    1 out
    struts中用PrintWriter out=request.getWriter()得到
    2 request
    (1)String getParameter(String name)         根據(jù)頁面表單組件名稱獲取頁面提交數(shù)據(jù)
    (2)String[] getParameterValues(String name) 獲取一個頁面表單組件對應多個值時的用戶的請求數(shù)據(jù)
    (3)void setCharacterEncoding(String name)   指定每個請求的編碼,在調(diào)用request.getParameter()方法之前進行設(shè)置,可以用于解決中文亂碼
    (4)request.getRequestDispatcher(String path)返回一個javax.servlet.RequestDispatcher對象,該對象的forward方法用于轉(zhuǎn)發(fā)請求
       javax.servlet.RequestDispatcher dispatcher=request.getRequestDispatcher("/a.jsp(目標頁面)");
       dispatcher.forward(request,response);
    3 response
    response.sendRedirect(String location)重定向一個URL

    4 session
    (1)void setAttribute(String key,Object value)
    (2)Object getAttribute(String key)
    (3)HttpSession request.getSession()
    (4)HttpSession request.getSession(boolean true)
    (5)void session.setMaxInactiveInterval(2)//設(shè)置會話過期時間
    (6)void invalidate()//銷毀session,刪除HttpSession對象及數(shù)據(jù)
    (7)void remove(String key)
    (8)boolean isNew()//是否是最新會話
    在web.xml中配置session默認過期時間
     <session-config>
      <session-timeout>5</session-timeout>//單位為分鐘
     </session-config>
    5 applicate->servletContext
    (1)void setAttribute(String key,Object value)
    (2)Object getAttribute(String key)
    6 pageContext
    6 service方法

    posted @ 2009-11-29 22:49 junly 閱讀(253) | 評論 (0)編輯 收藏

    web Service
    xml數(shù)據(jù)格式
    SOAP(簡單對象訪問)
    WSDL
    -----------
    開發(fā)步驟
    1 建立服務(wù)并發(fā)布
      XFire
      × 導入jar包
      * service.xml
      * web.xml
     
      創(chuàng)建接口
      public interface IProcessCredit{
         public String sayHello(String username);
      }
      和實現(xiàn)類
      public class ProcessCreditImpt implement IProcessCredit{
         public String sayHello(String username){
            return "你好"+username;
         }
      }
      編寫配置文件
      services.xml
      <service>
      <name>CreditCard</name>
      <namespace>http://www.CreditCard.com</namespace>
      <serviceClass>
      org.com.IProcessCredit
      </serviceClass>
      <implementationClass>
      org.com.ProcessCreditImpt
      </implementationClass>
     
    2 客戶端servlet調(diào)用服務(wù)
      1 導入Service的jar
      2 導入XFire的jar
      3 Service
      Service service=new ObjectServiceFactory().create(IProcessCredit.class);
      XFire xfire=XfireFactory.newInstance().getXFire();
      XFireProxyFactory factory=new XFireProxyFactory(xfire);
      String url="";
      IProcessCredit c=(IProcessCredit)factor.create(service,url);
      c.sayHello("ddddddddddd");


    -----------------------------------------------------------------
    步驟:
    1 建立接口
    public interface IBookService {
     public int addBook(Book book);
    }

    2 實現(xiàn)接口
    public class ProessBookService implements IBookService {
     public int addBook(Book book) {
      BookDao bookDao=new BookDao();
      return bookDao.addBook(book);
     }
    }

    3 在src下創(chuàng)建META-INF文件夾,在META-INF下創(chuàng)建xfire文件夾,在xfire下創(chuàng)建services.xml
      (src-->META-INF-->xfire-->services.xml)
    <service>
    <name>BookService</name>
    <namespace>http://www.book.com</namespace>
    <serviceClass>org.book.IBookService </serviceClass>
    <implementationClass>org.book.ProessBookService </implementationClass>
    </service>
    4 編寫web.xml
      <servlet>
      <servlet-name>XFireServlet</servlet-name>
      <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      <servlet-name>XFireServlet</servlet-name>
      <url-pattern>/services/*</url-pattern>
      </servlet-mapping>
    5 編寫調(diào)用方法
    Service serviceModle=new ObjectServiceFactory().create(IBookService.class);
    XFire xFire=XFireFactory.newInstance().getXFire();
    XFireProxyFactory factory=new XFireProxyFactory(xFire);
    String urlString="http://localhost:8080/ownhome/services/ProessBookService";
    IBookService bookService=(IBookService) factory.create(serviceModle, urlString);

    posted @ 2009-11-29 22:48 junly 閱讀(297) | 評論 (0)編輯 收藏
    servlet邊濾器
    1 編寫實現(xiàn)javax.servlet.Filter接口的類
    public class MyFilter implements Filter {
     private FilterConfig config;
     private String encoding="IS0-8859-1";
     public void destroy() {//過濾器當前類被消滅時調(diào)用的方法
     }
     public void doFilter(ServletRequest request, ServletResponse response,//過濾器主方法
       FilterChain chain) throws IOException, ServletException {
      request.setCharacterEncoding(encoding);
      chain.doFilter(request, response);//設(shè)置其可被下個過濾器繼續(xù)調(diào)用
     }
     public void init(FilterConfig config) throws ServletException {//過濾器當前類初始化時調(diào)用此方法
      this.config=config;
      String s=config.getInitParameter("encoding");//得到相應參數(shù)
      if(s!=null){
       encoding=s;
      }
     }
    }
    FilterConfig類用于獲得初始化的參數(shù)的包裝類
    FilterChain類是過濾器的鏈,可以多重過濾
    2 配置Servlet過濾器
    <filter>
       <filter-name>EncodingFilter</filter-name>過濾器名稱
       <filter-class>com.webs.MyFilter</filter-class>對應類
       <init-param>參數(shù)
        <param-name>encoding</param-name>參數(shù)名
        <param-value>UTF-8</param-value>參數(shù)值
       </init-param>
    </filter>
    <filter-mapping>映射特定資源
      <filter-name>EncodingFilter</filter-name>過濾器名稱
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    3 頁面
    4 注意:服務(wù)器端跳轉(zhuǎn)是不過濾的
    posted @ 2009-11-29 22:47 junly 閱讀(226) | 評論 (0)編輯 收藏
    僅列出標題
    共18頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
    主站蜘蛛池模板: 亚洲国产精品久久网午夜| 午夜国产大片免费观看| 亚洲AV无码成人精品区在线观看| 日韩一级片免费观看| 成人免费视频88| 7777久久亚洲中文字幕| 欧美最猛性xxxxx免费| 免费a级毛片18以上观看精品| 亚洲精品女同中文字幕| 在线观看亚洲免费| 男女猛烈无遮掩视频免费软件| 一级特黄aa毛片免费观看| 综合自拍亚洲综合图不卡区| 男男gay做爽爽免费视频| 免费在线观看毛片| 国精产品一区一区三区免费视频 | 手机在线免费视频| 亚洲av日韩专区在线观看| 亚洲国产av一区二区三区| 两个人日本免费完整版在线观看1| 亚洲va久久久噜噜噜久久| 精品女同一区二区三区免费站| 亚洲一级毛片在线播放| 日韩免费一级毛片| 羞羞视频免费网站在线看| 国产在线ts人妖免费视频| 一区二区在线免费视频| 亚洲av不卡一区二区三区| 国产人成免费视频网站| 亚洲AV日韩综合一区| 久久久久久亚洲精品| 在线观看无码AV网站永久免费| 国产成人高清亚洲一区久久| 亚洲国产综合无码一区| 我的小后妈韩剧在线看免费高清版| 亚洲成a人片在线观看久| 久久免费线看线看| 亚洲色成人WWW永久在线观看| 亚洲精品WWW久久久久久| 欧美色欧美亚洲另类二区| 国产国拍精品亚洲AV片|