<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是統一訪問形式
    配置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,運行期不能改修配置,即調用froward.setReadirect(false);
    ForwardAction執行完所有內容,forward屬性到轉向頁面就停了
    posted @ 2009-11-30 08:12 junly 閱讀(230) | 評論 (0)編輯 收藏
    可以加入ValidatorPlugIn動態驗證框架插件
    org.apache.struts.validator.ValidatorPlugIn
    posted @ 2009-11-30 08:12 junly 閱讀(209) | 評論 (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(出錯轉向的路徑)" scope="request"
       input="/login.jsp"http://異常轉向的頁面,同exception中的path,優先級path高于input
      />
      <exception key="invalideUser(異常信息的key)" path="/Error.jsp"
      type="cn.itcast.ItcastException(異常類全名)" />
    </action-mappings>
     path:出現異常后跳轉的頁面
     key:異常信息的鍵,對應的值在資源文件當中
     type:所要處理的異常類
    二 在相應的action中的execute方法中拋出異常
    三 在異常處理頁面(path所指的頁面)使用html:errors標簽打印異常信息
    1 建立資源文件ApplicationResources.properties
    內容: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 編程式異常
      * 截獲異常
      * 創建相應的異常消息
      * 傳遞異常消息
      * 轉向相應的頁面處理異常
    2 聲明式異常(自動處理的異常)
      * 在struts-config.xml文件中配置<exeception/>標簽
      * 理解局部和全局exception
      * 注意局部<exception/>標簽需要配置到<forward/>標簽的前面
     
      <exeception/>標簽中的屬性說明:
          * key:指異常信息對應的國際化消息文本,這個key值需要在國際化資源文件中定義
          * type:處理那種異常
          * path:定義一但出現異常,需要轉向那個頁面,如果不定義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;//這是參數集合
     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資源文件
      內容: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 閱讀(496) | 評論 (0)編輯 收藏

    Converter添加java.util.Date類型轉換器
    1 編寫UtilDateConverter轉換器類,
    實現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()方法注冊轉換器到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,并設</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轉換器類,
    實現Converter接口的convert方法(com.sun.org.apache.commons.beanutils.Converter)
    (同上)
    2 編寫UtilDateConverterInitWithPlugIn類實現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 閱讀(376) | 評論 (0)編輯 收藏

    DynaActionForm 配態form
    1 配置動態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 獲取頁面的值:
    動態ActionForm其實是把頁面的html元素的名字和值放到名字和值放到map中,所以通過get方法可以取出相應的值
    (1) String sname=(String)addStudentForm.get("sname");
     EL:   ${dynabean(addStudentForm).map.prop}
    (2) String sname=(String)addStudentForm.get("sname");
    動態ActionForm的驗證,通常使用動態驗證框架validator

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

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

    網站struts.apache.org
    實踐步驟:
    1 搭建環境
      (1)導入jar包
         使用其中相關的類(可將所有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>//參數名
       <param-value>/WEB-INF/struts-config.xml</param-value>//文件名
      </init-param>
      <load-on-startup>0</load-on-startup>//服務啟起就實例化,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約束規定。
    ------------------------------------------------------------
    3 建立Action
     (1)建立一個類,繼承org.apache.struts.action.Action。重寫execute方法
        需要強制轉型
        LoginFrom lof=(LoginFrom)form;
        調用其它模塊
        跳轉(根據關鍵字,關鍵字參照該action中forward標簽中的name屬性)
        mapping.findForward("name屬性");
     (2)注冊,修改配置文件struts-config.xml
     <action>
     <action-mappings>
            <action path="指明調用者(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 發送請求
    請求上傳WEB服務器(處理.do的請求)
    3 填充FORM(實例化,復位,填充數據,校驗,保存)
    (*.do請求)從ActionConfig中找出對應該請求的Action子類,如沒有對應的Action,控制器直接轉發給
    JSP或靜態頁面。如有對應的Action且這個Action有一個相應的ActionForm.
    ActionForm被實例化并用http請求的數據填充其屬性,并且保存在ServletContext中(request或session中),
    這樣它們就可以被其它Action對象或者JSP調用。
    4 派發請求
    控制器根據配置信息ActionConfig將請求派發到具體的Action,相應的FormBean一并傳給這個Action的execute()方法.
    5 處理業務
    Action一般只包含一個execute方法,它負責執行相應的業務邏輯(調用其它業務模塊).完畢返回一個ActionForward對象,
    控制器通過該ActionForward對象來進行轉發工作
    6 返回響應
    Action根據業務處理的不同結果返回一個目標響應對象給總控制器,該目標響應對象對應一個具體的JSP頁面或另一Action.
    7 查找響應(可以是一個Action)
    8 響應用戶
    -----------------------------------------------------------------------------------------------------------
    組件
    ActionSerlet,Action Classes,Action Mapping(此處包括ActionForward),ActionForm Bean.
    Struts中的MVC:
    1 模型(Model):本質上來說在Struts中Model是一個商業邏輯類,開發者實現商業邏輯。
    2 視圖(View):View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構成,利用他們可以快速建立應用系統的界面。
    3 控制器(Controller),前端控制器是一個Servlet,它將客戶端請求轉發到相應的后端控制器Action類。
    注意:官方認為ActionForm Bean應為控制層(Controller)組件,自已寫的JavaBeans為模型(Model)
    -----------------------------------------------------------------------------------
    ActionServlet(中心控制器)
     定義:繼承自javax.servlet.http.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>
      <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文件系統默主調用,可以不<init-param>配置
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    -------------------------------------------------------------------
    Action
    發出該action請求時初始化,不是在讀取配置時,并且只初始化一次。
    Action是線程不安全的,因為所有的請求共享一個別action實例。
    所以:不要用實例變量或者類變是共享只是針對某個請求的數據
          注意資源操作的同步性。
    應用:
    統計一個action訪問次數
    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.設為true時為容器外跳轉,相當于response.sendRedirect();
    在xml文件中的path中要寫絕對路徑。
    --------------------------------------------------------------
    ActionForm工作原理
    步驟:
    (1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射
    (2)根據name屬性,查找form bean中的配置信息
    (3)檢查Action的form bean的使用范圍,確定在此范圍下(request,session),是否已經有些form bean的實例。
    (4)假如當前范圍下,已經存在了些form bean的實例,而是對當前請求來說,是同一種類型的話,就重用。
    (5)否則,就重新構建一個form bean的實例(調用構造方法),并且保存在一定作用范圍。
    (6)form bean的reset()方法被調用
       在作數據收集前被調用,是一個重置的方法.
    (7)調用對應的setter方法,對狀態屬性賦值
    (8)如果validatede的屬性設置為true,就調用form bean的validate()方法。
       該方法進行表單的服務器端驗證.
    (9)如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數,傳給Action實例的execute()方法并執行。
    注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現什么處理功能,所以重新覆蓋。

               
    注意:
    1 無參構造方法必須有
    2 Scope缺省值是session
    3 調用setter方法,實質上是對應的標準set方法
    分析:
    4 從過程去查看
    HttpSessionAttributeListener
    ServletRequestAttributeListener
    5 從結果去查看
    ---------------------------------------------------
    ActionForm
    reset()方法,用于恢復屬性,在重新復值前由controller調用。
    valldate()方法,用于校驗屬性,返回ActionErrors,如果成功返回null,默認返回null.
    關閉校驗功能設置struts-config.xml中<action>標簽的validate屬性為false.
    validate
    ----------------------------------------------------------
    struts-config.xml文件中的action標簽
    1 attribute屬性
    用來存取form的關鍵字,缺省值與name一樣,如果設了必須用該屬性。
    2 validate屬性(action中的屬性)
    用來控制是否校驗表單,缺省為false,false不校驗。
    3 input屬性
    當表單校驗失敗時將請求轉發的URL(或目標模塊,可以為另一個別action),結合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>全局跳轉標簽
    <global-forwards>
      <forward name="error" path="Error.jsp"/>
    </global-forwards>
    使用方式同action中的forwar標簽

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

    一個java類,運行在服務器端的,處理web請求
    //客戶端跳轉
    response.sendRedirect()
    //服務器端跳轉
    RequsetDispatcher dispatcher=request.getRequestDispatcher("/...");
    dispatcher.forward(request,response);
    dispatcher.include()
    1 out
    struts中用PrintWriter out=request.getWriter()得到
    2 request
    (1)String getParameter(String name)         根據頁面表單組件名稱獲取頁面提交數據
    (2)String[] getParameterValues(String name) 獲取一個頁面表單組件對應多個值時的用戶的請求數據
    (3)void setCharacterEncoding(String name)   指定每個請求的編碼,在調用request.getParameter()方法之前進行設置,可以用于解決中文亂碼
    (4)request.getRequestDispatcher(String path)返回一個javax.servlet.RequestDispatcher對象,該對象的forward方法用于轉發請求
       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)//設置會話過期時間
    (6)void invalidate()//銷毀session,刪除HttpSession對象及數據
    (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 閱讀(246) | 評論 (0)編輯 收藏

    web Service
    xml數據格式
    SOAP(簡單對象訪問)
    WSDL
    -----------
    開發步驟
    1 建立服務并發布
      XFire
      × 導入jar包
      * service.xml
      * web.xml
     
      創建接口
      public interface IProcessCredit{
         public String sayHello(String username);
      }
      和實現類
      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調用服務
      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 實現接口
    public class ProessBookService implements IBookService {
     public int addBook(Book book) {
      BookDao bookDao=new BookDao();
      return bookDao.addBook(book);
     }
    }

    3 在src下創建META-INF文件夾,在META-INF下創建xfire文件夾,在xfire下創建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 編寫調用方法
    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 閱讀(293) | 評論 (0)編輯 收藏
    servlet邊濾器
    1 編寫實現javax.servlet.Filter接口的類
    public class MyFilter implements Filter {
     private FilterConfig config;
     private String encoding="IS0-8859-1";
     public void destroy() {//過濾器當前類被消滅時調用的方法
     }
     public void doFilter(ServletRequest request, ServletResponse response,//過濾器主方法
       FilterChain chain) throws IOException, ServletException {
      request.setCharacterEncoding(encoding);
      chain.doFilter(request, response);//設置其可被下個過濾器繼續調用
     }
     public void init(FilterConfig config) throws ServletException {//過濾器當前類初始化時調用此方法
      this.config=config;
      String s=config.getInitParameter("encoding");//得到相應參數
      if(s!=null){
       encoding=s;
      }
     }
    }
    FilterConfig類用于獲得初始化的參數的包裝類
    FilterChain類是過濾器的鏈,可以多重過濾
    2 配置Servlet過濾器
    <filter>
       <filter-name>EncodingFilter</filter-name>過濾器名稱
       <filter-class>com.webs.MyFilter</filter-class>對應類
       <init-param>參數
        <param-name>encoding</param-name>參數名
        <param-value>UTF-8</param-value>參數值
       </init-param>
    </filter>
    <filter-mapping>映射特定資源
      <filter-name>EncodingFilter</filter-name>過濾器名稱
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    3 頁面
    4 注意:服務器端跳轉是不過濾的
    posted @ 2009-11-29 22:47 junly 閱讀(222) | 評論 (0)編輯 收藏
    僅列出標題
    共18頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
    主站蜘蛛池模板: 91免费国产视频| 精品久久久久久亚洲精品| 国产成人亚洲午夜电影| 日本一道在线日本一道高清不卡免费| 亚洲国产精品综合久久网各| 日韩中文字幕免费视频| 久久亚洲熟女cc98cm| 永久在线免费观看| 亚洲av永久无码嘿嘿嘿| 免费不卡视频一卡二卡| 亚洲日韩一区二区三区| 国产一级大片免费看| 特a级免费高清黄色片| 亚洲午夜国产精品无码老牛影视 | 亚洲人成www在线播放| 三年片在线观看免费观看高清电影| 亚洲a级片在线观看| 免费无遮挡无码永久视频| 亚洲成年人电影在线观看| 免费一本色道久久一区| 日日摸日日碰夜夜爽亚洲| 亚洲国产专区一区| 日韩免费观看一区| 亚洲综合校园春色| 国产免费人人看大香伊| 91成人免费观看在线观看| 亚洲国产精品不卡在线电影| 拨牐拨牐x8免费| 黄桃AV无码免费一区二区三区| 亚洲成A人片在线观看无码不卡 | 久久久久久久91精品免费观看| 亚洲熟女精品中文字幕| 亚洲国产成人VA在线观看| 日韩精品无码专区免费播放| 亚洲精品中文字幕无乱码麻豆| www亚洲精品少妇裸乳一区二区| 精品视频在线免费观看| 无码专区一va亚洲v专区在线| 成年女人A毛片免费视频| 亚洲制服丝袜第一页| 亚洲精品无码久久久久AV麻豆|