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

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

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

    posts - 495,  comments - 11,  trackbacks - 0
     

    kk.jar的目錄結構如下

    +kk.jar
    ??? +META-INF
    ??????? MANIFEST.MF
    ??? +config
    ??????? database.properties

    目標:讀取database.properties中的參數信息

    types=mysql
    mysql.url=jdbc:mysql://127.0.0.1:3306/tjtz
    mysql.user=root
    mysql.password=root
    mysql.driver=com.mysql.jdbc.Driver
    mysql.maxCounts=5

    代碼如下:

    /*
    * @(#)JarFileReader.java Oct 9, 2008
    *
    * Copyright (c) 2008 by jadmin. All Rights Reserved.
    */

    package file.jar;

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import java.util.Set;
    import java.util.jar.JarEntry;
    import java.util.jar.JarFile;

    /**
    * 從jar包中讀取配置文件信息
    *
    * @author <a href="mailto:jadmin@yeah.net">jadmin</a>
    * @version 1.00 Oct 9, 2008 1:10:44 AM
    */
    public class JarReader {

    public static void main(String[] args) {
    ?? String jarPath = "C:\\Documents and Settings\\Administrator\\桌面\\新建文件夾\\kk.jar";
    ?? String entryFile = "config/database.properties";
    ?? doRead(jarPath,entryFile);
    }

    public static void doRead(String jarPath, String entryFile) {
    ?? try {
    ??? JarFile jarFile = new JarFile(jarPath);
    ??? JarEntry entry = jarFile.getJarEntry(entryFile);
    ??? InputStream input = jarFile.getInputStream(entry);
    ??? process(input);
    ??? jarFile.close();
    ?? } catch (IOException e) {
    ??? e.printStackTrace();
    ?? }
    }

    private static void process(InputStream input) {
    ?? Properties p = new Properties();
    ?? try {
    ??? p.load(input);
    ??? Set<?> set = p.keySet();
    ??? for (Object name : set)
    ???? System.out.println(name + "=" + p.getProperty((String) name));
    ?? } catch (IOException e) {
    ??? e.printStackTrace();
    ?? }
    }
    }

    運行結果如下:

    posted @ 2008-10-09 01:49 jadmin 閱讀(1740) | 評論 (0)編輯 收藏

      1.清濁并吞:水在流動時不管清水、濁水皆能加以并合,由此松下幸之助領悟出人或企業在成長、學習的過程中應去面對各種可能的挑戰,而非去等待好的時機。因為,如果 任何事情皆要挑好天氣、好機會、好環境的話,那終將只能留在原地,毫無機會。所以, “清濁并吞”即是告訴我們在任何環境下,皆需讓自己有勇氣下決心開始去學習,開始去做,就如同經濟有景氣、有不景氣,人生亦本就有起有伏,重要的是當下的即知即行,而非等待和觀望。


      2.隨方亦圓:水在任何容器中皆可依容器之形狀而呈現出不同形狀的風貌,不管我們如何的擺弄它,它永遠能展現出其最好的一面,人在學習、成長的環境中亦同,處逆境時應下更大的決心,處順境時應更謙虛的學習,就像水的這種精神,在不同的環境中要能去適應環境、調適自己,去學習不同的東西和感受,給自己的人生或企業的未來下一個目標,然后去做它,不能自我設限,自我定型,而是不管在什幺情形下,皆能去適應它、去調適、去面對它、去克服這些環境,那終將有一番不同的成就。


     ?。常喜ㄏ蚂o:水在表面上雖是波浪起伏,但在水面下卻是平靜無波的。松下幸之助由此領悟出,事業就是要做扎根的工作,根扎得穩,事業才會穩固,事業若建構于沙灘之上,則波浪一來必毀于瞬間。因此,人或企業應學習水的這種精神,努力的去做扎根的工作,懷著單一的思想,專注、持續的去學習、去做,一定會有所體會和成就,否則,隨波逐流,沒有定位,在三心二意與三分鐘熱度的情況下,終將一事無成。


      4.變化無窮:水存在著各種不同的型態,例如以水、水蒸氣、雨水,冰塊等不同的方式存在著,它在不同情況下會有不同的轉化。松下幸之助又領悟出,做事業亦同,市場上的 變化無窮盡,遇到的人亦是形形色色的。但我們想想,為什幺有些事業做得那幺成功,有些人亦是那么成功?!成功的抉擇到底何在呢?關鍵在于自己。因為,市場和人生乃是變化無窮的,需要有彈性去適應,就如同人在雨天時就應撐傘 ,企業在低潮、不景氣時,就應調整策略,而非一成不變,僵化無以應變。事實上,人總是喜歡趨吉避兇,但奇怪的是卻又喜歡聽消極的事,因此,人的思想,企業文化乃是在面對變化無窮的環境時,能否成功的關鍵,挑戰一定是有的,因難也一定是有的,但是成功的定律卻是不變的,如何識人,如何保持彈性便是在面對各種狀況時所應具備的。


     ?。担疂B透擴散:水具有滲透、擴散的能力,這是許多東西所無法辦到的能力。人生的成長、學習過程亦應像水一樣,目標要不斷的提升和提高,才能讓自己有更多的收獲;就如同水一樣,潑到地上便馬上讓干的地面逐漸地變成濕的地面,不斷的滲透、擴散。而設定目標的式是目標須較自己的能力高一些,方能不斷自我挑戰和成長。因為如果你有登峰攀頂的能力,為何要把目光停留在半山腰呢?


      6.久儲必臭:水靜置放著,一段時日后自然會發臭。松下幸之助體會到他經營這幺大的事業,如果沒有讓自己再去學習、成長,那幺一定會落伍,所以須學習水一樣不斷的去流動,而非靜止在那邊。故學習是無止境的,惟有不斷的去學習、去努力,才有未來可言;對任一個想要成功的人或企業皆是如此,如果連松下幸之助這樣的經營神都有這樣的體會,那我們更應該努力的去學習。畢竟,人生或事業乃是不進則退的,因此須讓自己像水一樣,不斷的去流動才會有量,才不致“久儲臭”。


     ?。罚绷鞒吻澹核骱芸斓牡胤?,水一定特別干凈;就如同瀑布之頭,因水流湍急,所以水一定是澄清的。松下幸之助亦因此體會到人生的成長不能像小的水流一樣慢慢地流,他說慢慢的流雖不致發臭,但卻不會澄澈,須像急流一樣,水的力量大,又會清淯。因此在人生、事業的成長上要給自己壓力,就如同急流而下的高速水流產生強大的力量一般,惟有透過自我要求,方能產生完成目標的力量。


     ?。福嬷翆殻喝巳羧彼畡t必無法生存,所以水是生存至寶。同樣地,我們在自己的人生中,亦是扮演著很重要的角色;我們每一個人都是造物主最大的奇跡,因為在世界上,我們每一個人都是獨一無二的,是沒有任何人可以取代的。因此,我們自己須下最大的決心,對于自己的人生和目標有時間、計劃性的努力,則必會完成自己的人生,成就一生的事業

    posted @ 2008-09-19 22:09 jadmin 閱讀(60) | 評論 (0)編輯 收藏

    JTable是Swing編程中很常用的控件,這里總結了一些常用方法以備查閱.

    一.創建表格控件的各種方式:
    1) 調用無參構造函數.
    JTable table = new JTable();
    2) 以表頭和表數據創建表格.
    Object[][] cellData = {{"row1-col1", "row1-col2"},{"row2-col1", "row2-col2"}};
    String[] columnNames = {"col1", "col2"};
    ???
    JTable table = new JTable(cellData, columnNames);
    3) 以表頭和表數據創建表格,并且讓表單元格不可改.
    String[] headers = { "表頭一", "表頭二", "表頭三" };
    Object[][] cellData = null;

    DefaultTableModel model = new DefaultTableModel(cellData, headers) {

    public boolean isCellEditable(int row, int column) {
    ??? return false;
    }
    };

    table = new JTable(model);
    二.對表格列的控制
    1) 設置列不可隨容器組件大小變化自動調整寬度.
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    2) 限制某列的寬度.
    TableColumn firsetColumn = table.getColumnModel().getColumn(0);
    firsetColumn.setPreferredWidth(30);
    firsetColumn.setMaxWidth(30);
    firsetColumn.setMinWidth(30);
    3) 設置當前列數.
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    int count=5;
    tableModel.setColumnCount(count);
    4) 取得表格列數
    int cols = table.getColumnCount();
    5) 添加列
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    tableModel.addColumn("新列名");
    6) 刪除列
    table.removeColumn(table.getColumnModel().getColumn(columnIndex));// columnIndex是要刪除的列序號
    三.對表格行的控制
    1) 設置行高
    table.setRowHeight(20);
    2) 設置當前航數
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    int n=5;
    tableModel.setRowCount(n);
    3) 取得表格行數
    int rows = table.getRowCount();

    4) 添加表格行
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    tableModel.addRow(new Object[]{"sitinspring", "35", "Boss"});
    5) 刪除表格行
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    model.removeRow(rowIndex);// rowIndex是要刪除的行序號
    四.存取表格單元格的數據
    1) 取單元格數據
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    String cellValue=(String) tableModel.getValueAt(row, column);// 取單元格數據,row是行號,column是列號
    2) 填充數據到表格.
    注:數據是Member類型的鏈表,Member類如下:
    public class Member{
    ??? // 名稱
    ??? private String name;
    ???
    ??? // 年齡
    ??? private String age;
    ???
    ??? // 職務
    ??? private String title;
    }
    填充數據的代碼:
    public void fillTable(List<Member> members){
    DefaultTableModel tableModel = (DefaultTableModel) table
    .getModel();
    tableModel.setRowCount(0);// 清除原有行

    // 填充數據
    for(Member member:members){
    ??? String[] arr=new String[3];
    ??? arr[0]=member.getName();
    ??? arr[1]=member.getAge();
    ??? arr[2]=member.getTitle();
    ???
    ??? // 添加數據到表格
    ??? tableModel.addRow(arr);
    }

    // 更新表格
    table.invalidate();
    }
    2) 取得表格中的數據
    public List<Member> getShowMembers(){
    List<Member> members=new ArrayList<Member>();

    DefaultTableModel tableModel = (DefaultTableModel) table
    .getModel();

    int rowCount=tableModel.getRowCount();

    for(int i=0;i<rowCount;i++){
    ??? Member member=new Member();
    ???
    ??? member.setName((String)tableModel.getValueAt(i, 0));// 取得第i行第一列的數據
    ??? member.setAge((String)tableModel.getValueAt(i, 1));// 取得第i行第二列的數據
    ??? member.setTitle((String)tableModel.getValueAt(i, 2));// 取得第i行第三列的數據
    ???
    ??? members.add(member);
    }

    return members;
    }
    五.取得用戶所選的行
    1) 取得用戶所選的單行
    int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

    if(selectRows==1){
    int selectedRowIndex = table.getSelectedRow(); // 取得用戶所選單行

    .// 進行相關處理
    }
    2) 取得用戶所選的多行
    int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

    if(selectRows>1)
    int[] selRowIndexs=table.getSelectedRows();// 用戶所選行的序列

    for(int i=0;i<selRowIndexs.length;i++){
    ??? // 用tableModel.getValueAt(row, column)取單元格數據
    ??? String cellValue=(String) tableModel.getValueAt(i, 1);
    }
    }
    六.添加表格的事件處理
    view.getTable().addMouseListener(new MouseListener() {
    public void mousePressed(MouseEvent e) {
    ??? // 鼠標按下時的處理
    }

    public void mouseReleased(MouseEvent e) {
    ??? // 鼠標松開時的處理
    }

    public void mouseEntered(MouseEvent e) {
    ??? // 鼠標進入表格時的處理
    }

    public void mouseExited(MouseEvent e) {
    ??? // 鼠標退出表格時的處理
    }

    public void mouseClicked(MouseEvent e) {
    ??? // 鼠標點擊時的處理
    }
    });

    posted @ 2008-07-29 17:54 jadmin 閱讀(74) | 評論 (0)編輯 收藏

    MAGIC #1:
    ???????? 一個印度人發現的,沒有人可以在電腦的任何地方建立一個名為"CON"的文件夾 。微軟公司的全體職員沒有一個人能解釋這是為什么;
    這個的解釋是在Windows里不能以設備名來命名文件或文件夾,aux、com1、prn、con、nul等,這些都是系統保留的名稱

    MAGIC #2:
    ???????? 在電腦上照著這個做:1.新建一個空的文本文檔?????? 2.在里面輸入"Bush hid the facts"(不要引號,可復制進去)?? 3.關閉文檔,再打開文檔。 發生了什么?
    ???????? 這個我在做的時候試過把Bush改成其他英文名字,結果就會有點點不一樣,大家們探索一下吧!
    這個就不知道了

    MAGIC #3:
    ???????? 這是最酷也是最不可思議的一個。。。打開一個新的Word,在里面輸入=rand (200, 99) ,之后按Enter。。。。自己看吧@ 這個據說連比爾蓋茨也解釋不清楚@

    posted @ 2008-06-26 19:17 jadmin 閱讀(63) | 評論 (0)編輯 收藏

    第一步: 準備工作,建立個tabedit.html
    里面的內容很簡單, 建立個5X5的表格, 代碼如下:

    posted @ 2008-06-25 23:05 jadmin 閱讀(74) | 評論 (0)編輯 收藏
    本程序有兩文件test.asp 和tree.asp 還有一些圖標文件。

    1. test.asp 調用類生成樹代碼如下

    <%@ Language=VBScript %>
    <html>
    <head>
    <link rel="stylesheet" href="tree.css">
    <title>tree</title>
    </head>
    <!-- #include file="tree.asp" -->
    <%

    '========================================
    ' BUILDING A TREE PROGRAMATICALLY
    '========================================
    ' This approach would be best suited for building
    ' dynamic trees using For..Next loops and such.

    Set MyTree2 = New Tree
    MyTree2.Top = 10
    MyTree2.Left = 10
    MyTree2.ExpandImage = "plus.gif"
    MyTree2.CollapseImage = "minus.gif"
    MyTree2.LeafImage = "webpage.gif"

    ' Notice the indentation used to reprensent the hierarchy
    Set Node1 = MyTree2.CreateChild("script")
    Set SubNode1 = Node1.CreateChild("server")
    Set secSubNode1 = SubNode1.CreateChild("html")
    secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">asp</A>"
    secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">php</A>"
    secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">jsp</A>"

    Set SubNode2 = Node1.CreateChild("os")
    SubNode2.CreateChild "<A HREF=""#"">winnt</A>"
    SubNode2.CreateChild "<A HREF=""#"">win2000</A>"

    Set Node2 = MyTree2.CreateChild("Desktop")
    Node2.CreateChild "<A HREF=""#"">Area Code Lookup</A>"
    Node2.CreateChild "<A HREF=""#"">Arin Based Whois Search</A>"
    Node2.CreateChild "<A HREF=""#"">World Time Zone Map</A>"

    MyTree2.Draw()

    Set MyTree2 = Nothing

    %>

    </BODY>
    </HTML>


    2. tree.asp 類的定義 代碼如下

    <%

    Dim gblTreeNodeCount:gblTreeNodeCount = 1

    Class TreeNode

    Public Value
    Public ExpandImage
    Public CollapseImage
    Public LeafImage
    Public Expanded
    Private mszName
    Private mcolChildren
    Private mbChildrenInitialized

    Public Property Get ChildCount()
    ChildCount = mcolChildren.Count
    End Property

    Private Sub Class_Initialize()
    mszName = "node" & CStr(gblTreeNodeCount)
    gblTreeNodeCount = gblTreeNodeCount + 1

    mbChildrenInitialized = False
    Expanded = False
    End Sub

    Private Sub Class_Terminate()
    If mbChildrenInitialized And IsObject(mcolChildren) Then
    mcolChildren.RemoveAll()
    Set mcolChildren = Nothing
    End If
    End Sub

    Private Sub InitChildList()
    Set mcolChildren = Server.CreateObject("Scripting.Dictionary")
    mbChildrenInitialized = True
    End Sub

    Private Sub LoadState()
    If Request(mszName) = "1" Or Request("togglenode") = mszName Then
    Expanded = True
    End If
    End Sub

    Public Function CreateChild(szValue)

    If Not mbChildrenInitialized Then InitChildList()

    Set CreateChild = New TreeNode
    CreateChild.Value = szValue
    CreateChild.ExpandImage = ExpandImage
    CreateChild.CollapseImage = CollapseImage
    CreateChild.LeafImage = LeafImage

    mcolChildren.Add mcolChildren.Count + 1, CreateChild

    End Function

    Public Sub Draw()

    LoadState()

    Response.Write "<table border=""0"">" & vbCrLf
    Response.Write "<tr><td>" & vbCrLf

    If Expanded Then
    Response.Write "<a href=""javascript:collapseNode('" & mszName & "')""><img src=""" & CollapseImage & """ border=""0""></a>" & vbCrLf
    ElseIf Not mbChildrenInitialized Then
    Response.Write "<img src=""" & LeafImage & """ border=0>" & vbCrLf
    Else
    Response.Write "<a href=""javascript:expandNode('" & mszName & "')""><img src=""" & ExpandImage & """ border=""0""></a>" & vbCrLf
    End If

    Response.Write "</td>" & vbCrLf
    Response.Write "<td>" & Value & "</td></tr>" & vbCrLf

    If Expanded Then
    Response.Write "<input type=""hidden"" name=""" & mszName & """ value=""1"">" & vbCrLf

    If mbChildrenInitialized Then
    Response.Write "<tr><td> </td>" & vbCrLf
    Response.Write "<td>" & vbCrLf

    For Each ChildNode In mcolChildren.Items
    ChildNode.Draw()
    Next

    Response.Write "</td>" & vbCrLf
    Response.Write "</tr>" & vbCrLf
    End If
    End If

    Response.Write "</table>" & vbCrLf

    End Sub

    End Class


    Class Tree

    Public Top
    Public Left
    Public ExpandImage
    Public CollapseImage
    Public LeafImage
    Private mszPosition
    Private mcolChildren

    Public Property Let Absolute(bData)
    If bData Then mszPosition = "absolute" Else mszPosition = "relative"
    End Property

    Public Property Get Absolute()
    Absolute = CBool(mszPosition = "absolute")
    End Property

    Private Sub Class_Initialize()
    Set mcolChildren = Server.CreateObject("Scripting.Dictionary")
    mnTop = 0
    mnLeft = 0
    mszPosition = "absolute"
    End Sub

    Private Sub Class_Terminate()
    mcolChildren.RemoveAll()
    Set mcolChildren = Nothing
    End Sub

    Public Function CreateChild(szValue)

    Set CreateChild = New TreeNode

    CreateChild.Value = szValue
    CreateChild.ExpandImage = ExpandImage
    CreateChild.CollapseImage = CollapseImage
    CreateChild.LeafImage = LeafImage

    mcolChildren.Add mcolChildren.Count + 1, CreateChild

    End Function

    Public Sub LoadTemplate(szFileName)
    Dim objWorkingNode
    Dim colNodeStack
    Dim fsObj, tsObj
    Dim szLine
    Dim nCurrDepth, nNextDepth

    Set colNodeStack = Server.CreateObject("Scripting.Dictionary")
    Set fsObj = CreateObject("Scripting.FileSystemObject")
    Set tsObj = fsObj.OpenTextFile(szFileName, 1)

    nCurrDepth = 0
    While Not tsObj.AtEndOfLine
    nNextDepth = 1
    szLine = tsObj.ReadLine()

    If nCurrDepth = 0 Then
    Set objWorkingNode = CreateChild(Trim(szLine))
    nCurrDepth = 1
    Else
    While Mid(szLine,nNextDepth,1) = vbTab Or Mid(szLine,nNextDepth,1) = " "
    nNextDepth = nNextDepth + 1
    WEnd

    If nNextDepth > 1 Then szLine = Trim(Mid(szLine,nNextDepth))

    If szLine <> "" Then
    If nNextDepth > nCurrDepth Then
    If colNodeStack.Exists(nCurrDepth) Then
    Set colNodeStack.Item(nCurrDepth) = objWorkingNode
    Else
    colNodeStack.Add nCurrDepth, objWorkingNode
    End If

    Set objWorkingNode = objWorkingNode.CreateChild(szLine)

    nCurrDepth = nCurrDepth + 1
    ElseIf nNextDepth <= nCurrDepth Then

    If nNextDepth > 1 Then

    nNextDepth = nNextDepth - 1
    While Not colNodeStack.Exists(nNextDepth) And nNextDepth > 1
    nNextDepth = nNextDepth - 1
    WEnd

    Set objWorkingNode = colNodeStack.Item(nNextDepth)
    Set objWorkingNode = objWorkingNode.CreateChild(szLine)

    nNextDepth = nNextDepth + 1
    Else
    Set objWorkingNode = CreateChild(szLine)
    End If

    nCurrDepth = nNextDepth
    End If
    End If

    End If
    WEnd

    tsObj.Close()
    Set tsObj = Nothing
    Set fsObj = Nothing

    colNodeStack.RemoveAll()
    Set colNodeStack = Nothing

    End Sub


    Public Sub Draw()

    AddClientScript()

    Response.Write "<div id=""treectrl"" style=""left: " & Left & "px; top: " & Top & "px; position: " & mszPosition & ";"">" & vbCrLf
    Response.Write "<form name=""treectrlfrm"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """ method=""get"">" & vbCrLf
    Response.Write "<table border=""0"">" & vbCrLf
    Response.Write "<tr><td>" & vbCrLf

    For Each ChildNode In mcolChildren.Items
    ChildNode.Draw()
    Next

    Response.Write "</td></tr>" & vbCrLf
    Response.Write "</table>" & vbCrLf

    Response.Write "<input type=""hidden"" name=""togglenode"" value="""">" & vbCrLf
    Response.Write "</form>" & vbCrLf
    Response.Write "</div>" & vbCrLf

    End Sub

    Private Sub AddClientScript()
    %>
    <script language="JavaScript">

    function expandNode(szNodeName)
    {
    if(document.layers != null) {
    document.treectrl.document.treectrlfrm.togglenode.value = szNodeName;
    document.treectrl.document.treectrlfrm.submit();
    }
    else {
    document.all["treectrlfrm"].togglenode.value = szNodeName;
    document.all["treectrlfrm"].submit();
    }
    }

    function collapseNode(szNodeName)
    {
    if(document.layers != null) {
    document.treectrl.document.treectrlfrm.elements[szNodeName].value = -1;
    document.treectrl.document.treectrlfrm.submit();
    }
    else {
    document.treectrlfrm.elements[szNodeName].value = -1;
    document.treectrlfrm.submit();
    }
    }

    </script>
    <%
    End Sub

    End Class

    %>
    posted @ 2008-06-23 15:04 jadmin 閱讀(105) | 評論 (0)編輯 收藏
      盡管對于現如今的帶寬來說,網頁文件那僅以K來算的大小實在是微不足道,但如何將這以K來計算的網頁文件精簡到最小還是網頁設計師們所應該考慮的問題之一。

      眾所周之,在不影響整個網頁構架與功能的情況下,網頁文件越小越好,因為更小的網頁文件有利于瀏覽器對網頁的解釋時間縮到更短,自然訪客也就不用面臨等待網頁緩慢呈現的煩躁了,這一點對于那些帶寬少網速慢的用戶猶為明顯。試想一下,你會是希望打開一個網站的時候整個站點馬上呈現在你面前呢?還是喜歡花上十幾秒甚至是幾分釧來看整個站點一點一點的被瀏覽器解釋出來呢?

      在Table布局的時代,代碼無數次的隨著表格在頁面里重復,致使整個網頁文件變得臃腫無比,代碼的可讀性也降到最低,瀏覽器的解釋時間自然也增加了不少。而自從DIV+CSS的布局替代Table布局之后,這一切都得到了極大的改善,讓Table回歸到它原本用于顯示數據的位置上去,而布局就交給DIV+CSS來做,這樣代碼的可讀性與復用性都得到了提高,而DIV +CSS更為重要的一點就是將網頁文件的表現與結構區分開來,再也不用為了表現而去改動整個網頁文件的結構了。

      即使DIV+CSS的布局方式將以前Table布局時代碼的臃腫降到了最低,但對于網頁設計師來說,如何將網頁文件的大小控制到最小是永遠值得探索和追求的一個問題。

      看如下一段代碼:

      #header {
       margin-top:10px;
       margin-right:15px;
       margin-bottom:10px;
       margin-left:15px;
       backgroung-color:#333333;
       background-images:url(Images/header.jpg);
       }


      這樣的一段CSS代碼,在條理上很清晰,結構也很明了,可讀性很強,可是這樣的一段代碼卻沒有做精簡,也就是說它是最原始的CSS代碼,下面看精簡后的代碼:

      #header {
       margin:10px 15px;
       backgroung:#333 url(Images/header.jpg);
       }


      在CSS中有復合屬性這一說法,也就是說可以將很多屬性參數整合在一起的,比如說上面的“margin-top; margin-right; margin-bottom; margin-left;”可以整合成一個“margin”屬性,然后為其配上參數。
      

      通過這一點,我們就可以在原始CSS代碼的基本上將代碼進一步的精簡。而且這樣寫的結構也合理,可讀性也同樣強。可是對于要精簡到徹底來說,這還不夠。為了讓這段CSS代碼的結構明了,我們用上了空格換行等占用空間的東西,如果將這些占用空間的去掉呢?

      #header{margin:10px 15px;background:#333 url(Images/header.jpg);}


      只這一句就替代了上面的一段代碼,這樣代碼就已經精簡到了最大化,當然,并不推薦所有人都這樣寫,這樣寫的CSS代碼在可讀性上要遠遠差于段落式的寫法,除非你對自己寫的代碼有完全掌握的信心。

      在同一個站點的CSS文件中,不可避免的會出現不同的ID或Class卻有一部分相同的屬性,如果將這些ID或Class逐個分開來寫的話,在CSS文件里無疑會生成重復代碼,而我們要盡量的精簡CSS文件的大小,那么“消滅”這部分重復的代碼就變得勢在必行。
      

      看下面一段CSS代碼:

      #header{margin:10px 15px;background:#333 url(Images/header.jpg);}
      #content{margin:10px 15px;padding:10px;background:#999;}
      #copyright{margin:10px 15px;border:1px solid #f00;}


      在上面的三個ID中都有一個相同的屬性“margin:10px 15px;”,如果就這樣分開來寫的話,這三個ID之間將保持各自獨立的關系,但卻生成了重復的代碼,而我們可以將其寫成如下格式:

      #header,#content,#copyright{margin:10px 15px;}
      #header{background:#333 url(Images/header.jpg);}
      #content{padding:10px;background:#999;}
      #copyright{border:1px solid #f00;}



      將上面的ID換成Class也是一樣的。這樣寫我們就成功的將重復代碼“消滅”掉了。但是如果這里具有相同的屬性的ID或Class過多的話,難免會造成代碼可讀性降到很低很低,所以除此之外當具有相同屬性的都是Class時還有另外的一種寫法:


      .main{margin:10px 15px;}
      .header{background:#333 url(Images/header.jpg);}
      .content{padding:10px;background:#999;}
      .copyright{border:1px solid #f00;}


      當然這種寫法時,調用時的寫法也與平常不一樣。



      這樣的寫法同樣可以達到效果,并且也不會再怕具有相同屬性的Class多而造成代碼可讀性差的問題,但值得注意的一點就是,這種寫法對于ID是無效的,不管其中是存在一個ID或者全部都是ID,都將造成這段代碼的無效。
    posted @ 2008-06-23 15:01 jadmin 閱讀(77) | 評論 (0)編輯 收藏
    css對文字的布局上沒有靠容器底部對齊的參數,目前使用的一個不錯的方法也比較好.就是用position屬性來解決,看下面的代碼,用position的相對和絕對定位功能也輕松的實現了,文字靠近div低部對齊,并且靠近的距離還可以精確到像素,自己可以調節,是不是很不錯呢?

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>無標題文檔</title>
    <style type="text/css">
    #txt{

    height:300px;
    width:300px;
    border:1px solid #333333;
    text-align:center;
    position:relative

    }
    #txt p{
    position:absolute;
    bottom:0px;
    padding:0px;
    margin:0px
    }
    </style>
    </head>

    <body>
    <div id=txt>
    <p>aadsad</p>
    </div>
    </body>
    </html>

    posted @ 2008-06-23 15:00 jadmin 閱讀(101) | 評論 (0)編輯 收藏

    apache的commons項目下有個email子項目,它對JavaMail API進行了封裝,用起來特變方便。在開始之前,需要做以下準備:

    1、JavaMail API

    添加JavaMail API里的mail包到CLASSPATH里,JavaMail API下載地址:http://java.sun.com/products/javamail/downloads/index.html

    2、commons email

    下載地址:http://www.apache.org/dist/commons/email/

    工程目錄結構如下:

    以下給出兩個簡單示例程序

    // SendMail.java 使用SimpleEmail發郵件

    package com.apache.commons.email.demo;

    import org.apache.commons.mail.SimpleEmail;

    public class SendMail
    {
    ??? public static void main ( String[] arg ) throws Exception
    ??? {
    ??? // 使用SimpleEmail對于中文內容,可能會產生亂碼
    ??????? SimpleEmail email = new SimpleEmail ( );

    ??????? // SMTP服務器名
    ??????? email.setHostName ( "smtp.163.com" );
    ??????? // 登陸郵件服務器的用戶名和密碼
    ??????? email.setAuthentication ( "peki", "123456" );
    ??????? // 接收人
    ??????? email.addTo ( "jstio@qq.com", "曦勤" );
    ??????? // 發送人
    ??????? email.setFrom ( "peki@163.com", "小陳" );
    ??????? // 標題
    ??????? email.setSubject ( "Test message" );
    ??????? // 郵件內容
    ??????? email.setMsg ( "This is a simple test of commons-email<br>我是小陳" );
    ??????? // 發送
    ??????? email.send ( );
    ???????
    ??????? System.out.println ( "Send email successful!" );

    ??? }
    }

    收信結果如下:

    This is a simple test of commons-email<br>????

    有亂碼產生,并且html內容沒有正常顯示

    // MailSender.java?? 使用HtmlEmail發郵件

    package com.apache.commons.email.demo;

    import org.apache.commons.mail.EmailException;
    import org.apache.commons.mail.HtmlEmail;

    public class MailSender {


    public static void main(String[] args) {
    ?? // 不要使用SimpleEmail,會出現亂碼問題
    ?? HtmlEmail email = new HtmlEmail();
    ?? try {
    ??? // 這里是SMTP發送服務器的名字:,163的如下:
    ??? email.setHostName("smtp.163.com");
    ??? // 字符編碼集的設置
    ??? email.setCharset("gbk");
    ??? // 收件人的郵箱
    ??? email.addTo("jstio@qq.com");
    ??? // 發送人的郵箱
    ??? email.setFrom("peki@163.com", "小陳");
    ??? // 如果需要認證信息的話,設置認證:用戶名-密碼。分別為發件人在郵件服務器上的注冊名稱和密碼
    ??? email.setAuthentication("peki", "123456");
    ??? email.setSubject("下午3:00會議室討論,請準時參加");
    ??? // 要發送的信息,由于使用了HtmlEmail,可以在郵件內容中使用HTML標簽
    ??? email.setMsg("下午3:00會議室討論,請準時參加<BR>呵呵~!");
    ??? // 發送
    ??? email.send();
    ???
    ??? System.out.println ( "郵件發送成功!" );
    ?? } catch (EmailException e) {
    ??? // TODO Auto-generated catch block
    ??? e.printStackTrace();
    ??? System.out.println ( "郵件發送失敗!" );
    ?? }

    }

    }

    收信結果如下:

    下午3:00會議室討論,請準時參加
    呵呵~!
    沒有產生亂碼,html內容正常顯示
    以上程序盡供參考,如需要在開發中使用,還得深入研究
    posted @ 2008-06-21 22:12 jadmin 閱讀(3473) | 評論 (0)編輯 收藏

    1、我們在做驗證碼的時候往往由于要反作弊,驗證有時故意加入多的干擾因素,這時驗證碼顯示不很清楚,用戶經常輸入錯誤。這樣不但要重新刷新頁面,導致用戶沒有看清楚驗證碼而重填而不是修改,而且如果沒有用session保存下用戶輸入的其它數據的話(如姓名),用戶剛剛輸入的內容也不存在了,這樣給用戶造成不好的體驗。

    2、本例在原有驗證方式基礎之上增加一段js,通過xmlhttp來獲取返回值,以此來驗證是否有效,這樣即使用戶瀏覽器不支持js,也不會影響他的正常使用了。

    3、為了防止作弊,當用戶連接3次輸入錯誤時則重載一下圖片,這樣也利于用戶因為圖片上的驗證碼辨認不清而使其終無法輸入正確。

    4、本例還特別適合檢驗用戶名是否有效,只要從后臺做個sql查詢,返回一個值或是xml即可。(這種例子太多 ,就在此不贅述了)。

    5、本例的優點在于非常方便用戶輸入,而且減少對服務器端的請求,可以說既改善用戶體驗而且略會節省帶寬成本,但相應地要在頁面上增加一段JavaScript代碼,在目前網速越來越快人們要求便捷舒適的今天,似乎我們更應注意提供給用戶良好的使用感受。

    代碼如下:

    1、img.jsp,輸入主頁面

    posted @ 2008-06-18 21:29 jadmin 閱讀(185) | 評論 (1)編輯 收藏
    僅列出標題
    共50頁: First 上一頁 15 16 17 18 19 20 21 22 23 下一頁 Last 
    主站蜘蛛池模板: 在线中文高清资源免费观看| 久久精品国产亚洲av麻豆小说 | 综合久久久久久中文字幕亚洲国产国产综合一区首| 亚洲免费闲人蜜桃| 桃子视频在线观看高清免费视频| 天堂亚洲免费视频| 在线91精品亚洲网站精品成人| 色窝窝免费一区二区三区| 亚洲精品免费在线视频| 日本一卡精品视频免费| 亚洲av之男人的天堂网站| 国产精品免费αv视频| 亚洲国产成人久久综合野外| 国产精品久久久久久亚洲小说| 在线观看人成网站深夜免费| 亚洲人成人77777在线播放| 亚洲一区在线免费观看| 亚洲视屏在线观看| 久久永久免费人妻精品下载 | 亚洲1234区乱码| 18禁成人网站免费观看| 亚洲av日韩av无码黑人| 久久黄色免费网站| 亚洲AV无码乱码国产麻豆| 永久免费av无码入口国语片| 亚洲乱亚洲乱妇无码麻豆| 国内精品99亚洲免费高清| 亚洲人成人网站色www| 97在线免费视频| 精品久久久久久亚洲| a色毛片免费视频| 亚洲国产精品无码AAA片| 日本卡1卡2卡三卡免费| 亚洲综合久久综合激情久久| 日日麻批免费40分钟无码| 91情国产l精品国产亚洲区 | 亚洲暴爽av人人爽日日碰| 国产成人精品免费视频软件| 麻豆91免费视频| 成人亚洲性情网站WWW在线观看| 国产V片在线播放免费无码|