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

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

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

    2006年7月12日

    iframe高度自動(dòng)調(diào)整(通過IE,firefox,opera測試)

    1.index.html
        <iframe id="mainIframe" scrolling="no" frameborder="0" width="100%" src="a.html"></iframe>
        <a href="#" onclick="page('a.html')">a頁面</a><a href="#" onclick="page('b.html')">b頁面</a>

    2 a.html  //內(nèi)嵌頁面
        <script language="javascript">
              changeHight();
        </script>

    3. b.html  //內(nèi)嵌頁面
         <script language="javascript">
              changeHight();
        </script>

    4. page.js
     function changeHight(){
      var iFrm = parent.document.getElementById("mainIframe");
         var subWeb = iFrm.contentDocument;
         if(subWeb){
        if (subWeb.body.scrollHeight>480)
       iFrm.height = subWeb.body.scrollHeight+20;
      else
          iFrm.height=500;
      } 
      if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight!="0"){
       parent.document.getElementById("mainIframe").style.height=window.document.body.scrollHeight;
      }
      if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight=="0"){
       parent.document.getElementById("mainIframe").style.height=500;
      }
    }

    function page(page){
        document.getElementById("mainIframe").src=page;
    }



    造成IE,FireFox,Opera中Iframe顯示差異原因在于
    1.iframe在FireFox中取法為parent.document.getElementById("mainIframe").contentDocument,而在ie,opera中為parent.document.getElementById("mainIframe").document
    2.當(dāng)頁面無滾動(dòng)時(shí),window.document.body.scrollHeight在IE中能取到,fireFox和Opera中取不到。

    posted @ 2009-04-21 14:05 software5168 閱讀(1293) | 評(píng)論 (0)編輯 收藏

    文件上傳下載

         摘要: 1.myapp/index.html <html> <head> 文件操作 <iframe id="iframefile" scrolling="no" frameborder="0" width="100%" src="/myapp/fileUpload.jsp"></iframe> &l...  閱讀全文

    posted @ 2009-02-26 17:11 software5168 閱讀(324) | 評(píng)論 (0)編輯 收藏

    如何控制單選、復(fù)選、列表框

    一些頻繁使用的javascript頁面控制,做個(gè)總結(jié)。
    下面是部分代碼。
    <html>
    <head>
    <script language="javascript">
     function a(){
      window.document.getElementsByName("dx")[0].checked=true;
     }
     function b(){
      window.document.getElementsByName("dx")[0].checked=false;
     }
     function c(){
      window.document.getElementsByName("fx")[0].checked=true;
     }
     function d(){
      window.document.getElementsByName("fx")[0].checked=false;
     }
     function e(){
      for(i=0;i<window.document.getElementsByName("fx").length;i++){
          if(!window.document.getElementsByName("fx")[i].checked){
           window.document.getElementsByName("fx")[i].checked=true;
          }
         }
     }
     function f(){
      for(i=0;i<window.document.getElementsByName("fx").length;i++){
          if(window.document.getElementsByName("fx")[i].checked){
           window.document.getElementsByName("fx")[i].checked=false;
          }
         }
     }
     function g(){
      window.document.getElementById("lbka")[1].selected=true;
     }
     function h(){
      alert("選擇號(hào)為:"+window.document.getElementById("lbka").selectedIndex + "    值為:" +window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].value+"    文本值為:" + window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].text);
     }
     function m(){
      sel = false;
      var val="";
         for(i=0;i<window.document.getElementsByName("dx").length;i++){
          if(window.document.getElementsByName("dx")[i].checked){
           val = window.document.getElementsByName("dx")[i].value;
           sel=true;
        break;
          }  
         }
        if(sel){
       alert("單選值為:"+val);
         
         }else{
       alert("請(qǐng)選擇文件");
          return false;
      }  
     }
     function j(){
      var sel = false;
      var val="";
         for(i=0;i<window.document.getElementsByName("fx").length;i++){
          if(window.document.getElementsByName("fx")[i].checked){
           if(val==""){
            val=window.document.getElementsByName("fx")[i].value;
           }else{
            val = val + "," +window.document.getElementsByName("fx")[i].value;
           } 
          }
         }
         if(val==""){
          alert("請(qǐng)選擇文件");
          return false;
         }else{
       alert("復(fù)選值為:"+val);
      }
     }
    </script>
    </head>
    <body>
    <table id="table1" width="100%"  border="1" align="center" cellpadding="0" cellspacing="0">
     <tr>
      <td>文件</td>
      <td>列表框</td>
      <td>單選</td>
      <td>復(fù)選</td>
     </tr>
     <tr>
      <td>文件A</td>
      <td><select name="lbka"><option value="lbka1">文件A1</option><option value="lbka2">文件A2</option></select></td>
      <td><input type="radio" name="dx" value="dxa"></td>
      <td><input type="checkbox" name="fx" value="fxa"></td>
     </tr>
     <tr>
      <td>文件B</td>
      <td><select name="lbkb"><option value="lbkb1">文件B1</option><option value="lbkb2">文件B2</option></select></td>
      <td><input type="radio" name="dx" value="dxb"></td>
      <td><input type="checkbox" name="fx" value="fxb"></td>
     </tr>
     <tr>
      <td colspan="4">
       <a href="#" onclick="a();">單選A選中</a>
       <a href="#" onclick="b();">單選A不選中</a>
       <a href="#" onclick="c();">復(fù)選A選中</a>
       <a href="#" onclick="d();">復(fù)選A不選中</a>
       <a href="#" onclick="e();">復(fù)選全選</a>
       <a href="#" onclick="f();">復(fù)選全不選</a>
       <a href="#" onclick="g();">選中列表框文件A2</a>
       <a href="#" onclick="h();">取得選中列表框A的值,文本</a>
       <a href="#" onclick="m();">判斷單選選擇</a>
       <a href="#" onclick="j();">判斷復(fù)選選擇</a>
      </td>
     </tr>
    </table>
    </body>
    </html>

    posted @ 2007-08-09 09:17 software5168 閱讀(1099) | 評(píng)論 (0)編輯 收藏

    如何動(dòng)態(tài)控制表單元素

    主要通過javascript實(shí)現(xiàn),理解IE的DOM結(jié)構(gòu),并調(diào)用元素的固定方法,可以實(shí)現(xiàn)表單元素的動(dòng)態(tài)增刪。
    下面是部分代碼。
    <html>
    <head>
    <script language="javascript">
     function add(){
      //取得表格
      var table = document.getElementById("table1");
      //取得行數(shù);
      var num = table.rows.length;
      //增加一行
      var newrow1 = table.insertRow(num-1);
      var cell1 = newrow1.insertCell();
         var cell2 = newrow1.insertCell();
         var cell3 = newrow1.insertCell();
         var cell4 = newrow1.insertCell();
      //增加行元素
      var inputcell2 = document.createElement("<input size='32' name=''>");
         cell2.appendChild(inputcell2);
      var inputcell4_1 = document.createElement("<input size='32' name=''>");
      var inputcell4_2 = document.createElement("<input type='button' value='刪除元素'onClick='del(this);'/>");
         cell4.appendChild(inputcell4_1);
      cell4.appendChild(inputcell4_2);
      //刷新標(biāo)簽顯示
      frash();
     }
     function del(obj){
      //取得按鈕所在行
      var i = obj.parentNode.parentNode.rowIndex;
          var tab = document.getElementById("table1");
          //刪除按鈕所在行
      tab.deleteRow(i-1); 
          frash();
     }
     function frash(){
      var table = document.getElementById("table1");
         var num = table.rows.length;
         //計(jì)算動(dòng)態(tài)元素個(gè)數(shù)
      var n = num-2;
         for(i=1;i<=n;i++){
       //設(shè)置標(biāo)簽值
          table.rows[i].cells[0].innerText="元素"+i+"屬性A";
          //設(shè)置屬性值
       table.rows[i].cells[1].childNodes[0].setAttribute("name","ysa"+i);
          table.rows[i].cells[2].innerText="元素"+i+"屬性B";
          table.rows[i].cells[3].childNodes[0].setAttribute("name","ysb"+i);
         }
     }
    </script>
    </head>
    <body>
    <table id="table1" width="100%"  border="1" align="center" cellpadding="0" cellspacing="0">
     <tr>
      <td>標(biāo)簽1</td>
      <td><input name="a"></td>
      <td>標(biāo)簽2</td>
      <td><input name="b"></td>
     </tr>
     <tr>
      <td colspan="4" align="center"><a href="#" onclick="add();">增加元素</a></td>
     </tr>
    </table>
    </body>
    </html>

    posted @ 2007-08-08 16:11 software5168 閱讀(676) | 評(píng)論 (0)編輯 收藏

    如何實(shí)現(xiàn)頁面打印

    頁面打印通常直接調(diào)用IE中打印命令,并通過class控制打印范圍。當(dāng)頁面文件內(nèi)容過多,無法完整打印時(shí),可以通過javascript控制縮放實(shí)現(xiàn)完整打印。
    下面是部分代碼。
    <html>
    <head>
    <title>***上海市眼病防治中心病人結(jié)帳費(fèi)用報(bào)表***</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <!--media=print 這個(gè)屬性可以在打印時(shí)有效-->
    <style media=print>
    .Noprint{display:none;}
    .PageNext{page-break-after: always;}
    </style>
    <style>
    body,td,th
    {
    font-size: 12px;
    }
    .tdp
    {
    border-bottom: 1 solid #000000;
    border-left: 1 solid #000000;
    border-right: 0 solid #ffffff;
    border-top: 0 solid #ffffff;
    }
    .tabp
    {
    border-color: #000000;

    border-collapse:collapse;
    }
    .NOPRINT {
    font-family: "宋體";
    font-size: 12px;
    }

    </style>
    <script language="javascript">
      var i=0;
           function zoomL(){
          i++;
          document.getElementById("f").style.zoom=1+i/3;
      }
           function zoomS(){
          i--;
          document.getElementById("f").style.zoom=1+i/3;
      }
    </script>
    </head>

    <body >
    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0 VIEWASTEXT> </OBJECT>
    <input type=button value=打印 onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
    <input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
    <input type=button value=頁面設(shè)置 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
    <input type=button value=打印預(yù)覽 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
    <input type=button value=放大 onclick="zoomL();" class="NOPRINT">
    <input type=button value=縮小 onclick="zoomS();" class="NOPRINT">
    <br/>
    <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr align="center">
    <td colspan="5"><font size="3">上海市眼病防治中心病人結(jié)帳費(fèi)用報(bào)表(A) </font></td>
    </tr>
    <tr>
    <td>匯總?cè)舜?5</td>
    <td>費(fèi)用合計(jì) 15853.12</td>
    <td>統(tǒng)計(jì)日期 </td>
    <td>制表人 023</td>
    <td>制表日期:2004-05-13</td>
    </tr>
    </table>

    <table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp" id="f">
    <tr>
    <td >姓名</td>
    <td >住院號(hào)</td>
    <td >科室</td>
    <td >結(jié)帳日期</td>
    <td >出院日期</td>
    <td >費(fèi)用合計(jì)</td>
    <td >醫(yī)保交易費(fèi)用</td>
    <td >分類給付費(fèi)用</td>
    <td >非醫(yī)保交易費(fèi)</td>
    </tr>
    <tr>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td>
    <td >&nbsp;</td> 
    <td >&nbsp;</td> 
    </tr>
    </table>
    <hr align="center" width="90%" size="1" noshade class="NOPRINT" >
    <!--分頁-->
    <div class="PageNext"></div>
    <table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp">
    <tr>
    <td >第2頁</td>
    </tr>
    <tr>
    <td >看到分頁了吧</td>
    </tr>
    <tr>
    <td >&nbsp;</td>
    </tr>
    <tr>
    <td >&nbsp;</td>
    </tr>
    <tr>
    <td ><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="50%" >這樣的報(bào)表
    對(duì)一般的要求就夠了。</td>
    <td>&nbsp;</td>
    </tr>
    </table></td>
    </tr>
    </table>

    <table width="780%" border="1" class="Noprint">
    <tr>
    <td>能不能打印</td>
    </tr>
    </table>

    </body>
    </html>

    posted @ 2007-08-08 11:27 software5168 閱讀(592) | 評(píng)論 (0)編輯 收藏

    如何同時(shí)提交表單中的文件和文本

    思路是把表單類型設(shè)置為enctype="multipart/form-data",其他表單中文本數(shù)據(jù)通過javascript處理,附加在action后面,后臺(tái)通過request.getParameter()取得。上傳文件調(diào)用commons-fileupload.jar中方法。

    下面是部分代碼。
    <form  name="ajform" action="/da.do" method="post" enctype="multipart/form-data">
       <tr><td><input name="a" value=""></td></tr>
       <tr><td><input name="b" type="file"></td></tr>
       <tr><td><a href="#" onclick="checksubmit();">提交</a></td></tr>
    </form>

    <script language="javascript">
       function checksubmit(){
          var value  = "/da.do?formAction=save";   
          value = value+"&a="+ window.document.getElementById("a").value;
          window.document.ajform.action=value;
          window.document.ajform.submit();
       }
    </script>

    String a = request.getParameter("a");
    try {
          //文件上傳目錄“/file/wj”
        String filepath= request.getSession().getServletContext().getRealPath("/")+"file"+File.separator+"wj";
       //文件上傳臨時(shí)目錄“/file/temp”
        String tempPath = request.getSession().getServletContext().getRealPath("/")+"file"+File.separator+"temp";
        File dir = new File(filepath);
          //建立目錄
           if(!dir.exists()){
            dir.mkdirs();
           }
           File dir1 = new File(tempPath);
           if(!dir1.exists()){
            dir1.mkdirs();
           }
           DiskFileUpload fu = new DiskFileUpload();
           //設(shè)置最大文件尺寸,這里是10MB
              fu.setSizeMax(10485760);
              //設(shè)置緩沖區(qū)大小,這里是4kb
              fu.setSizeThreshold(4096);
              //設(shè)置臨時(shí)目錄:
              fu.setRepositoryPath(tempPath);
             
        List fileItems = fu.parseRequest(request);
        Iterator iter = fileItems.iterator();
        while (iter.hasNext()) {
           FileItem item = (FileItem) iter.next();
            String fileName = item.getName();
            //判斷是否為文件
            if(fileName!=null){
             //取文件名
             String name = fileName.substring(fileName.lastIndexOf(File.separator)+1);
             if(fileName!=null&& !fileName.equals("")) {          
               File file = new File(filepath+File.separator+name);
                       //上傳文件 
                      item.write(file);
                    }
            } 
         }
       } catch (Exception e) {
           e.printStackTrace();
       }

    posted @ 2007-08-08 10:52 software5168 閱讀(899) | 評(píng)論 (0)編輯 收藏

    最簡單的視頻頁面

    <html>
    <head>
    </head>
    <body>
    <embed height=240 name=aa style="BORDER-BOTTOM:#2a8a21 3px solid;BORDER-LEFT:#2a8a21 3px ?solid;BORDER-RIGHT:#2a8a21 3px solid;BORDER-TOP:#2a8a21 3px solid"
    ?type=audio/x-pn-realaudio-plugin width=320 loop="no" console="clip1" reset="false"
    ?controls="ImageWindow" src="a1.rmvb">
    </embed><br>
    <embed height=30 type=audio/x-pn-realaudio-plugin width=320? console="clip1"? reset="false" autostart="false" controls="controlpanel">
    </embed><br>
    <embed height=30 type=audio/x-pn-realaudio-plugin width=320? console="clip1"? reset="false" autostart="false" controls="statusbar">
    </embed><br>
    <Script Language=JavaScript>
    function OpenFile(txt){
    ?document.aa.src=txt.value;
    }
    </Script>
    </body>
    </html>

    posted @ 2007-01-12 18:34 software5168 閱讀(745) | 評(píng)論 (2)編輯 收藏

    ant 模板

    1。EJB打包
    <?xml version="1.0"?>
    <project name="jartest" default="jar" basedir=".">
    <property name="build.dir" value="${basedir}/build" />
    <property name="build.classes.dir" value="${build.dir}/classes" />
    <target name="jar" description="打包成Jar">
    <jar jarfile="${basedir}/ejbfile.jar">
    <fileset dir="${build.classes.dir}">
    <include name="**/*.class" />
    </fileset>
    <metainf dir="${basedir}/META-INF ">
    <include name="**" />
    </metainf>
    </jar>
    </target>
    </project>

    2。web應(yīng)用打包
    <?xml version="1.0"?>
    <project name="wartest" default="war" basedir=".">
    <target name="war" description="創(chuàng)建WEB發(fā)布包">
    <war warfile="${basedir}/EJBTest.war" webxml="${basedir}/WEB-INF/web.xml">
    <fileset dir="${basedir}">
    <include name="**"/>
    <exclude name="build.xml" />
    <exclude name="/WEB-INF/web.xml" />
    </fileset>
    </war>
    </target>
    </project>

    posted @ 2006-12-14 11:03 software5168 閱讀(513) | 評(píng)論 (0)編輯 收藏

    電子書下載連接

    ejb3.0實(shí)例教程
    http://book.knowsky.com/down/818.html


    J2EE應(yīng)用與BEA WebLogic Server(第二版)
    http://www.itepub.net/html/ebookcn/2006/0523/40144.html

    JavaScript權(quán)威指南第四版
    http://www.itepub.net/html/ebookcn/2006/0523/40153.html

    Jbuilder2006
    http://www.borland.com/downloads/download_jbuilder.html
    JBuilder2006破解
    http://www.54bk.com/user1/2690/archives/2005/21893.html

    posted @ 2006-12-13 09:18 software5168 閱讀(456) | 評(píng)論 (0)編輯 收藏

    springMVC小結(jié)_1


    1.web.xml中配置Spring的servlet和servlet-mapping
    ???<servlet>
    ??????? <servlet-name>example</servlet-name>
    ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ????????<init-param>?
    ????????????<param-name>contextConfigLocation</param-name>?
    ????????????<param-value>/WEB-INF/application-servlet.xml</param-value>?
    ????????</init-param>?
    ????????<load-on-startup>1</load-on-startup>
    ??? </servlet>
    ??? <servlet-mapping>
    ??????? <servlet-name>example</servlet-name>
    ??????? <url-pattern>*.do</url-pattern>
    ??? </servlet-mapping>
    2.配置spring配置文件application-servlet.xml
    ???<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    ?????<property name="prefix">
    ?????????<value>/page/</value>
    ?????</property>
    ?????<property name="suffix">
    ?????????<value>.jsp</value>
    ?????</property>
    ???</bean>
    ???<bean id="urlMapping"?class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ????????<property name="mappings">
    ????????????<props>
    ????????????????<prop key="/login.do">loginAction</prop>
    ????????????</props>
    ????????</property>
    ???</bean>
    ???<bean id="loginAction" class="loginAction">
    ????????<property name="commandClass">
    ????????????<value>?LoginActionVo??</value>
    ????????</property>
    ????????<property name="formView">
    ????????????<value>login</value>
    ????????</property>
    ????????<property name="sessionForm">
    ????????????<value>true</value>
    ????????</property>
    ????????<property name="serviceLocator">
    ????????????<ref bean="servicelocator" />
    ????????</property>
    ?</bean>
    3.新建類繼承SimpleFormController﹐並複寫protected Object formBackingObject(HttpServletRequest request)?和?protected ModelAndView onSubmit(HttpServletRequest request,?HttpServletResponse response,
    ?Object cmd, BindException ex)。常用結(jié)構(gòu)為
    ???protected Object formBackingObject(HttpServletRequest request){
    ??????LoginActionVo??loginActionVo?? = new LoginActionVo?();
    ??????request.setAttribute("?loginActionVo",?loginActionVo);
    ??????return loginActionVo;
    ???}
    ???protected ModelAndView onSubmit(HttpServletRequest request,?HttpServletResponse response,
    ???????Object cmd, BindException ex){
    ??????LoginActionVo??loginActionVo =(LoginActionVo)cmd;
    ??????Map map = new HashMap();
    ?????map.put("?loginActionVo",?loginActionVo);
    ?????request.getSession().setAttribute(this.getFormSessionAttributeName(),?loginActionVo);
    ?????return new ModelAndView("login",map);
    ? }

    4.將jsp頁面參數(shù)和VO進(jìn)行綁定。綁定的方法為頁面元素name和VO對(duì)象對(duì)應(yīng)﹐當(dāng)進(jìn)行深層次的綁定時(shí)﹐要注意﹐在變量的get方法中進(jìn)行初始化。在servlet2.4容器中可以不用c:out標(biāo)籤
    輸入框綁定﹕<input name="user.name"? value = "<c:out value="${loginActionVo.user.name}"/>" type="text" disabled="disabled"? size="14" maxlength="14" /></td>
    VO為﹕
    ?public class loginActionVo{
    ????private User user;
    ????public?User getUser(User user){
    ??????if( user == null){
    ?????????user = new User();
    ??????}
    ??????return user;
    ???}
    ?}

    ???

    posted @ 2006-10-09 15:14 software5168 閱讀(723) | 評(píng)論 (0)編輯 收藏

    springMVC心得

    以SimpleFormController為例
    1。spring 接收一個(gè)請(qǐng)求後首先會(huì)判斷"get"還是"post"方法

    2。1 "get"方法時(shí)
    ?????????2。1。1 首先創(chuàng)建一個(gè)command對(duì)象﹐通過調(diào)用AbstractFormController的formBackingObject方法得到﹐通常是一個(gè)pojo﹐根據(jù)name用來和提交的數(shù)據(jù)綁定。
    ????????? 2。1。2 然後會(huì)創(chuàng)建一個(gè)BindException對(duì)象﹐裡面包括command對(duì)象﹐和其他一些屬性。
    ???????????2。1。3 判斷sessionForm 屬性﹐默認(rèn)為false。如果為true﹐就會(huì)把command對(duì)象對(duì)象保存在session裡???? 面。session中key為類名+".FORM." + command對(duì)象名。可以通過request.getSession().getAttribute(this.getFormSessionAttributeName(request));得到command對(duì)象。
    ??????
    ???2。1。4 調(diào)用AbstractFormController的referenceData方法。這個(gè)方法默認(rèn)為空﹐可以復(fù)寫來初始化頁面參數(shù)。

    2。1。5 返回ModelAndView對(duì)象﹐返回formview頁面。

    2 。2 “post”方法時(shí)
    ???2。2。1 首先得到command對(duì)象,如果SessionForm = false﹐調(diào)用formBackingObjectde創(chuàng)建
    ?????????????????????如果SessionForm = true,從request.getSession中得到原command對(duì)象﹐然後將command對(duì)象從
    ?????????????????????Session中刪除。
    ? 2。2。2? 然後會(huì)創(chuàng)建一個(gè)ServletRequestDataBinder對(duì)象﹐裡面包括command對(duì)象﹐和其他一些屬性。
    ???????????????????這個(gè)過程將調(diào)用initBinder()﹔可以複寫這個(gè)方法初始化數(shù)據(jù)。
    ?2。2。3 調(diào)用processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command,? BindException errors)。有錯(cuò)誤時(shí)返回formview頁面﹐否則進(jìn)入successview頁面。這個(gè)過程將調(diào)用onSubmit(Object command)﹐必須複寫這個(gè)方法放入業(yè)務(wù)邏輯。
    ?
    ???




    posted @ 2006-09-17 14:11 software5168 閱讀(562) | 評(píng)論 (0)編輯 收藏

    springMVC第四個(gè)例子

    1./WEB-INF/web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
    ?xmlns="?xmlns:xsi="?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    ?<!--
    <!DOCTYPE web-app
    ??? PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    ??? "
    <web-app>
    -->
    ?
    ?<!--
    ?<context-param>
    ??? ?<param-name>contextConfigLocation</param-name>
    ??? ?<param-value>/WEB-INF/application-servlet.xml</param-value>
    ? ?</context-param>
    ?<listener>
    ???? <listener-class>
    ?????? org.springframework.web.context.ContextLoaderListener
    ???? </listener-class>
    ? ?</listener>
    ? ?-->
    ?<servlet>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>??
    ??<init-param>
    ????????? <param-name>contextConfigLocation</param-name>
    ????????? <param-value>/WEB-INF/application-servlet.xml</param-value>
    ???? ?</init-param>
    ??<load-on-startup>1</load-on-startup>
    ??? </servlet>
    ?
    ??? <servlet-mapping>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <url-pattern>*.do</url-pattern>
    ??? </servlet-mapping>
    ?
    <!--
    ?<taglib>
    ???? ?<taglib-uri>/spring</taglib-uri>
    ???? ?<taglib-location>/WEB-INF/spring.tld</taglib-location>
    ?</taglib>
    -->?
    </web-app>

    2./WEB-INF/application-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "
    <beans>
    ??? <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="/login.do">loginAction</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    ??????? <property name="viewClass">
    ??????????? <value>org.springframework.web.servlet.view.JstlView</value>
    ??????? </property>
    ??????? <property name="prefix">
    ??????????? <value>/</value>
    ??????? </property>
    ??????? <property name="suffix">
    ??????????? <value>.jsp</value>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="loginAction" class="onlyfun.caterpillar.LoginAction">
    ??????? <property name="commandName">
    ??????? ?<value>command</value>
    ??</property>
    ??<property name="commandClass">
    ??????????? <value>onlyfun.caterpillar.LoginForm</value>
    ??????? </property>
    ??????? <property name="successView">
    ??????????? <value>success</value>
    ??????? </property>
    ??????? <property name="formView">
    ??????????? <value>form</value>
    ??????? </property>
    ???????<property name="user">??????????
    ????????????<ref local="user" />
    ??????? </property>
    ??? </bean>?
    ???
    ???<bean id="user" class="onlyfun.caterpillar.User">
    ?????<property name="username">
    ??????? ?<value>111</value>
    ?????</property>
    ?????<property name="password">
    ??????? ?<value>111</value>
    ?????</property>
    ????</bean>
    </beans>



    3./form.jsp
    <
    %@taglib prefix="spring" uri=">
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head><title>Login</title></head>
    <body>
    ?<spring:bind path="command.*">
    ??????? <font color="red"><b>${status.errorMessage}</b></font><br>
    ??? </spring:bind>
    ?? ? ??請(qǐng)輸入使用者名稱與密碼:<p>?? ?
    ??? <form name="loginform" action="login.do" method="post">
    ???? <spring:bind path="command.username">??
    ???????? ?名稱 <input type="text" name="${status.expression}" value="${status.value}"/>
    ???????? ?<font color="red">${status.errorMessage}</font><br>
    ???? </spring:bind>
    ???? <spring:bind path="command.password">?
    ???????? ?密碼 <input type="password" name="${status.expression}" value="${status.value}"/>
    ???????? ?<font color="red">${status.errorMessage}</font><br>
    ???? </spring:bind>
    ??????? <input type="submit" value="確定"/>
    ??? </form>
    ? ??? 注意:輸入錯(cuò)誤會(huì)再回到這個(gè)頁面中。 ?
    </body>
    </html>

    4./index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>
    ? </head>
    ? <body>??
    ??? begin......
    ??? <%
    ???? response.sendRedirect("login.do");
    ??? %>
    ? </body>
    </html>

    5./success.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <
    %@taglib prefix="c" uri=">
    <html>
    <head><title>Login Success</title></head>
    <body>
    ??? <H1><c:out value="用戶名﹕${user}"/></H1>
    </body>
    </html>

    6./WEB-INF/classes/onlyfun/caterpillar/LoginAction.class
    package onlyfun.caterpillar;

    import org.springframework.validation.BindException;
    import org.springframework.web.servlet.mvc.SimpleFormController;
    import org.springframework.web.servlet.*;

    public class LoginAction extends SimpleFormController {?
    ????private User user;
    ??? protected ModelAndView onSubmit(Object command,BindException errors) throws Exception {
    ?????? LoginForm form = (LoginForm) command;?
    ???????String username = user.getUsername();
    ?????? String password = user.getPassword();
    ?????? if(username.equals(form.getUsername()) &&
    ??? ???? password.equals(form.getPassword())) {
    ????????? return new ModelAndView(this.getSuccessView(),"user", form.getUsername());
    ?????? }
    ?????? else {
    ??? ??? errors.reject("loginfail", "使用者名稱或密碼錯(cuò)誤");
    ??? ??? if(!(username.equals(form.getUsername()))){
    ??? ???? errors.rejectValue("username", "error", null, "使用者名稱錯(cuò)誤");
    ??? ??? }
    ??? ???if(!(password.equals(form.getPassword()))){
    ??? ???? errors.rejectValue("password", "error", null, "密碼錯(cuò)誤");
    ??? ??? }?? ???
    ?????????? return new ModelAndView(this.getFormView(),errors.getModel());
    ?????? }
    ??? }
    ????public User getUser() {
    ?????return user;
    ????}
    ????public void setUser(User user) {
    ?????this.user = user;
    ????}
    }



    7./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class
    package onlyfun.caterpillar;

    public class LoginForm {
    ??? private String username;
    ??? private String password;
    ???
    ??? public void setUsername(String username) {
    ?????? this.username = username;
    ??? }
    ???
    ??? public void setPassword(String password) {
    ?????? this.password = password;
    ??? }
    ???
    ??? public String getUsername() {
    ?????? return username;
    ??? }
    ???
    ??? public String getPassword() {
    ?????? return password;
    ??? }
    }

    8./WEB-INF/tags/spring.tld

    9./WEB-INF/tags/c.tld

    10./WEB-INF/classes/onlyfun/caterpillar/User.class
    package onlyfun.caterpillar;

    public class User {
    ?private String username;
    ?private String password;
    ?public String getPassword() {
    ??return password;
    ?}
    ?public void setPassword(String password) {
    ??this.password = password;
    ?}
    ?public String getUsername() {
    ??return username;
    ?}
    ?public void setUsername(String username) {
    ??this.username = username;
    ?}
    }

    posted @ 2006-09-06 18:03 software5168 閱讀(1408) | 評(píng)論 (4)編輯 收藏

    ServletConfig與ServletContext的區(qū)別

    ?HttpServletRequest,HttpServletResponse:這兩個(gè)屬性的作用范圍最小。
    ????時(shí)間上:只是本身請(qǐng)求和應(yīng)答完成就失效,當(dāng)然轉(zhuǎn)發(fā)是把當(dāng)前的request對(duì)象取出來傳給另一
    ??????????個(gè)資源,其實(shí)本身的request對(duì)象還是只生存到本次請(qǐng)求結(jié)束,response也同樣。
    ????空間上:只能發(fā)送請(qǐng)求的客戶端有效。

    ????HttpSession:一次連結(jié)到客戶端關(guān)閉,時(shí)間作用范圍比上面兩個(gè)大,空間任用范圍相同。

    ????ServletConfig:從一個(gè)servlet被實(shí)例化后,對(duì)任何客戶端在任何時(shí)候訪問有效,但僅對(duì)本servlet
    ????有效,一個(gè)servlet的ServletConfig對(duì)象不能被另一個(gè)servlet訪問。

    ????ServletContext:對(duì)任何servlet,任何人在任何時(shí)間都有效,這才是真正全局的對(duì)象。

    ????那么,ServletConfig參數(shù)和ServletContext參數(shù)到底應(yīng)該如何使用,如何取得?

    ????一般來說,對(duì)整個(gè)應(yīng)用的配置,為了不使用“硬編碼”,應(yīng)該配置為ServletContext參數(shù),比如字
    ????符集設(shè)定。
    ????<web-app>
    ????????.................
    ????????<init-param>
    ????????????<param-name>charset</param-name>?
    ????????????<param-value>GB2312</param-value>?
    ????????</init-param>
    ????????.................
    ????</web-app>
    ????注意以上格式只是2。0以后的標(biāo)準(zhǔn)格式,舊容器(引擎)采用服務(wù)商自己的格式配置。注意它的
    ????父元素應(yīng)該是<web-app>也就是說它是對(duì)一個(gè)應(yīng)用作用的。

    ????而如果只有一個(gè)特定的servlet要設(shè)定的參數(shù),其它servlet不能共享,應(yīng)該配置為ServletConfig
    ????參數(shù),如一個(gè)讀取附件的servlet要用到絕對(duì)目錄,而別的servlet不會(huì)用到:
    ????<servlet>
    ????????????<servlet-name>GetAtt</servlet-name>
    ????????<servlet-class>mail.GetAttServlet</servlet-class>
    ????????<init-param>
    ????????????<param-name>absPath</param-name>?
    ????????????<param-value>/usr/mail/ax/axman/Maildir/</param-value>?
    ????????</init-param>
    ????</servlet>
    ????不用說,因?yàn)樵?lt;servlet>標(biāo)簽中已經(jīng)指定了name和class,也就是說只有mail.GetAttServlet這個(gè)
    ????servlet中才能取到path,而別的Servlet是不能取到的。

    ????那么如何訪問這兩個(gè)對(duì)象的參數(shù)呢?
    ????訪問ServletConfig參數(shù):
    ????????首先要取得ServletConfig對(duì)象,然后調(diào)用它的getInitParameter();方法。要訪問
    ????ServletConfig對(duì)象,jsp中直接使用config內(nèi)置對(duì)象,但因?yàn)槟愕腏SP編譯后的servlet一般不會(huì)被
    ????加到web.xml中的,所以一般不會(huì)通過jsp來取對(duì)本JSP編譯后的servlet的配置參數(shù),那么在servlet
    ????中要得到ServletConfig對(duì)象有兩種方法:

    ????在inii()方法中取到:通過init的重載方法傳遞

    ????.....
    ????public?class?Test?extends?HttpServlet?
    ????{
    ????????ServletConfig?config;
    ????????public?void?init(ServletConfig?config)?throws?ServletException?{
    ????????????this.config?=?config;
    ????????}
    ????????..................
    ????}
    ????然后在下面的方法中就可以訪問config對(duì)象。但要注意,為了確保能從構(gòu)造方法中到到當(dāng)前servlet的
    ????config對(duì)象,應(yīng)該調(diào)用父類的構(gòu)造方法:
    ????.....
    ????public?class?Test?extends?HttpServlet?
    ????{
    ????????ServletConfig?config;
    ????????public?void?init(ServletConfig?config)?throws?ServletException?{
    ????????????super.init(config);
    ????????????this.config?=?config;
    ????????}
    ????????..................
    ????}

    ????通過getServletConfig()方法直接到時(shí),這樣做的好處是不必調(diào)手工傳遞屬性,想在任何時(shí)候都可
    ????以得到。

    ????還有第三種方法,要自己實(shí)現(xiàn)一些接口,這里作為一般討論就不介紹了。

    ????要訪問ServletContext對(duì)象,只要從現(xiàn)有的ServletConfig對(duì)象getServletContext()就可以了,然后
    ????調(diào)用它的getInitParameter()方法就可以獲取它的參數(shù)。

    ????按說:ServletContext對(duì)象的作用域比ServletConfig作用域大,為什么要從ServletConfig中到得
    ????ServletContext對(duì)象呢?我個(gè)人認(rèn)為:容器保存了很多個(gè)ServletContext對(duì)象,請(qǐng)求時(shí)容器到底取哪一個(gè)
    ????給你呢?那就取其中包含ServletConfig信息的那個(gè)給你,就是說取ServletConfig對(duì)象的父級(jí)對(duì)象。就好
    ????象HttpSession要從requset中取得一樣,就是取那個(gè)包含當(dāng)前requese對(duì)象的session對(duì)象給你,這只是我
    ????的個(gè)人想法,還沒有來得及看具體實(shí)現(xiàn)。反正就這么用吧。

    posted @ 2006-09-05 10:26 software5168 閱讀(2490) | 評(píng)論 (1)編輯 收藏

    spring + jsf

    JSF和Spring集成的資料比較少,原理是獲得彼此的上下文引用,以此進(jìn)一步獲得各自管理的bean,這是可能的,因?yàn)閮烧呤莣eb應(yīng)用框架都遵循servlet規(guī)范,為二者整合提供了可能和基礎(chǔ).
    ?
    在Spring中ApplicationContext是相當(dāng)重要的類,對(duì)于web應(yīng)用,它還包裝了javax.servlet.ServletContext,為web應(yīng)用提供了所有可以利用的數(shù)據(jù),包括可管理bean,Faces中通過FacesContext類可以獲得所有可以利用的資源,同樣包括JSF的可管理支持bean,它們都圍繞著ServletContext提供了自己的門面,通過各自的門面在Servlet容器的世界里彼此相通.
    本文介紹兩種方式,實(shí)現(xiàn)二者集成:
    1.???????? 通過寫自己的類來完成二者的連通,實(shí)際上只是獲得彼此世界里存活的bean,對(duì)于JSF中事件處理可能需要更進(jìn)一步的構(gòu)思和編碼,為了這點(diǎn),第二個(gè)方法介紹了一種框架.
    2.???????? 使用框架完成二者集成.
    ?
    一 ?自己動(dòng)手,下面的代碼以示例為主,其它涉及的類和接口略去.
    這個(gè)工具類提供在JSF世界里查找Spring管理的bean.也實(shí)現(xiàn)在Spring中查找JSF組件的方法.
    package com.skysoft.rbac.dao;
    ?
    import org.springframework.context.ApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    import javax.faces.context.FacesContext;
    import javax.servlet.ServletContext;
    import javax.faces.el.ValueBinding;
    import javax.faces.FactoryFinder;
    import javax.faces.application.Application;
    import javax.faces.application.ApplicationFactory;
    ?
    public final class SpringFacesUtil {
    ? public SpringFacesUtil() {
    ? }
    ? /**
    ?? * 從Spring中查找bean.
    ?? * @param beanname String
    ?? * @return Object
    ?? */
    ? public static Object findBean(String beanname) {
    ??? ServletContext context = (ServletContext) FacesContext.getCurrentInstance().
    ??????? getExternalContext().getContext();
    ??? ApplicationContext appctx = WebApplicationContextUtils.
    ??????? getRequiredWebApplicationContext(context);
    ??? return appctx.getBean(beanname);
    ? }
    ? /**
    ?? * 從JSF中查找bean.
    ?? * @param beanname String
    ?? * @return Object
    ?? */
    ? public static Object lookupBean(String beanname) {
    ??? Object obj = getValueBinding(getJsfEl(beanname)).getValue(FacesContext.
    ??????? getCurrentInstance());
    ??? return obj;
    ? }
    ?
    ? private static ValueBinding getValueBinding(String el) {
    ??? return getApplication().createValueBinding(el);
    ? }
    ?
    ? private static Application getApplication() {
    ??? ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.
    ??????? getFactory(FactoryFinder.APPLICATION_FACTORY);
    ??? //FactoryFinder.FACES_CONTEXT_FACTORY
    ??? //FactoryFinder.RENDER_KIT_FACTORY
    ??? return appFactory.getApplication();
    ? }
    ?
    ? private static String getJsfEl(String value) {
    ??? return "#{" + value + "}";
    ? }
    }
    下面定義一個(gè)由JSF管理的bean:
    package com.skysoft.rbac.dao;
    ?
    import javax.servlet.ServletContext;
    ?
    import org.springframework.context.ApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    import org.skysoft.struts.jsf.util.FacesUtils;
    ?
    public class ServiceLocatorBean
    ??? implements ServiceLocator {
    ? private static final String DAO_SERVICE_BEAN_NAME = "userDAO";
    ? //這個(gè)dao就是由Spring提供的管理bean,這個(gè)dao可以使用Hibernate實(shí)現(xiàn).
    ? private UserDAO dao;
    ?
    ? public ServiceLocatorBean() {
    ??? this.dao = (UserDAO)SpringFacesUtil.findBean(DAO_SERVICE_BEAN_NAME);
    ? }
    ?
    ? public UserDAO getDao() {
    ??? return dao;
    ? }
    }
    下面是一個(gè)使用ServiceLocatorBean的類.
    public class UserDAOImp
    ??? extends HibernateDaoSupport implements UserDAO {
    ? private UserDAO dao;
    ? private List list;
    ?
    ? public UserDAOImp() {}
    ?
    ? public List getList() {
    ??? if (list == null) {
    ????? list = dao.getList();
    ??? }
    ??? return list;
    ? }
    ?
    ? public UserDAO getDao() {
    ??? return dao;
    ? }
    ?
    ? public void setDao(UserDAO dao) {
    ??? this.dao = dao;
    ? }
    }
    ?
    在faces-config.xml中的配置:
    ?????? <managed-bean>
    ????????????? <managed-bean-name>serviceLocatorBean</managed-bean-name>
    ????????????? <managed-bean-class>com.skysoft.rbac.dao.ServiceLocatorBean</managed-bean-class>
    ????????????? <managed-bean-scope>session</managed-bean-scope>
    ?????? </managed-bean>
    ?????? <managed-bean>
    ????????????? <managed-bean-name>User</managed-bean-name>
    ????????????? <managed-bean-class>com.skysoft.rbac.User</managed-bean-class>
    ????????????? <managed-bean-scope>request</managed-bean-scope>
    ????????????? <managed-property>
    ???????????????????? <property-name>serviceLocator</property-name>
    ???????????????????? <property-class>com.skysoft.rbac.dao.ServiceLocatorBean</property-class>
    ???????????????????? <value>#{serviceLocatorBean}</value>
    ????????????? </managed-property>
    ?????? </managed-bean>
    在applicationContext.xml中的配置:
    ?????? <bean id="userDAO" class="com.skysoft.rbac.dao.UserDAOImp">
    ????????????? <property name="sessionFactory">
    ???????????????????? <ref local="sessionFactory" />
    ????????????? </property>
    ?????? </bean>
    二 使用框架
    1 介紹
    這個(gè)框架是Spring相關(guān)項(xiàng)目,提供一個(gè)包de.mindmatters.faces.spring,這個(gè)包包含JSF和Spring框架綜合集成的粘合代碼,這些代碼以獨(dú)立于一個(gè)實(shí)現(xiàn)的方式完成,這樣它能和任何JSF實(shí)現(xiàn)一起使用.
    本包的提供的代碼主要目的是盡可能透明的集成兩個(gè)框架,主要特征:
    l???????? JSF/JSP開發(fā)者應(yīng)該能訪問Spring管理的Beans,就好象它們是由JSF管理的.
    l???????? JSF可管理beans應(yīng)能集成入Spring.
    l???????? RequestHandledEvent事件也應(yīng)該能被發(fā)布到Spring.
    2? JSF配置集成
    本包構(gòu)造了一個(gè)基于faces配置文件(e.g. /WEB-INF/faces-config.xml)的WebApplicationContext類, 讓它成為遵循"spring-beans" DTD配置文件(e.g. defined in /WEB-INF/applicationContext.xml)來配置的ApplicationContext的孩子,這樣依從"faces-config" DTD的WebApplicationContext就是全特征的,即自動(dòng)擁有如下功能:
    l???????? JSF可管理beans實(shí)現(xiàn)了Spring的*Aware interfaces:
    ApplicationContextAware
    BeanFactoryAware
    BeanNameAware
    ResourceLoaderAware
    ServletContextAware
    l???????? JSF可管理beans實(shí)現(xiàn)Spring的lifecycle interfaces:
    InitializingBean
    DisposableBean
    l???????? 實(shí)現(xiàn)Spring的FactoryBean interface
    l???????? 實(shí)現(xiàn)Spring的ApplicationListener interface
    l???????? 發(fā)布ApplicationEvent事件.
    l???????? 從資源中讀取消息.
    等等,更多可看Spring.
    3 訪問方式
    1) 從JSF中程序化的訪問Spring管理的beans.
    因?yàn)樵贔acesWebApplicationContext和ApplicationContext之間有層次關(guān)系,所以你的JSF可管理支持beans能容易的實(shí)現(xiàn)ApplicationContextAware接口,并能通過getBean方法訪問它而不管它是否定義在FacesWebApplicationContext中還是定義在父ApplicationContext類對(duì)象中.
    2) 通過JSF EL從JSF中訪問Spring管理的beans.
    能夠使用JSF EL訪問beans無論你引用的bean由JSF管理還是由Spring管理.兩個(gè)bean上下文在存取時(shí)間合并.
    a) 直接訪問:
    如果一個(gè)帶有請(qǐng)求名字的bean只存在于Spring上下文內(nèi)的話,這個(gè)bean被使用,bean的singleton屬性設(shè)置被完全保持.
    b) 區(qū)域化訪問(scoped access):
    如果你要從JSF定義bean的作用域的能力上得益還想讓那個(gè)bean由Spring管理,那么就要在兩個(gè)上下文中定義,只是對(duì)于JSF上下文中的定義的類類型要使用de.mindmatters.faces.spring.SpringBeanFactory類,你還應(yīng)該設(shè)置那個(gè)bean的singleton屬性到false,因這能覆蓋你的作用域設(shè)置.在你使用JSF EL訪問bean時(shí),你總能獲得一個(gè)遵從你在JSF上下文中定義的作用域設(shè)置的由Spring管理的bean的實(shí)例.
    ?
    三 用法
    通常,就象設(shè)置任何其它JSF web應(yīng)用一樣設(shè)置你的web應(yīng)用,下面的樣例配置展示怎樣使能上面提到的特征。
    在web.xml 配置中必須加入下列配置條目, 同時(shí)注意把該庫的jsf-spring.jar 放在適當(dāng)?shù)奈恢?
    <web-app>
    ??? .........
    ??? <!--
    ??????? 過濾器用于向Spring發(fā)布RequestHandledEvent,它應(yīng)該影射到和FacesServlet url相同的模式.
    ??? -->???
    ??? <filter>
    ??????? <filter-name>RequestHandled</filter-name>
    ??????? <filter-class>de.mindmatters.faces.spring.support.RequestHandledFilter</filter-class>
    ??? </filter>
    ??????
    ??? <filter-mapping>
    ??????? <filter-name>RequestHandled</filter-name>
    ??????? <url-pattern>*.faces</url-pattern>
    ??? </filter-mapping>
    ?
    ??? <!--
    ??? 這個(gè)偵聽器用于裝入Spring beans的父應(yīng)用上下文.
    ??? -->
    ??? <listener>
    ??????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    ??? </listener>
    ??? .........
    </web-app>
    下面的一些說明,都可以通過下載這個(gè)Spring相關(guān)項(xiàng)目得到,列在這里只為演示上面的說明的功能.
    WEB-INF/faces-config.xml
    <!-- 一個(gè)純JSF管理的bean -->
    <managed-bean>
    ??? <managed-bean-name>jsfBean</managed-bean-name>
    ??? <managed-bean-class>example.NameBean</managed-bean-class>
    ??? <managed-bean-scope>session</managed-bean-scope>
    ??? <managed-property>
    ??????? <property-name>name</property-name>
    ??? </managed-property>
    </managed-bean>
    <!--一個(gè)SpringBeanScope用來定義Spring可管理bean的作用域.-->
    ?????? <managed-bean>
    ????????????? <managed-bean-name>scopedAccessSpringBean</managed-bean-name>
    ?????? <managed-bean-class>de.mindmatters.faces.spring.SpringBeanScope</managed-bean-class>
    ????????????? <managed-bean-scope>session</managed-bean-scope>
    ?????? </managed-bean>
    <!-- 這是一個(gè)純JSF可管理bean,它持有一個(gè)到Spring可管理bean的一個(gè)引用. -->
    <managed-bean>
    ??? <managed-bean-name>referencingBean</managed-bean-name>
    ??? <managed-bean-class>example.ReferencingBean</managed-bean-class>
    ??? <managed-bean-scope>session</managed-bean-scope>
    ??? <managed-property>
    ??????? <property-name>referencedBean</property-name>
    ??????? <value>#{managedPropertyAccessSpringBean}</value>
    ??? </managed-property>
    </managed-bean>
    WEB-INF/applicationContext.xml (partial)
    <!-- 一個(gè)純Spring的可管理bean -->
    <bean id="directAccessSpringBean" class="example.NameBean"/>
    <!-- 一個(gè)向JSF作用域提供的可管理bean.? -->
    <bean id="scopedAccessSpringBean" class="example.NameBean" singleton="false"/>
    <!-- 一個(gè)純Spring的可管理bean,它由一個(gè)JSF可管理bean引用.(當(dāng)然了,它也能被直接訪問啦.) -->
    <bean id="managedPropertyAccessSpringBean" class="example.NameBean" singleton="false"/>
    參考:
    http://jsf-spring.sourceforge.net/?? JSF-Spring,Spring相關(guān)項(xiàng)目官方站點(diǎn),提供本文介紹的框架下載以及實(shí)例下載.
    http://www.javaworld.com/javaworld/jw-07-2004/jw-0719-jsf.html?一篇關(guān)于JSF和Spring的文章.

    posted @ 2006-08-25 14:06 software5168 閱讀(720) | 評(píng)論 (0)編輯 收藏

    springMVC 第三個(gè)例子

    1./home.xsl
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="??? <xsl:output method="html" omit-xml-declaration="yes" />
    ??? <xsl:template match="/">
    ??????? <html>
    ??????????? <head><title>Hello!</title></head>
    ??????????? <body>
    ??????????????? <h1>My First Words</h1>
    ??????????????? <xsl:for-each select="wordList/word">
    ??????????????????? <xsl:value-of select="."/><br />
    ??????????????? </xsl:for-each>
    ??????????? </body>
    ??????? </html>
    ??? </xsl:template>
    </xsl:stylesheet>

    2./index.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>???
    ? </head>
    ? <body>
    ? ?<center><input type="button" value="xslt" onclick="location.href='home.htm'"></center>
    ? </body>
    </html>

    3./WEB-INF/web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
    ?xmlns="
    ?xmlns:xsi="?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    ??<servlet>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ??<init-param>
    ???????? <param-name>contextConfigLocation</param-name>
    ???????? <param-value>/WEB-INF/application-servlet.xml</param-value>
    ??? ?</init-param>?
    ??? </servlet> ?
    ??? <servlet-mapping>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <url-pattern>*.htm</url-pattern>
    ??? </servlet-mapping> ??
    </web-app>

    4./WEB-INF/application-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "
    <beans>
    ??? <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="/home.htm">homeAction</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>??
    ??? <bean id="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    ??????? <property name="basename">
    ??????????? <value>views</value>
    ??????? </property>
    ??? </bean>??
    ??? <bean id="homeAction" class="xslt.HomePageController"/>
    </beans>

    5./WEB-INF/classes/views_zh_TW.properties
    home.class=xslt.HomePage
    home.stylesheetLocation=/home.xsl
    home.root=wordList

    6./WEB-INF/classes/xslt/HomePage.class
    package xslt;
    import java.util.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.jdom.Element;
    import org.jdom.output.DOMOutputter;
    import org.springframework.web.servlet.view.xslt.AbstractXsltView;
    import org.w3c.dom.Node;
    public class HomePage extends AbstractXsltView {
    ? protected Node createDomNode(
    ????????? Map model, String rootName, HttpServletRequest req, HttpServletResponse res
    ????? ) throws Exception {? ??
    ????????? org.jdom.Document doc = new org.jdom.Document();
    ????????? Element root = new Element(rootName);
    ????????? doc.setRootElement(root);
    ????????? List words = (List) model.get("wordList");
    ????????? for (Iterator it = words.iterator(); it.hasNext();) {
    ????????????? String nextWord = (String) it.next();
    ????????????? Element e = new Element("word");
    ????????????? e.setText(nextWord);
    ????????????? root.addContent(e);
    ????????? }
    ????????? // convert JDOM doc to a W3C Node and return
    ????????? return new DOMOutputter().output( doc );
    ????? }
    }


    7./WEB-INF/classes/xslt/HomePageController.class
    package xslt;
    import java.util.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractController;
    public class HomePageController extends AbstractController{
    ?protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    ??Map map = new HashMap();
    ???? List wordList = new ArrayList();????????
    ???? wordList.add("hello");
    ???? wordList.add("world");???????
    ???? map.put("wordList", wordList);??????
    ???? return new ModelAndView("home", map);
    ?}
    }

    posted @ 2006-08-24 15:18 software5168 閱讀(615) | 評(píng)論 (0)編輯 收藏

    JDOM

    1.???????? Abstract

    Java 的世界裡,要操控 XML ,最簡單的方法莫過於使用 JDOM 。在這裡我簡單的介紹如何用 JDOM 從無到有的建立一分 XML 、當(dāng)有一份 XML file 時(shí),如何將這個(gè) XML file 讀進(jìn)程式裡及如何利用 JDOM XML 透過 XSLT 轉(zhuǎn)成 HTML

    JDOM 是由 Brett Mclaughlin Jason Hunter 編寫,在 http://www.jdom.org 可免費(fèi)下載。

    ?

    2.???????? 建立、新增、刪除、輸出

    範(fàn)例 1 展示如何建立、新增、刪除及輸出一份 XML ,每份 XML JDOM 裡是由一個(gè) Document 類別代表,所以一開始我們要先 new 一個(gè) Document ,在建構(gòu) Document 時(shí)應(yīng)指明根節(jié)點(diǎn),如果沒有指明,在建構(gòu)應(yīng)由 setRootElement 設(shè)定。基本上 XML 都可以化成一個(gè)樹狀結(jié)構(gòu),所以,在產(chǎn)生根節(jié)點(diǎn)之後,就由根節(jié)點(diǎn)開始增加子節(jié)點(diǎn),新增的方式是呼叫 Element.addContent 將新的節(jié)點(diǎn)加入。刪除如果知道是某節(jié)點(diǎn)以下的子節(jié)點(diǎn),則可呼叫 Element.getChildren 取得所有子節(jié)點(diǎn),再找出要?jiǎng)h除的點(diǎn)節(jié)予以刪除。

    當(dāng)建立好 XML 之後,通常我們會(huì)希望將它輸出到檔案, JDOM 提供了 XMLOutputter 類別供我們輸出之用,輸出前要先設(shè)定編碼方式,不然,會(huì)以 UTF-8 為預(yù)設(shè)值, setNewlines 則是指明輸出時(shí)是否要幫我們斷行,方便閱讀,如果沒有加這行指令,預(yù)設(shè)是不會(huì)斷行,那麼所有資料將在同一行上。

    ===== 範(fàn)例 1 =====

    import org.jdom.*;

    import org.jdom.output.*;

    import java.io.*;

    import java.util.List;

    ?

    public class myCreate {

    ? public myCreate() {

    ??? String[] strChapter = { "XML 簡論 ", " 編寫 XML", " 剖析 XML", " 約制 XML", " 驗(yàn)正 XML", " 轉(zhuǎn)換 XML" };

    ?

    ??? Element elmtRoot = new Element("Article");

    ??? Document docJDOM = new Document(elmtRoot);

    ??? // 新增

    ??? for(int i=0; i<6; i++) {

    ????? Element elmtChapter = new Element("Chapter");

    ????? elmtChapter.addContent(strChapter[i]);

    ????? elmtChapter.setAttribute("sort", new Integer(i).toString());

    ???? ?elmtRoot.addContent(elmtChapter);

    ??? }

    ??? // 刪除

    ??? List lstChapter = elmtRoot.getChildren("Chapter");

    ??? lstChapter.remove(4);

    ??? // 輸出

    ??? OutputXML(docJDOM, "e:/myJDOM.xml");

    ? }

    ?

    ? private void OutputXML(Document docXML, String strFilename) {

    ??? XMLOutputter fmt = new XMLOutputter();

    ??? try {

    ????? fmt.setEncoding("big5");

    ????? fmt.setNewlines(true);

    ????? FileWriter fwXML = new FileWriter(strFilename);

    ????? fmt.output(docXML, fwXML);

    ????? fwXML.close();

    ??? }

    ??? catch (IOException e) {

    ???? ?e.printStackTrace();

    ??? }

    ? }

    ?

    ? public static void main(String[] args) {

    ??? myCreate myCreate1 = new myCreate();

    ? }

    }

    ?

    3.???????? 讀進(jìn)一份 XML file

    目前 XML 最常被拿來應(yīng)用的領(lǐng)域之一大概就是當(dāng)作設(shè)定檔,因此,如何從檔案中讀入一份已存在的 XML 更為重要。

    JDOM 是利用 SAX DOM 來剖析 XML ,用 SAX 會(huì)比 DOM ,所以一般都是用 SAX ,如果對(duì) SAX 不熟悉,在 http://www.saxproject.org/ 相關(guān)文件資料。

    範(fàn)例 2 就是用 SAX 建立 Document ,在建立 SAXBuilder 時(shí)傳入的參數(shù)指出是否用 DTD 驗(yàn)正 XML 的合法性, true 表示要, false 表示不要。當(dāng)呼叫 build 之後 JDOM 就已經(jīng)幫我們用 SAX 建立好一棵 XML Tree ,如此我們就可以很方便由 Tree 中找到我們要的節(jié)點(diǎn)。

    ?

    ===== 範(fàn)例 2 =====

    import org.jdom.*;

    import org.jdom.input.*;

    import org.jdom.output.*;

    import java.io.*;

    import java.util.List;

    ?

    public class myRead {

    ? public myRead() {

    ??? Document docJDOM;

    ?

    ??? // 利用 SAX 建立 Document

    ??? SAXBuilder bSAX = new SAXBuilder(false);

    ??? try {

    ????? docJDOM = bSAX.build(new File("e:/myJDOM.xml"));

    ??? }

    ??? catch (JDOMException e) {

    ????? e.printStackTrace();

    ????? return;

    ??? }

    ??? // 在根節(jié)點(diǎn)中加入一個(gè)新的子節(jié)點(diǎn)

    ??? Element elmtRoot = docJDOM.getRootElement();

    ??? Element elmtChapter = new Element("Chapter");

    ??? elmtChapter.setText(" 驗(yàn)正 XML");

    ??? elmtChapter.setAttribute("sort", "4");

    ??? elmtRoot.addContent(elmtChapter);

    ??? // 印出所有根節(jié)點(diǎn)的子節(jié)點(diǎn)

    ??? List lstChildren = elmtRoot.getChildren("Chapter");

    ??? for(int i=0; i<lstChildren.size(); i++) {

    ????? Element elmtChild = (Element) lstChildren.get(i);

    ????? System.out.println("Child " + i);

    ????? System.out.println("? Text:" + elmtChild.getText());

    ????? System.out.println("? Attribute:" + elmtChild.getAttributeValue("sort"));

    ??? }

    ??? // 輸出到檔案

    ??? OutputXML(docJDOM, "e:/myJDOM2.xml");

    ? }

    ?

    ? private void OutputXML(Document docXML, String strFilename) {

    ??? XMLOutputter fmt = new XMLOutputter();

    ??? try {

    ????? fmt.setEncoding("big5");

    ????? fmt.setNewlines(true);

    ????? FileWriter fwXML = new FileWriter(strFilename);

    ????? fmt.output(docXML, fwXML);

    ????? fwXML.close();

    ??? }

    ??? catch (IOException e) {

    ????? e.printStackTrace();

    ??? }

    ? }

    ?

    ? public static void main(String[] args) {

    ??? myRead myRead1 = new myRead();

    ? }

    }

    ?

    4.???????? 轉(zhuǎn)換 XML HTML

    要將 XML 轉(zhuǎn)成 HTML 當(dāng)然要先寫好 XSL ,但是即使寫好 XSL JDOM 也並不提供 XML 轉(zhuǎn)換,幸好在 JDOM 安裝好之後,就會(huì)有 Apache Xalan ,它可以幫我們做這樣的轉(zhuǎn)換。

    要使用 Apache Xalan ,首先確定 xalan.jar classpath 裡。 Xalan 的第一個(gè)用法是在命令列執(zhí)行,指令如下…

    C:\> java org.apache.xalan.xslt.Process –IN XML 文件 –XSL XSL 樣版 –OUT 輸出檔名

    命令列的用法在一般的運(yùn)用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範(fàn)例 4 提供了一個(gè)簡單的 sample

    ===== 範(fàn)例 4 =====

    import javax.xml.transform.TransformerFactory;

    import javax.xml.transform.Transformer;

    import javax.xml.transform.TransformerException;

    import javax.xml.transform.TransformerConfigurationException;

    import javax.xml.transform.stream.*;

    ?

    public class myGenHTML {

    ?

    ? public myGenHTML(String strXML, String strXSL, String strHTML) {

    ??? try {

    ????? GenHTML(strXML, strXSL, strHTML);

    ??? }

    ??? catch (TransformerConfigurationException e) {

    ????? e.printStackTrace();

    ??? }

    ??? catch (TransformerException e) {

    ????? e.printStackTrace();

    ??? }

    ? }

    ?

    ? private void GenHTML(String strXMLFile, String strXSLFile, String strHTMLFile) throws TransformerConfigurationException, TransformerException

    ? {

    ??? TransformerFactory myFactory = TransformerFactory.newInstance();

    ??? Transformer myTransformer = myFactory.newTransformer(new StreamSource(strXSLFile));

    ??? myTransformer.transform(new StreamSource(strXMLFile), new StreamResult(strHTMLFile));

    ? }

    ?

    ? public static void main(String[] args) {

    ??? myGenHTML myGenHTML1 = new myGenHTML(args[0], args[1], args[2]);

    ? }

    }

    posted @ 2006-08-24 12:50 software5168 閱讀(707) | 評(píng)論 (0)編輯 收藏

    springMVC 第二個(gè)例子

    1./WEB-INF/web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
    ?xmlns="?xmlns:xsi="?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    ??
    ?<servlet>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ??<init-param>
    ???????? <param-name>contextConfigLocation</param-name>
    ???????? <param-value>/WEB-INF/application-servlet.xml</param-value>
    ??? ?</init-param>?
    ??? </servlet>
    ?
    ??? <servlet-mapping>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <url-pattern>*.do</url-pattern>
    ??? </servlet-mapping>
    ?
    ?<welcome-file-list>
    ??? ?<welcome-file>form.jsp</welcome-file>
    ? ?</welcome-file-list>
    </web-app>


    2./WEB-INF/application-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "
    <beans>
    ??? <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="/login.do">loginAction</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    ??????? <property name="viewClass">
    ??????????? <value>org.springframework.web.servlet.view.InternalResourceView</value>
    ??????? </property>
    ??????? <property name="prefix">
    ??????????? <value>/</value>
    ??????? </property>
    ??????? <property name="suffix">
    ??????????? <value>.jsp</value>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="loginAction" class="onlyfun.caterpillar.LoginAction">
    ??????? <property name="commandClass">
    ??????????? <value>onlyfun.caterpillar.LoginForm</value>
    ??????? </property>
    ??????? <property name="successView">
    ??????????? <value>success</value>
    ??????? </property>
    ??????? <property name="formView">
    ??????????? <value>form</value>
    ??????? </property>
    ??? </bean>
    </beans>


    3./WEB-INF/classes/onlyfun/caterpillar/LoginAction.class
    package onlyfun.caterpillar;

    import org.springframework.web.servlet.mvc.SimpleFormController;
    import org.springframework.web.servlet.*;

    public class LoginAction extends SimpleFormController {
    ??? protected ModelAndView onSubmit(Object command) throws Exception {
    ?????? LoginForm form = (LoginForm) command;
    ???????
    ?????? if("111".equals(form.getUsername()) &&
    ???????????? "111".equals(form.getPassword())) {
    ????????? return new ModelAndView(this.getSuccessView(),"user", form.getUsername());
    ?????? }
    ?????? else {
    ?????????? return new ModelAndView(this.getFormView());
    ?????? }
    ??? }
    }

    4./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class
    package onlyfun.caterpillar;

    public class LoginForm {
    ??? private String username;
    ??? private String password;
    ???
    ??? public void setUsername(String username) {
    ?????? this.username = username;
    ??? }
    ???
    ??? public void setPassword(String password) {
    ?????? this.password = password;
    ??? }
    ???
    ??? public String getUsername() {
    ?????? return username;
    ??? }
    ???
    ??? public String getPassword() {
    ?????? return password;
    ??? }
    }


    5./form.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head><title>Login</title></head>
    <body>
    ??? 請(qǐng)輸入使用者名稱與密碼:<p>
    ??? <form name="loginform" action="login.do" method="post">
    ??????? 名稱 <input type="text" name="username"/><br>
    ??????? 密碼 <input type="password" name="password"/><br>
    ??????? <input type="submit" value="確定"/>
    ??? </form>
    ??? 注意:輸入錯(cuò)誤會(huì)再回到這個(gè)頁面中。
    </body>
    </html>


    6./success.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head><title>Login Success</title></head>
    <body>
    ??? <H1> Hello, ${user}!!</H1>
    ??? This is your secret gift.
    </body>
    </html>

    posted @ 2006-08-23 16:29 software5168 閱讀(510) | 評(píng)論 (0)編輯 收藏

    springMVC 第一個(gè)例子

    1. /hellouser.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head><title>HelloPage</title></head>
    <body>
    ???? <H1> ${helloWord}</H2>
    </body>
    </html>

    2./index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>
    ? </head>
    ? <body>
    ??? <%
    ??? ?response.sendRedirect("hellouser.do");
    ??? %>
    ? </body>
    </html>

    3./WEB-INF/web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
    ?xmlns="?xmlns:xsi="?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    ??
    ?<servlet>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ??<init-param>
    ???????? <param-name>contextConfigLocation</param-name>
    ???????? <param-value>/WEB-INF/application-servlet.xml</param-value>
    ??? ?</init-param>?
    ??? </servlet>
    ?
    ??? <servlet-mapping>
    ??????? <servlet-name>hello</servlet-name>
    ??????? <url-pattern>*.do</url-pattern>
    ??? </servlet-mapping>
    ??
    </web-app>

    4./WEB-INF/application-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "
    <beans>
    ??? <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    ??????? <property name="mappings">
    ??????????? <props>
    ??????????????? <prop key="/hellouser.do">helloUserAction</prop>
    ??????????? </props>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    ??????? <property name="viewClass">
    ??????????? <value>org.springframework.web.servlet.view.InternalResourceView</value>
    ??????? </property>
    ??? </bean>
    ???
    ??? <bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction">
    ??????? <property name="helloWord">
    ??????????? <value>Hello!</value>
    ??????? </property>
    ??????? <property name="viewPage">
    ??????????? <value>/hellouser.jsp</value>
    ??????? </property>
    ??? </bean>
    </beans>

    5./WEB-INF/classes/onlyfun/caterpillar/HelloUserAction.class
    package onlyfun.caterpillar;

    import java.io.IOException;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.springframework.web.servlet.mvc.Controller;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.bind.RequestUtils;

    public class HelloUserAction implements Controller {
    ?? private String helloWord;
    ??? private String viewPage;
    ???
    ?? public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)
    ??????? throws ServletException, IOException {
    ???? //String user = RequestUtils.getRequiredStringParameter(req, "user");
    ????? Map model = new HashMap();
    ????? model.put("helloWord", getHelloWord());
    ???? // model.put("user", user);
    ???
    ?????? return new ModelAndView(getViewPage(), model);
    ??? }
    ???
    ??? public void setViewPage(String viewPage) {
    ?????? this.viewPage = viewPage;
    ??? }
    ???
    ??? public String getViewPage() {
    ?????? return viewPage;
    ??? }

    ??? public void setHelloWord(String helloWord) {
    ?????? this.helloWord = helloWord;
    ??? }
    ???
    ??? public String getHelloWord() {
    ?????? return helloWord;
    ??? }
    }

    posted @ 2006-08-23 15:52 software5168 閱讀(489) | 評(píng)論 (0)編輯 收藏

    ajax - 回調(diào)函數(shù)Observer實(shí)現(xiàn)例子

    1.EventRouter.js
    /**
    ?* @author user
    ?*/
    var jsEvent = new Array();
    jsEvent.EventRouter = function(el,eventType){
    ?this.lsnrs = new Array();
    ?this.el = el;
    ?el.eventRouter = this;
    ?el[eventType] = jsEvent.EventRouter.callback;
    };
    jsEvent.EventRouter.prototype.addListener = function(lsnr){
    ?this.lsnrs.append(lsnr,true);?
    } ;

    jsEvent.EventRouter.prototype.notify = function(e){
    ?var lsnrs = this.lsnrs;
    ?for(var i=0;i<lsnrs.length;i++){
    ??var lsnr = lsnrs[i];
    ??lsnr.call(this,e);
    ?}
    };
    jsEvent.EventRouter.callback=function(event){
    ?var e = event || window.event;
    ?var router = this.eventRouter;
    ?router.notify(e);
    };

    Array.prototype.append = function(obj,nodup){
    ?if(nodup){?
    ??this[this.length]=obj;
    ?}
    };

    2.mousemat.css
    .mousemat{
    ?background-color:#ffe0d0;
    ?border:solid maroon 0px;
    ?position:absolute;
    ?margin:0px;
    ?width:500px;
    ?height:500px;
    ?top:50px;
    ?left:50px;?
    }
    .thumbnail{
    ?background-color:#ffe0d0;
    ?border:solid maroon 0px;
    ?position:absolute;
    ?margin:0px;
    ?width:100px;
    ?height:100px;
    ?top:50px;
    ?left:600px;?
    }
    .cursor{
    ?background-color:blue;
    ?position:relative;
    ?height:5px;
    ?width:5px;
    }

    3.mousemat.htm
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
    ?<head>
    ??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ??<title>Untitled Document</title>
    ??<link rel='stylesheet' type = 'text/css' href = 'mousemat.css'>
    ??<script type ='text/javascript' src = 'EventRouter.js'></script>
    ??<script type='text/javascript'>
    ???var cursor = null;
    ???window.onload = function(){
    ????var mat = document.getElementById('mousemat');
    ????cursor = document.getElementById('cursor');
    ????var mouseRouter = new jsEvent.EventRouter(mat,"onmousemove");
    ????//var mouseRouter = new jsEvent.EventRouter(mat,"onclick");
    ????mouseRouter.addListener(writeStatus);
    ????mouseRouter.addListener(drawThumbnail);
    ???};
    ???function writeStatus(e){
    ????window.status = e.clientX + "," + e.clientY;
    ???}
    ???function drawThumbnail(e){
    ????cursor.style.left = ((e.clientX/5)-2) + "px";
    ????cursor.style.top = ((e.clientY/5)-2) + "px";
    ???}
    ??</script>
    ?</head>
    ?<body>
    ??<div class='mousemat' id='mousemat'></div>
    ??<div class='thumbnail' id='thumbnail'>
    ???<div class = 'cursor' id = 'cursor'></div>
    ??</div>
    ?</body>
    </html>

    posted @ 2006-08-14 08:50 software5168 閱讀(773) | 評(píng)論 (0)編輯 收藏

    ajax 單個(gè)元素中實(shí)現(xiàn)多個(gè)回調(diào)函數(shù)的例子

    1.mousemat.htm
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
    ?<head>
    ??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ??<title>Untitled Document</title>
    ??<link rel='stylesheet' type = 'text/css' href = 'mousemat.css'>
    ??<script type='text/javascript'>
    ???var cursor = null;
    ???window.onload = function(){
    ????var mat = document.getElementById('mousemat');
    ????mat.onmousemove = mouseObserver;
    ????cursor = document.getElementById('cursor');
    ???}
    ???function mouseObserver(event){
    ????var e = event || window.event;
    ????writeStatus(e);
    ????drawThumbnail(e);
    ???}
    ???function writeStatus(e){
    ????window.status = e.clientX + "," + e.clientY;
    ???}
    ???function drawThumbnail(e){
    ????cursor.style.left = ((e.clientX/5)-2) + "px";
    ????cursor.style.top = ((e.clientY/5)-2) + "px";
    ???}
    ??</script>
    ?</head>
    ?<body>
    ??<div class='mousemat' id='mousemat'></div>
    ??<div class='thumbnail' id='thumbnail'>
    ???<div class = 'cursor' id = 'cursor'></div>
    ??</div>
    ?</body>
    </html>


    2.mousemat.css
    mousemat{
    ?background-color:#ffe0d0;
    ?border:solid maroon 0px;
    ?position:absolute;
    ?margin:0px;
    ?width:500px;
    ?height:500px;
    ?top:50px;
    ?left:50px;?
    }
    .thumbnail{
    ?background-color:#ffe0d0;
    ?border:solid maroon 0px;
    ?position:absolute;
    ?margin:0px;
    ?width:100px;
    ?height:100px;
    ?top:50px;
    ?left:600px;?
    }
    .cursor{
    ?background-color:blue;
    ?position:relative;
    ?height:5px;
    ?width:5px;
    }

    posted @ 2006-08-11 16:12 software5168 閱讀(470) | 評(píng)論 (0)編輯 收藏

    ajax -第一個(gè)例子

    1.MyHtml.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>
    ?<script type='text/javascript'>
    ??var req = null;
    ??var console = null;
    ??var READY_STATE_UNINITIALIZED = 0;
    ??var READY_STATE_LOADING = 1;
    ??var READY_STATE_LOADED = 2;
    ??var READY_STATE_INTERACTIVE = 3;
    ??var READY_STATE_COMPLETE = 4;
    ??
    ??function sendRequest(url,params,HttpMethod){
    ???if(!HttpMethod){
    ????HttpMethod = "GET";
    ???}
    ???req = initXMLHTTPRequest();
    ???if(req){
    ????req.onreadystatechange = onReadyState;
    ????req.open(HttpMethod,url,true);
    ????req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    ????req.send(params);
    ????
    ???}
    ??}
    ??
    ??function initXMLHTTPRequest(){
    ???var xRequest = null;
    ???if(window.XMLHttpRequest){
    ????xRequest = new XMLHttpRequest();
    ???}else if(window.ActiveXObject){
    ????xRequest = new ActiveXObject("Microsoft.XMLHTTP");
    ???}
    ???return xRequest;
    ??}
    ??
    ??function onReadyState(){
    ???var ready = req.readyState;
    ???var data = null;
    ???if(ready==READY_STATE_COMPLETE){
    ????data = req.responseText;
    ???}else{
    ????data = "loading...[" + ready +"]";
    ???}
    ???toConsole(data);
    ??}
    ??
    ??function toConsole(data){
    ???if(console!=null){
    ????var newline = document.createElement("div");
    ????console.appendChild(newline);
    ????var txt = document.createTextNode(data);
    ????console.appendChild(txt);
    ???}
    ??}
    ??
    ??window.onload = function(){
    ???console = document.getElementById('console');
    ???sendRequest("data.txt");
    ??}
    ?</script>
    ? </head>
    ? ?
    ? <body>
    ? ?<DIV id ='console'></DIV>
    ? </body>
    </html>

    2.data.txt
    ?i'm ok!!!!!!!!

    posted @ 2006-08-11 14:46 software5168 閱讀(428) | 評(píng)論 (1)編輯 收藏

    ajax 參數(shù)傳遞的例子

    1.new_file.htm
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
    ?<head>
    ??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ??<title>Untitled Document</title>
    ??<SCRIPT type='text/javascript' src='new_file.js'></SCRIPT>
    ??<SCRIPT type='text/javascript'>
    ???window.onload = load;
    ??</SCRIPT>
    ?</head>
    ?<body>
    ??<CENTER><INPUT type='button' id='b1'></INPUT></CENTER>?
    ?</body>
    </html>

    2.new_file.js
    var value = '500';

    function load(){
    ?var domEl = document.getElementById('b1');?
    ?JsButton(value,domEl);
    }
    function JsButton(value,domEl){
    ?this.domEl = domEl;
    ?this.value = value;
    ?this.domEl.buttonObj = this;
    ?//this.domEl.onclick = function(){
    ??//alert(this.value);
    ?//}
    ?this.domEl.onclick = JsButton.prototype.clickHandler;
    }?

    JsButton.prototype.clickHandler = function(){
    ?//alert(this.value); 在回調(diào)函數(shù)中調(diào)用this屬性時(shí)﹐
    ?//得到的是對(duì)應(yīng)的DOM元素裡面的數(shù)值﹐此處為空。
    ?var buttonObj = this.buttonObj;
    ?var value =(buttonObj && buttonObj.value)? buttonObj.value:"unknown value";
    ?alert(value);
    }

    posted @ 2006-08-11 14:35 software5168 閱讀(677) | 評(píng)論 (0)編輯 收藏

    ajax

    1.musical_dyn_keys.css
    .musicalKeys{
    ?background-color:#ffe0d0;
    ?border:solid maroon 2px;
    ?position:absolute;
    ?overflow:auto;
    ?margin:4px;
    }
    .toplong{
    ?width:536px;
    ?height:68px;
    ?top:24px;
    ?left:24px;
    }
    .sidebar{
    ?width:100px;
    ?height:400px;
    ?top:24px;
    ?left:570px;
    }
    .musicalButton{
    ?border:solid navy 1px;
    ?width:60px;
    ?height:60px;
    ?position:relative;
    ?margin:2px;
    ?float:left;
    }
    .do{background-color:red;}
    .re{background-color:orange;}
    .mi{background-color:yellow;}
    .fa{background-color:green;}
    .so{background-color:blue;}
    .la{background-color:indigo;}
    .ti{background-color:violet;}
    div.console{
    ?font-family:arial,helvetica;
    ?font-size:16px;
    ?color:navy;
    ?background-color:white;
    ?border:solid navy 2px;
    ?width:536px;
    ?height:320px;
    ?top:106px;
    ?left:24px;
    ?margin:4px;
    ?position:absolute;
    ?overflow:auto;
    }

    2.musical_dyn_keys.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
    ?<head>
    ??<title>Two Keyboards</title>
    ??<LINK rel='stylesheet' type='text/css' href='musical_dyn_keys.css'/>
    ??<SCRIPT type='text/javascript' src='musical_dyn_keys.js'></SCRIPT>
    ??<SCRIPT type='text/javascript'>
    ???window.onload=assignKeys
    ??</SCRIPT>
    ?</head>
    ?<body>
    ??<DIV id='keyboard-top' class='toplong musicalKeys'></DIV>
    ??<DIV id='keyboard-side' class='sidebar musicalKeys'></DIV>
    ??<DIV id='console' class='console'></DIV>
    ?</body>
    </html>


    3.musical_dyn_keys.js
    var notes = new Array("do","re","mi","fa","so","la","ti","do");
    function assignKeys(){
    ?var candidates = document.getElementsByTagName("DIV");
    ?if(candidates){
    ??for(var i=0;i<candidates.length;i++){
    ???var candidate = candidates[i];
    ???if(candidate.className.indexOf('musicalKeys')>=0){
    ????makeKeyboard(candidate);
    ???}
    ??}
    ?}
    }

    function makeKeyboard(el){
    ?for(var i=0;i<notes.length;i++){
    ??var key=document.createElement("DIV");
    ??key.className = notes[i] + " musicalButton";
    ??alert(key.className);
    ??key.note = notes[i];
    ??key.onclick = playNote;
    ??el.appendChild(key);
    ?}?
    }

    function playNote(event){
    ?var note = this.note;
    ?var console = document.getElementById('console');
    ?if(note && console){
    ??console.innerHTML +=note + ".";
    ?}
    }

    posted @ 2006-08-11 11:34 software5168 閱讀(327) | 評(píng)論 (0)編輯 收藏

    ajax - 簡單的客戶端MVC實(shí)現(xiàn)例子

    1.murical.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>??
    ??? <link rel='stylesheet' type='text/css' href='musical.css'>
    ??? <script type='text/javascript' src="musical.js"></script>
    ??? <script type='text/javascript'>
    ?? window.onload = assignKeys
    ??? </script>??
    ? </head>
    ?
    ? <body>
    ? ?<DIV>
    ? ??<DIV id='keyboard' class='musicalKeys'>
    ???<DIV class='do musicalButton'></DIV>
    ???<DIV class='re musicalButton'></DIV>
    ???<DIV class='mi musicalButton'></DIV>
    ???<DIV class='fa musicalButton'></DIV>
    ???<DIV class='so musicalButton'></DIV>
    ???<DIV class='la musicalButton'></DIV>
    ???<DIV class='ti musicalButton'></DIV>
    ???<DIV class='do musicalButton'></DIV>
    ??</DIV>
    ??<DIV id='console' class='console'></DIV>
    ? ?</DIV>
    ? </body>
    </html>

    2.musical.css
    .body{
    ?background-color:white;?
    }
    .musicalKeys{
    ?background-color:#ffe0d0;
    ?boarder:solid maroon 2px;
    ?width:536px;
    ?height:68px;
    ?top:24px;
    ?left:24px;
    ?margin:4px;
    ?position:absolute;
    ?overflow:auto;
    }
    .musicalButton{
    ?border:solid navy 1px;
    ?width:60px;
    ?height:60px;
    ?position:relative;
    ?margin:2px;
    ?float:left;
    }
    .do{background-color:red;}
    .re{background-color:orange;}
    .mi{background-color:yellow;}
    .fa{background-color:green;}
    .so{background-color:blue;}
    .la{background-color:indigo;}
    .ti{background-color:violet;}
    div.console{
    ?font-family:arial,helvetica;
    ?font-size:16px;
    ?color:navy;
    ?background-color:white;
    ?border:solid navy 2px;
    ?width:536px;
    ?height:320px;
    ?top:106px;
    ?left:24px;
    ?margin:4px;
    ?position:absolute;
    ?overflow:auto;
    }

    3.musical.js
    function assignKeys(){
    ?var keyboard=document.getElementById("keyboard");
    ?var keys = keyboard.getElementsByTagName("DIV");
    ?if(keys){
    ??for(var i=0;i<keys.length;i++){
    ???var key=keys[i];
    ???var classes=(key.className).split(" ");
    ???if(classes && classes.length>=2 && classes[1]=="musicalButton"){
    ????var note=classes[0];
    ????key.note=note;
    ????//key.onmouseover=playNote;
    ????key.onclick = playNote;
    ???}
    ??}
    ?}
    }

    function playNote(event){
    ?var note = this.note;
    ?var console = document.getElementById("console");
    ?if(note && console){
    ??console.innerHTML += note + ".";
    ?}
    }

    posted @ 2006-08-10 17:03 software5168 閱讀(477) | 評(píng)論 (0)編輯 收藏

    ajax -rico最簡單的例子

    MyHtml.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>
    ? <script type="text/javascript" src="prototype.js"></script>
    ? <script type="text/javascript" src="rico.js"></script>
    ? <script type='text/javascript'>
    ???? function accordion(){
    ?? var outer = $('myAccordion');
    ?? outer.style.width = '320px';??
    ??new Rico.Accordion(
    ???outer,
    ???{panelHeight:400,
    ??? expandedBg:'#909090',
    ??? collapsedBg:'#404040'
    ???}
    ??);
    ? }
    ??? window.onload = accordion?
    ? </script>
    ? </head>
    ? <body>
    ?? <div id='myAccordion'>
    ?? ?<div>
    ?? ??<div>first title</div>
    ?? ??<div>first!!!!!</div>
    ?? ?</div>
    ?? ?<div>
    ?? ??<div>second title</div>
    ?? ??<div>second!!!!!</div>
    ?? ?</div>
    ?? </div>??
    ? </body>
    </html>

    posted @ 2006-08-09 15:15 software5168 閱讀(590) | 評(píng)論 (0)編輯 收藏

    正則表達(dá)式

    ?String sql = "INSERT INTO AB(A,B,C,D,E) VALUES(?,?,?,?,?)";
    ?sql = sql.toUpperCase();
    ?String str="\\s*INSERT\\s+INTO\\s+([^\\(]+)\\(([^\\)]+)\\)\\s*VALUES\\s*\\(([^\\)]+)\\)\\s*";
    ?Pattern p = Pattern.compile(str);
    ?Matcher m = p.matcher(sql);
    ?m.find();
    ?String table = m.group(1);
    ?String cols = m.group(2);
    ?String values = m.group(3);
    ?System.out.println("table ==== " + table); //AB
    ?System.out.println("cols ==== " + cols); //A﹐B﹐C﹐D﹐E
    ?System.out.println("values ==== " + values); //﹖﹐﹖﹐﹖﹐﹖﹐﹖

    註﹕.表示任何字符
    ??????[abc]表示abc之一字符
    ??????[^abc]表示非abc的一字符
    ??????\s表示空格﹐tab,換行﹐換頁﹐回車
    ???? \S表示非空格﹐tab,換行﹐換頁﹐回車
    ??? \d表示數(shù)字[0-9]
    ??? \D表示非數(shù)字[^0-9]
    ???\w表示詞字符[a-zA-Z0-9]
    ?? \W表示非詞字符[^a-zA-Z0-9]
    ?
    匹配量詞?? X? 表示1或0個(gè)X
    ??????????????????X* 表示0或n個(gè)X
    ??????????????????X+表示1或n個(gè)X

    posted @ 2006-08-03 15:26 software5168 閱讀(527) | 評(píng)論 (0)編輯 收藏

    WEB開發(fā)中的JAVA字符編碼

    一、概要
      在JAVA應(yīng)用程式特別是基於WEB的程式中,經(jīng)常遇到字符的編碼問題。為了防止出現(xiàn)亂碼,首先需要了解JAVA是如何處理字符的,這樣就可以有目的地在輸入/輸出環(huán)節(jié)中增加必要的轉(zhuǎn)碼。其次,由於各種伺服器有不同的處理方式,還需要多做試驗(yàn),確保使用中不出現(xiàn)亂碼。
    二、基本概念
    2.1 JAVA中字符的表達(dá)
      JAVA中有char、byte、String這幾個(gè)概念。char 指的是一個(gè)UNICODE字符,為16位的整數(shù)。byte 是字節(jié),字符串在網(wǎng)路傳輸或存儲(chǔ)前需要轉(zhuǎn)換為byte數(shù)組。在從網(wǎng)路接收或從存儲(chǔ)設(shè)備讀取後需要將byte數(shù)組轉(zhuǎn)換成String。String是字符串,可以看成是由char組成的數(shù)組。String 和 char 為內(nèi)存形式,byte是網(wǎng)路傳輸或存儲(chǔ)的序列化形式。
    舉例:

    String ying = “英”;
    char ying = ying.charAt(0);
    String yingHex = Integer.toHexString(ying);
    82 F1
    byte yingGBBytes = ying.getBytes(“GBK”);
    GB編碼的字節(jié)數(shù)值
    D3 A2

    ?

    2.2 編碼方式的簡介
      String序列化成byte數(shù)組或反序列化時(shí)需要選擇正確的編碼方式。如果編碼方式不正確,就會(huì)得到一些0x3F的值。常用的字符編碼方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32。
    ISO8859_1用來編碼拉丁文,它由單字節(jié)(0-255)組成。
      GB2312、GBK用來編碼簡體中文,它有單字節(jié)和雙字節(jié)混合組成。最高位為1的字節(jié)和下一個(gè)字節(jié)構(gòu)成一個(gè)漢字,最高位為0的字節(jié)是ASCII碼。
      UTF-8/UTF-16/UTF-32是國際標(biāo)準(zhǔn)UNICODE的編碼方式。 用得最多的是UTF-8,主要是因?yàn)樗趯?duì)拉丁文編碼時(shí)節(jié)約空間。

    UNICODE值 UTF-8編碼
    U-00000000 - U-0000007F: 0xxxxxxx
    U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
    U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
    U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    三、J2SE中相關(guān)的函數(shù)
    String str =”英”;
    //取得GB2312編碼的字節(jié)
    byte[] bytesGB2312 = str.getBytes(“GB2312”);

    //取得平臺(tái)缺省編碼的字節(jié)(solaris為ISO8859_1,windows為GB2312)
    byte[] bytesDefault = str.getBytes();

    //用指定的編碼將字節(jié)轉(zhuǎn)換成字符串
    String newStrGB = new String(bytesGB2312, “GB2312”);

    //用平臺(tái)缺省的編碼將字節(jié)轉(zhuǎn)換成字符串(solaris為ISO8859_1,windows為GB2312)
    String newStrDefault = new String(bytesDefault);

    //用指定的編碼從字節(jié)流裏面讀取字符
    InputStream in = xxx;
    InputStreamReader reader = InputStreamReader( in, “GB2312”);
    char aChar = reader.read();
    四、JSP、數(shù)據(jù)庫的編碼
    4.1 JSP中的編碼
    (1) 靜態(tài)聲明:
    CHARSET有兩個(gè)作用:
    JSP文件的編碼方式:在讀取JSP文件、生成JAVA類時(shí),源JSP文件中漢字的編碼
    JSP輸出流的編碼方式:在執(zhí)行JSP時(shí),往response流裏面寫入數(shù)據(jù)的編碼方式
    (2) 動(dòng)態(tài)改變:在往response流裏面寫數(shù)據(jù)前可以調(diào)用response.setContentType(),設(shè)定正確的編碼類型。
    (3) 在TOMCAT中,由Request.getParameter() 得到的參數(shù),編碼方式都是ISO8859_1。所以如果在瀏覽器輸入框內(nèi)輸入一個(gè)漢字“英”,在伺服器端就得到一個(gè)ISO8859_1編碼的(0x00,0xD3,0x00,0xA2)。所以通常在接收參數(shù)時(shí)轉(zhuǎn)碼:
    String wrongStr = response.getParameter(“name”);
    String correctStr = new String(wrongStr.getBytes(“ISO8859_1”),”GB2312”);
    在最新的SERVLET規(guī)範(fàn)裏面,也可以在獲取參數(shù)之前執(zhí)行如下代碼:
    request.setCharacterEncoding(“GB2312”);

    4.2 數(shù)據(jù)庫的編碼
    (1) 數(shù)據(jù)庫使用UTF-16
    如果String中是UNICODE字符,寫入讀出時(shí)不需要轉(zhuǎn)碼
    (2) 數(shù)據(jù)庫使用ISO8859_1
    如果String中是UNICODE字符,寫入讀出時(shí)需要轉(zhuǎn)碼
    寫入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”);
    讀出:String newStr = new String(oldStr.getByte(“ISO8859_1”),”GB2312”);
    五、源文件的編碼
    5.1 資源文件
    資源文件的編碼方式和編輯平臺(tái)相關(guān)。在WINDOWS平臺(tái)下編寫的資源文件,以GB2312方式編碼。在編譯時(shí)需要轉(zhuǎn)碼,以確保在各個(gè)平臺(tái)上的正確性:
    native2ascii –encoding GB2312 source.properties
    這樣從資源文件中讀出的就是正確的UNICODE字符串。
    5.2 源文件
    源文件的編碼方式和編輯平臺(tái)相關(guān)。在WINDOWS平臺(tái)下開發(fā)的源文件,以GB2312方式編碼。在編譯的時(shí)候,需要指定源文件的編碼方式:
    javac –encoding GB2312
    JAVA編譯後生成的字節(jié)文件的編碼為UTF-8。


    點(diǎn)最新版TOMCAT4.1.18支援request.setCharacterEncoding(String enc)
    點(diǎn)資源文件轉(zhuǎn)碼成company.name=\u82f1\u65af\u514b
    點(diǎn)如果數(shù)據(jù)庫使用utf-16則不需要這部分轉(zhuǎn)碼
    點(diǎn)頁面上應(yīng)有
    轉(zhuǎn)碼ⅰ:
    String s = new String
    (request.getParameter(“name”).getBytes(“ISO8859_1”),”GB2312”);
    轉(zhuǎn)碼ⅱ:
    String s = new String(name.getBytes(“GB2312”),”ISO8859_1”);
    轉(zhuǎn)碼ⅲ:
    String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);

    posted @ 2006-07-25 17:12 software5168 閱讀(990) | 評(píng)論 (0)編輯 收藏

    JAVA的反編譯---使用jad

    1.單個(gè).class文件編譯
    ??首先從控制臺(tái)進(jìn)入jad.exe目錄
    ?? 運(yùn)行?jad example1.class
    ??(此時(shí)example1.class和jad.exe位於同一個(gè)目錄)
    ? 成功運(yùn)行後﹐當(dāng)前目錄下產(chǎn)生一個(gè)新文件example1.jad﹐裡面為反編譯後的java代碼

    2.多個(gè).class文件編譯
    與1大致相同
    輸入jad -o -dtest -sjava *.class
    其中"test"表示反編譯文件的存放目錄﹐"java"表示反編譯後產(chǎn)生文件的後綴名

    3.某文件夾下所有文件編譯
    與1大致相同
    輸入jad -o -dtest -sjava? tree/**/*.class
    其中"test"表示反編譯文件的存放目錄﹐"java"表示反編譯後產(chǎn)生文件的後綴名
    tree表示源文件夾名

    詳細(xì)說明參看“Readme.txt”
    jad下載聯(lián)接 http://www.infoxa.com/asp/soft_file/xxnr_soft_242.htm

    posted @ 2006-07-12 11:36 software5168 閱讀(1408) | 評(píng)論 (0)編輯 收藏

    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    收藏夾

    JAVA學(xué)習(xí)網(wǎng)站

    綜合

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲中文字幕无码一区| 国产亚洲精午夜久久久久久| 黄色成人网站免费无码av| 男人的好看免费观看在线视频| 亚洲av中文无码乱人伦在线咪咕| 夜夜亚洲天天久久| 亚洲 欧洲 视频 伦小说| 免费无码专区毛片高潮喷水| 美女被免费网站91色| 久久久久国产精品免费免费搜索 | 国产一区视频在线免费观看 | 啊灬啊灬别停啊灬用力啊免费看| 亚洲国产精品福利片在线观看| 亚洲一区二区三区丝袜| 一级毛片人与动免费观看| 99久久国产热无码精品免费| 伊人久久大香线蕉亚洲| 免费看一区二区三区四区| 国产无遮挡色视频免费视频| 亚洲系列中文字幕| a视频在线免费观看| 国产免费观看黄AV片 | 亚洲成熟xxxxx电影| 一区二区三区在线观看免费| 亚洲无人区午夜福利码高清完整版| 国产亚洲精品2021自在线| 波多野结衣中文字幕免费视频| 99亚偷拍自图区亚洲| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 国产精品亚洲а∨天堂2021| 亚洲日本VA午夜在线影院| 日韩精品无码免费专区午夜 | 91精品国产免费| 亚洲精品97久久中文字幕无码| 亚洲an日韩专区在线| 色欲A∨无码蜜臀AV免费播| 亚洲无码精品浪潮| 欧亚一级毛片免费看| 久久久久久久综合日本亚洲| 免费看片在线观看| 久久精品国产亚洲AV嫖农村妇女 |