2013年11月5日 星期二

局部SRC分享

1.將此SRC獨立成一個PACKAGE name
2.打開【命令提示字元】
  • 利用cd 指令切換到project下的bin/classes下
  • 執行jar cvf 【自己命名】.java 【package name】/*.class
jar 與javac同一個資料夾,須利用環境變數加以設定。
 package name:是以【】/【】/【】的形式
3.將此jar檔案拷貝到 project下的libs資料夾內
4.勇敢的刪除 你的package即可

2013年10月28日 星期一

專案潛在殺手

專案潛在殺手
小型

特徵:.Button up規格設計
  • 較為保守,安全
  • 完全利用已能掌握之技術
  • 通常時程內能完成
  • 有充裕時間做測試及局部最佳化
2.風險:人員易閒置,規格規模較同類產品低

中型
特徵:以Top-down設計為多
  • 包含已知與未知技術項目
  • 通常邊做邊學其中部分技術
  2.風險:容易執著於技術的深入,忘記整體專案的各功能完整呈現

大型
特徵:以Top-down/Button up設計兼具
  • 求好心切,以致規格無法定義,或是定了之後又再新增
  • 缺點:程式人員人心惶惶不敢動手,深怕又要改規格

2013年10月20日 星期日

已知轉接器(adapter)可應用的GUI元件

  1. ListView
  2. Gallery
  3. AutoCompleteTextView
  4. MultiAutoCompleteTextView
  5. Spinner
  6. GridView
 當用到BaseAdapter時,在getView複寫時要注意:
  1. 此 getView為動態式呼叫,即畫面用到時才會呼叫
  2. 換言之可能造成重複new的情況:
    解法一:利用if (convertView == null) 做判斷
    解法二:利用ArrayList<所要NEW的View>事先做好

利用第三方Parse.com之推播軟體移植要點

(一)最基礎:僅能收到PUSH訊息
  1. 註冊帳號,並login到Parse.com,在下載SDK
  2. 依照QuickStart標籤之指示,實作相關程式於.java.xml
  3. 切換到Dashboard-->Push--->Send a push去新增Message
    • 少於180character
    • 可利用JSON格式
    • 可侷限群組收訊(利用Subscribe、subscription
(二)進階一:讓APP攔截到所Push的訊息(JSON格式)
1.要新增receiver於xml(PS.name要改成你的package name,action則可不改)
2.可考慮【訂閱頻道】 (Subscribe channel)練習:將SMS叫醒unlock改成push叫醒
(三)進階二: 讓APP能發出訊息給其他APP

2013年10月19日 星期六

Service+Receiver練習

四組程式互相對照:
V1:Activity自行發出Notification //此為對照用,因為Notification一般用在背景程式
V2: Activity+Receiver:由 Activity廣播給【自家】的Receiver,然後由Receiver發出Notification
//美中不足之處,此Activity並非結束(finish)
//而是移到後面(move To Back(true))
 V2-1: Activity無Receiver:由另一個 Activity發出廣播給【別家】的Receiver的示範方法
 V3:Activity+Service+Receiver:解決V2的缺點,讓Activity交出主控權給Service之後就finish();

2013年10月18日 星期五

Adapter(轉接器)相關重點

  1. 意義:可供3C產品的Adapte做比喻
    -->電的形式"轉變"  -->"資料形式"轉變
  2. Adapter常見的有:
    • ArrayAdapter:專精於字串資料
    • BaseAdapter:所有Adapter的基礎,專精於"複合式"資料(EX:圖文並茂)
    • Simple Adapter:專精於"靜態式(static)"表單
  3. ArrayAdapter的建構方式
    • 資料形式的決定
      1. String[ ]   -->利用new ArrayAdapter()建構子傳遞參數
      2.  list  -->利用new ArrayAdapter()建構子傳遞參數
      3.  resource的R.array  -->利用ArrayAdapter.createFromResource()參數傳遞
    • 版面形式的決定
      1. 自訂R.layout.mytext
      2. 官方定的android.R.layout.simple
      3. 其中android.R.layout.simple_list_item_2需特別處理
  4.  ListView的變化重點
    • Android為ListView特製一個ListActivity,可以省略調色盤步驟。也可以省略findView動作,改用getListView()
    • 資料的來源多樣化,例如
      1. DB:內定位置 or SDCard位置 or 來自internet
      2. File:內部空間 or SDCard or 來自internet
      3. Resource:StringArray
      4. 程式內宣告:String【】,List
    • ArrayAdapter之版面調整
      1. 必須回到父類別"BaseAdapter"複寫getView(...)方法,才能達成
      2. 首先要以super.getView(...)取得原版面之view
      3. 再以此view做findViewById抓出要修改的元件id
      4. 最後加以修改

2013年10月9日 星期三

關於Screen OFF -->On的一些應用

  1. Level-1:透過getWindow().setFlag()中的相關參數
    能讓Screen OFF -->On時,讓App Unlock。
    弱點:若此程式未被執行,則無法作用。
  2. Level-2:透過攔截Screen On的Receiver啟動Level-1的App,達成Unlock。
    弱點:若沒有人按下power鍵,使休息中的Screen OFF -->On,則無法作用。
  3.  Level-3:透過--遠端訊息(如簡訊、來電等等)之攔截,並以程式將Screen OFF -->On,則能啟動Level-2的App,連鎖反應,達成Unlock。
    優點:不須人為操作power OFF -->On。

2013年10月3日 星期四

Custom View-客製化視圖

  1. 隨你的喜好製作View元件
  2. 作法
    • New一個class,繼承View(或其子類別)
    • 需選取其【雙參數】建構子(Context、AttributeSets)
      Why三參數不可以,原因待查,第二個參數為傳遞相關屬性
    • 基本上都會複寫(overide) onDraw(Canvas canvas)或Draw(Canvas canvas)
    • 其Canvas參數(意指【畫布】可用來進行繪圖,EXcanvas.drawCircle
    • 其中會用到Paint物件,是作為畫筆()內定屬性有黑色、填滿模式
    •  
  3. 用法:
    • 回到調色盤,其歸類為【Custom & Library View】,按下refresh應能找到此文件。
    • 凡view所提共知相關方法都可以使用EX:visibility、OnClick、background color等
    • 甚至改寫Button可放文字上去。
    • 可以註冊onTouch,能對手是有更細分解:【按壓、滑動、離手】
  4. 客製元件的應用主要有兩類,一是整張畫布填滿畫面;二是將它視為一個元件
    因此,若要當成元件,通常會以onMeasure()複寫,並在其中以setMeasuredDimension(W,H)來規範其大小。
  5. 常見的畫筆用法有
    • 設定顏色
    • 設定筆粗
    • 設定筆觸風格【填滿或外框】
    • 設定消除鋸齒狀
  6. 圖示滑動Custom View之原理
    • 步驟一:按壓在(X0,Y0)->(10,10);
    • 步驟二:移動在(X,Y)->(11,10);
    • 步驟三:取得移動量(X-X0,Y-Y0)=(1,0);
    • 步驟四:取得View所在視窗的位置(v.getX(),v.getY());
    • 步驟五:加上移動量(v.setX(v.getX()+1),v.setY(v.getY()+0));

2013年10月2日 星期三

Android 常見的開關設計方式

  1. 開關不一定限於2段,可以為任意N段
  2. 開關的應用部限於【真實的】電器等控制,舉凡遊戲、廣告、最新消息等,都可見到其蹤跡
  3. 常見手法是利用一個變數或文字等 記錄狀態,然後搭配BUtton、Toggle Button、ImageView等作為VIEW的顯示。
    變數可以是:
    • boolean(另外宣告)
    • tag---->setTag(【同一種物件類別】),(【同一種物件類別】) getTag()
    • text---->setText(【】),getText()
    • for check box,ischecked()
      tag、text、for check box文件內部就有

關於圖片的重點

  1. android提供至少三種型式存放圖片
    • Resource<----以R.drawable.【file name】代號加以取用
    • Bitmap<-----以BitmapFactory加以生產製造,可搭配Matrix物件做【平移postTranslate、縮放postScale、旋轉postRotate】
    • Drawable<------可以 BitmapDrawable類別,將Bitmap轉成Drawable物件

  2. android 呈現圖片分前景、背景(需透過容器,也就是VIEW)
    • 前景,僅限於ImageView、ImageButton等
      (專業等級-本身即可【平移setX setY setTranslateX setTranslateY、縮放setScaleX setScaleY、旋轉setRotate X  setRotateY】
    • 背景:For所有的View(但有些View無法show,EX:EDITVIEW)
      View皆可setBackgroundDrawable()

修改專案名稱的步驟

  1. 到SDK Manager勾選【sample for SDK】
  2. Download 完成之後,有時要重啟Eclisp
  3. 選File->New->Other->選Android/AndroidSample
                                     -->勾選平台編號

修改專案名稱的步驟
  1. project name<----右鍵--->refacter--->rename
  2. package name<-----右鍵--->refacter--->rename
  3. java file name <-----右鍵--->refacter--->rename
  4. Manifest 之 package name<----打開Manifest.xml修改即可
  5. 因為步驟4,所以R.java也自動換package-->所以要將所有的import【舊的package name】.R;從java檔全部刪除
  6. PS:另外可改可不改的有layout name、app name(改較好)、menu name

android常用功能補充

  1. 立即撥號:將ACTZON_DIAL改成ACTION_CALL,並加上Manifest的use permission->CALL-PHONE
  2. 地址轉經緯度(或經緯度轉地址)
  • 有套件,Geocoder可用,正式介紹地圖時再談
  • 可先用線上軟體做轉換(www.mtgeoposition.com)
  3.如何安裝APP【.apk】
  • 藉由網路BY google play 或BY any file server(EX:Dropbox)
  • 藉由檔案總管類型之APP  =>一般手機有內建,或到google play下載
  • 藉由程式指令
  • 藉由adb(但限於ROOT權限之手機ON模擬器)

練習MENU+Activity切換

  1. Log練習:試將任一記錄log日誌的程式,加上一個Menu Item:Read Log,然後將Log內容以ScrollView+TextView加以顯示
  2. APP練習:試九九乘法表APP之測驗App和表格App結合一個Project,然後提供方法做切換。
  • 整合方式可以是A整合B,也可以是B整合A。(記得java,xml,Manifest都要調整)
  • 若不希望啟動太多【內容相同】的視窗,可藉由
           (i) Manifest->Application->Launch Mode->singleInstance或
           (ii) intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
  • Android提供另一種整合專案的方法,藉由【library】
          (i)B專案:【按右鍵】-->properties-->Android-->勾選Islibrary
          (ii)A專案:【按右鍵】-->properties-->Android-->點擊【Add】,出現library選單,
                         加以選取

PS注意,若在A.java找步道B.class,可利用游標加以選取Input
 PS注意,Manifest.xml要自行輸入完整【package name.class name】之Activity 註冊。

2013年10月1日 星期二

BACK鍵操作重點

至少有兩種方法攔截BACKKEY的按壓動作
  • 方法一:複寫onBackPressed()  //簡易
  • 方法二:
結束視窗常見用法
  • finish()
  • system.exit(0); //結束程式
一般處理BACKKEY的手法
  • 避免誤觸,在 onBackPressed()加上alertDialog加以警示,確認真要離開
  • 另外提供:
  1. 以一般Button提供
  2. 以action  BAR 提供
  3. 以MENU item提供

SQL Injection--造成網頁被駭

Select * from contacts Where UserName='" + username + "' and Pwd='" + password + "'

這是以前我常用的SQL語法,尤其是用到登錄畫面。
原來這會造成漏洞 資料隱碼

尋找DOM節點範例

<script>
function fun1()
{

    var html = document.documentElement;
    // alert(html.nodeName);
   
    if (html.hasChildNodes())
        {
        // alert("Y");
        }
    else
        {
        /// alert("N");
        }
   
    var node1 = html.firstChild;
    var node2 = node1.nextSibling;
    var pElement = document.createElement("p");
    var text = document.createTextNode("Hello World");
    pElement.appendChild(text);
    node2.appendChild(pElement);
}



</script>

SQL-別名語法、Right Outer join語法、 ISNULL語法

select ISNULL(C.CName,'主選單'),D.CName from Category C Right Outer join Category D on C.ID=D.MainID

別名語法:就是把表格名稱旁新增別名。Ex:Category C  或 Category D。
inner join語法:

andrid Menu操作重點

4.Menu Item如何以Action View呈現?
  • 到XML,將properties中的【Show As Action】加以【Browse】
  • 若只選【ifRoom】或【always】,則以顯示圖片(無圖片則題示文字)
  • 若加選【withText】,則圖+文
  • 舊版(2.X)則維持舊的MENU題示方式【MENU由下長上來】【MENU item可以塞圖片】
5.如何讓Menu item起作用:
  • 實作【onOptionsItemSelected 】
  • 藉由【item.getItemId() 】與R.id. item定義時給的ID   相比較
  • MENU所定義的item,其ID和layout中所定義的文件ID放在同一個class id中


3.其他重點
  • 要會以MENU工具新增MENU ITEM(記得給TITLE名稱)

2013年9月29日 星期日

Json 傳遞參數

<!DOCTYPE html>
<html>
<head>
<meta charset="BIG5">
<title>Insert title here</title>
<script type="text/javascript" src="json.js"></script>
<script>
var people =
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
};
alert(people.programmers[0].firstName);
var stuents=new Object();
stuents.name="egg";
stuents.scope=100;
alert(stuents.toJSONString());
</script>
</head>
<body>

</body>
</html>

2013年9月27日 星期五

login流程設計&分析

1.login的機制要完成
登入成功:帳號要存在變數,將isLogined=true
登入失敗:免做
2.是否要記住帳號 :
   沒勾==>>勾選-->立即檢查islogined  -->true:立即存帳號
                                          -->false:沒事,等登入鈕按下-->再存
   勾選 ==>>沒勾:show對話框-->NO:沒事
                                                   -->YES:delete file(或刪內容)
3.離開程式,再執行:檢查,A.有無勾選狀態要儲存B.若有勾選,id.setText("先前帳號'),否則沒事。

補充JAVA檔案API

JAVA檔案API

1.分兩大類:
 A.檔案管理:
  向name、size、datetime、attribute、delete
 B.檔案讀寫:
  以甚麼單位讀寫 、採覆蓋()或銜接模式
  
2.重點:
A.不論FILE或FOLDER皆已File類別宣告

B.宣告File不代表已建立folder、file

C.建folder,須以mkdirs()或mkdir()。
    建file,須以createNewFile()。

D.File建構子可填絕對路徑(EX:C:\books)
                     或相對路徑 (EX:.\books【本身一層】 或..\books【上一層】)

E.常用API有exists()、isDirectory()、getName()、isFile、remaneTo()、list()、lastModified()、length()。

監聽器的三種基本用法

1.以所在的類別實作監聽器
2.宣告一個【具名類別】並加以實體化(紅色字體)
3.宣告一個【匿名類別】並加以實體化


package com.example.onclick_1;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class OnClick extends Activity {

    int count =0;
   
    Button bt1;
   
    // 2. 實作 OnClick 監聽器 step #1
//    class MyOnClickListener implements OnClickListener {
//
//        @Override
//        public void onClick(View v) {
//            // TODO Auto-generated method stub
//            count++;
//            setTitle(count+"");
//        }
//    }
//    MyOnClickListener listener = new MyOnClickListener();

   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_on_click);
        bt1 = (Button) findViewById(R.id.button1);
        // 1. 註冊 OnClick 監聽器
//        bt1.setOnClickListener(this);
//        bt1.setOnClickListener(listener);
        bt1.setOnClickListener( new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                count++;
                setTitle(count+"");
            }}     );
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.on_click, menu);
        return true;
    }

    // 2. 實作 OnClick 監聽器 step #2
//    @Override
//    public void onClick(View v) {
//        // TODO Auto-generated method stub
//        count++;
//        setTitle(count+"");
//    }

}

2013年9月25日 星期三

上課筆記-findViewByID( *** )重點

1.此為ANDROID指令,為在JAVA和調色板之間做溝通。
2.***為ID參數,用法為R.id.[]
R:在gen/R.java,此為自動產生的檔案,勿修改。
.id為R的內部靜態類別。
[]為調色板內所定義的id代號。
3.用法:et1=(EditText) findViewById(R.id.editText1);
(EditText) =>多形的應用,可轉成對應的子類別。
findViewById=>原本傳回父類別View。

DOM的寫法-

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<jsp:useBean id="mylist" scope="page" class="com.shaojung.shopping.CategoryDAO" />
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    pageContext.setAttribute("catlist", mylist.getlistbyMainID(0));
%>   
<!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=utf-8">
<title>Insert title here</title>
<script language="javascript" type="text/javascript">

var request = new XMLHttpRequest();

function funclick()
{   
    var id = document.getElementById("MainID").value;
    request.open("GET", "GetSubCategory.jsp?ID=" + id, false);
    request.onreadystatechange = updatePage;
    request.send(null);
}

function updatePage() {
    if (request.readyState == 4)
        if (request.status == 200)
            {
                 var ops = request.responseText.split('|');
                 var selectbox=document.getElementById("SubID");
  
               for (var j=ops.length-1;j>=0;j--)
                 {

                  
                  selectbox.remove(j);
                  }
                  for (var i=0;i<ops.length;i++)
                 {
                     var new_option = new Option(ops[i], i);
                     selectbox.options.add(new_option);
                 }     

               
            }
           
            // document.getElementById("show").innerHTML = request.responseText;
    }
</script>
</head>
<body>
  <p>
    <label for="MainID">分類</label>
    <select name="MainID" id="MainID" onchange="funclick()">
    <c:forEach items="${catlist}" var="item">
        <option value="${item.ID}">${item.CName}</option>
    </c:forEach>
    </select>
  </p>
  <p><span id="show"></span></p>
    <label for="SubID">子分類</label>
    <select name="SubID" id="SubID">

    </select> 
</body>
</html>

2013年9月23日 星期一

sql-convert語法

SELECT 訂單.訂單序號,convert(char,訂單.日期,111),客戶.客戶名稱 from 訂單 inner join 客戶 on 訂單.客戶編號=客戶.客戶編號


convert有三個引數,
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

style是用數字代表,可用google用msql convert關鍵字查詢:
11 = yy/mm/dd
111 = yyyy/mm/dd
 

2013年9月17日 星期二

JSP語法-連結資料庫

<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<%@page import="java.sql.*"%>
<!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=BIG5">
<title>Insert title here</title>
</head>
<body>
    <%
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String connectionUrl = "jdbc:sqlserver://localhost:1433;"
                + "databaseName=Students;user=sa;password=123456;";
        Connection con = DriverManager.getConnection(connectionUrl);
        if (con.isClosed()) {
            out.println("jdbs is closed!關閉中");
        } else {
            out.println("jdbs is opened!開啟中");
        }
        con.close();
        if (con.isClosed()) {
            out.println("jdbs is closed!");
        } else {
            out.println("jdbs is opened!");
        }
    %>


</body>
</html>

2013年9月16日 星期一

SQL語法--表格關聯、條件篩選 、排列順序、群組

SELECT 訂單.訂單序號, 訂單.日期, 客戶.客戶名稱 FROM 訂單 inner join 客戶 on 客戶.客戶編號=訂單.客戶編號  where 客戶名稱='一品書店' order by 訂單.訂單序號 asc;

表格關聯
from 表格1名稱 inner join 表格2名稱  on 表格1.客戶編號欄位=表格2.客戶編號欄位

條件篩選 (客戶名稱為一品書局):
where  客戶名稱='一品書店' 

排列順序(訂單序號排序):
order by 訂單.訂單序號 ----由小到大
order by 訂單.訂單序號 desc ----由大到小 



群組(Sum.....GROUP BY...)

SELECT 訂單.客戶編號, Sum(明細加小記.小記) AS 小記之總計
FROM 明細加小記 INNER JOIN 訂單 ON 明細加小記.訂單序號 = 訂單.訂單序號
GROUP BY 訂單.客戶編號;

2013年9月14日 星期六

JSP-javaBean、setProperty演練:改寫登入流程

登入流程:login.jsp--->check.jsp--->ok.jsp或fail.jsp
 check.jsp使用ChkLogin.java這支程式。

 login.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>

<form id="form1" name="form1" method="post" action="check.jsp">
  <p>
    <label for="username">帳號:</label>
    <input type="text" name="username" id="username" value="${cookie.username.value}"/>
  </p>
  <p>密碼:
    <input type="password" name="password" id="password" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
</body>
</html>


check.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="objCheck" scope="page" class="t0915.ChkLogin" />
<jsp:setProperty name="objCheck" property="userName" param="username" />
<jsp:setProperty name="objCheck" property="pwd" param="password" />
<%

if (objCheck.check())
{
    session.setAttribute("login", "ok");
    session.setAttribute("username", objCheck.getUserName());
   
    Cookie myCookie = new Cookie("username", objCheck.getUserName());
    myCookie.setMaxAge(60);
    response.addCookie(myCookie);
   
    response.sendRedirect("ok.jsp");
}
else
{
    response.sendRedirect("fail.jsp");
}
%>



ChkLogin.java
package t0915;

public class ChkLogin {
    private String name;
    private String pwd;
   
    public ChkLogin()
    {
       
    }
   
    public void setUserName(String u)
    {
        name = u;
    }
   
    public String getUserName()
    {
        return name;
    }
   
    public void setPwd(String p)
    {
        pwd = p;
    }
   
    public String getPwd()
    {
        return pwd;
    }
   
    public boolean check()
    {
        if (name.equals("abc") && pwd.equals("123"))               
            return true;
        else
            return false;
    }
}

2013年9月13日 星期五

stil-fmt<標籤函式庫>

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<jsp:useBean id="now" class="java.util.Date"/>
<p><fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/></p>
<p><fmt:formatDate value="${now}" type="date" dateStyle="medium"/></p>
<p><fmt:formatDate value="${now}" type="date" pattern="MM-dd-YYYY"/></p>

</body>
</html>

jstl-functions標籤函式庫

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
${fn:contains("this is a test","ths")}
<P>${fn:substring("abcdefg",2,5)}</P>
<P>${fn:substringAfter("this is a test","a")}</P>
<P>${fn:substringBefore("this is a test","a")}</P>

</body>
</html>

jstl-編碼問題設定

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<c:set value="OK" var="login" scope="session"/>
<fmt:requestEncoding value="utf-8"/>

<c:choose>
   <c:when test="${param.username != '' && param.password !=''}">
   ${param.username}
    <c:redirect url="ok.jsp"/>
   </c:when>
   <c:otherwise>
   <c:redirect url="fail.jsp"/>
   </c:otherwise>
</c:choose>

stil-for&forEach& for Tokens迴圈演練


綠色字體是for迴圈,輸出為1~10
紅色字體是 forEach,透過script定義陣列變數,用request參數設定內容。輸出為a,b,c,d。
紫色字體是 forEach輸出為b,d。
藍色字體是 for Tokens輸出為台北 高雄 屏東 林口 台中 台東


<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
 String[] myarray={"a","b","c","d"};
 request.setAttribute("myarrays",myarray);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<c:forEach var="myitems" begin="1" end="10" >
   ${myitems}
</c:forEach>


<c:forEach items="${myarrays}" var="myitems2">
 <P>  ${myitems2}</P>
</c:forEach>

 
forEach2:
<c:forEach items="${myarrays}" var="myitems3" begin="1" end="3" step="2">
 <P>  ${myitems3}</P>
</c:forEach>


for Tokens:
<c:forTokens var="myitems4" items="台北,高雄,屏東,林口,台中,台東" delims=",">
 <P>  ${myitems4}</P>
</c:forTokens>

 
</body>
</html>

2013年9月12日 星期四

stil-choose改寫if..else法

choose內的when.....otherwise類似於script的if...else 。

原有程式
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");

if (username.equals("abc") && password.equals("123"))
{
    session.setAttribute("login", "ok");
    response.sendRedirect("ok.jsp");
}
else
{
    response.sendRedirect("fail.jsp");
}
%>



 可改寫為
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set value="OK" var="login" scope="session"/>
<c:choose>
   <c:when test="${param.username != '' && param.password !=''}">
    <c:redirect url="ok.jsp"/>
   </c:when>
   <c:otherwise>
   <c:redirect url="fail.jsp"/>
   </c:otherwise>
</c:choose>

jstl-if演練

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<c:if test="${4>2}">
<c:out value="ok"/>

</c:if>
</body>
</html>

jstl-param演練


<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="get.jsp">
  <p>
    <label for="username"></label>
    <input type="text" name="username" id="username" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
</body>
</html>

---------------------------------------------------------------------------------------------------
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
${param.username}  //用param可以將username的變數值呼叫出來
</body>
</html>

jstl-import演練

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<c:import url="intstr.jsp" />  //單獨匯入
intstr.jsp
<c:import url="inc.jsp" var="str"/>
<p>mystr: ${str}</p>  //透過參數呼叫網頁

</body>
</html>

jstl-url設定演練。

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<a href="<c:url value="004.jsp">
<c:param value="123" name="id" />
</c:url>">連到004 </a>

</body>
</html>

jstl用Java script叫出

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="my test!" var="tt" scope="request" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<%
String str=(String)request.getAttribute("tt");
out.println(str);
%>

</body>
</html>

標籤庫jstl-匯入與使用

JSTL是另一個標準規範,本身並非在JSP的規範當中,所以必須另外下載JSTL的API與實作。

以下兩個為Tomcat 的函式庫路徑
C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\WEB-INF\lib (針對單一網站使用的函式庫)
將下載的jstl.jar放入上述第一個路徑即可。

要使用JSTL核心標籤庫,必須在JSP網頁上,使用taglib指示元素定義前置文件與uri參考。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

------------------------------------------------------------
<body>
<c:set value="這是預設的值" var="str"/>
${str} //會印出str變數值
<c:out value="test"/>
</body>

session隱含物件範例

session是存放在伺服器端。



session1.jsp 
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>

<%
session.setAttribute("login","ok");

%>



-------------------------------------------------------------------------------------------------------
session2.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<%
String s=(String)session.getAttribute("login");
out.println(s);
%>
</body>
</html>

cookies隱含物件


cookies是儲存在客戶端。
cookies存活時間若沒有設定,瀏覽器關閉就會消失。
若有設定,則會以文字檔



cookies.jsp
<%
Cookie mycookie=new Cookie("username","egg");
mycookie.setMaxAge(60);
response.addCookie(mycookie);
%>

cookies_read.jsp
<body>
<%
Cookie[] cookies=request.getCookies();
out.println(cookies[0].getName());
%>
</body>

2013年9月11日 星期三

利用application隱含物件範例


application為一個用於在Tomcat隱含物件。
count變數是我們自訂的。

<%
String str=(String)application.getAttribute("count");
if(str==null){  //檢查str物件是否有指向application物件,並不是檢查這個物件為空,故不用equals。
    str="0";
}
int c=Integer.valueOf(str);
c++;
str=String.valueOf(c);
application.setAttribute("count",str);
out.println("走訪人數為:"+str);


Enumeration values=application.getAttributeNames();
String s;
while(values.hasMoreElements()){
s=(String)values.nextElement();
out.println(s+"</br>");
}
%>

JSP網頁-隱含物件

JAVA內有很多的隱含物件,可以方便使用。
如果使用Math的物件則需匯入 。


<%@ page import="java.lang.*"%> //匯入物件

<body>
<%
double vaule=Math.pow(2,5);  //要設為double
out.println(vaule);//隱含物件
%>
</body>

登入帳號密碼-傳統JSP網頁寫法。

建立4個檔案
使用者登入畫面login.jsp-->判斷check.jsp-->ok.jsp或fail.jsp

 login.jsp
<body>
<form id="form1" name="form1" method="post" action="/0910/check.jsp">
  <p>
    <label for="username">姓名:</label>  //使用label可以讓使用者點到姓名時,游標直接到姓名的文字框
    <input type="text" name="username" id="username" />
  </p>
  <p>
    <label for="pwd">  密碼:</label>
 
    <input type="password" name="pwd" id="pwd" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
</body>
-------------------------------------------------------------------------------------------------------------
check.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>

<%
request.setCharacterEncoding("utf-8");

String username=request.getParameter("username");
String pwd=request.getParameter("pwd");

if(username.equals("")||pwd.equals("")){
     response.sendRedirect("fail.jsp");
}else{
    session.setAttribute("login","ok");
    response.sendRedirect("ok.jsp");
}
%>

-----------------------------------------------------------------------------------------------------------------
ok.jsp

<%
String susername=(String)session.getAttribute("login");
if(susername==null){
response.sendRedirect("login.jsp");
}
%>



fail.jsp就隨自己要給使用著甚麼資訊。

泛型集合類別-ListIterator介面輸出元素

import java.util.ArrayList;
import java.util.ListIterator;

public class ch10_6_4_listiterator {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
        ArrayList<String> alist = new ArrayList<String>();
        alist.add("台北");
        alist.add("林口");
        alist.add("桃園");
        alist.add("基隆");
        System.out.println("ArrayList的元素為: " + alist);
        ListIterator<String> lterator = alist.listIterator(0);
        System.out.print("ListIterator的元素為: ");
        while (lterator.hasNext()) {
            System.out.print(lterator.next() + "  ");
        }
        ListIterator<String> literator1 = alist.listIterator(alist.size());
        System.out.println("");
        System.out.print("ListIterator的元素為(反向): ");
        while(literator1.hasPrevious()){
            System.out.print(literator1.previous()+ "  ");
        }
    }

}


實作List介面的集合物件除了可以使用Iterator介面外,還可以使用ListIterator介面,這是Iterator介面的子介面。ListIterator介面除了使用一致走訪方法外,還可以雙向走訪集合物件的元素,即從頭到尾,或從尾到頭來走訪元素。

當總經理說了這句話,你會有甚麼回應。

總經理:現在公司有兩種人;一種是等著下班的人,一種是等著被資遣的人。

回想到當初聽到這一句話的感覺是,覺得很好笑。
一位好的管理人員,不應該說出這一句話。

如果是認真上班的員工,會覺得原來我的努力,在主管的眼中,根本就不屑一顧。那還需要繼續努力工作嗎!!

如果是混水摸魚的員工,會覺得大家都是這樣。更加放肆。

把這件事,講給朋友聽。有人覺得公司準備收了;有人一笑置之。

最高竿的就是一笑置之的人。

我想每個人都有發言的權利,而我不應該為了這句話耿耿於懷。

說話的藝術,是需要練習的。
不經大腦說出來的話,通常都是氣話。一般而言是沒有任何價值。
大部分人......包括我,都會被某些話大動肝火。

動了肝火,傷身又傷錢。

勸大家沒跟自己過不去,很多事看過就給他忘了;很多話聽過就給他飛過就好了。
把一些時間與精力花在比較跟自身有關的事務上,比較實在。

2013年9月10日 星期二

泛型集合類別-Iterator介面輸出元素

import java.util.HashSet;
import java.util.Iterator;

public class ch10_6_3 {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
HashSet<String> hset=new HashSet<String>();
hset.add("三芝");
hset.add("淡水");
hset.add("金山");
System.out.println("Hashset方法呼叫內容為:"+hset);
Iterator<String> iterator=hset.iterator();
System.out.print("Iteretor介面呼叫內容為:");
while(iterator.hasNext()){
    System.out.print(iterator.next()+"  ");
}
    }

}


使用Collection、Set和List介面的iterator()方法,就可以取得Iterator<E>介面物件。
例如:HashSet<String>物件hset可以使用上表方法取得Iterator介面物件,如下所示:

Iterator<String> iterator = hset.iterator();

Android App實作:ListView +button

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {
    ListView LV01;
    Button BT01;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //連結
        LV01=(ListView) this.findViewById(R.id.LV01);
        BT01=(Button) this.findViewById(R.id.BT01);
        //定義事件
        BT01.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO 自動產生的方法 Stub
                ArrayList<String> alist=new ArrayList<String>();
                alist.add("小白");
                alist.add("小叮噹");
                alist.add("小叮鈴");
                alist.add("小新");
                ArrayAdapter <String> Aadapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, alist);
                LV01.setAdapter(Aadapter);
            }
           
           
           
           
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

泛型集合類別-ArrayList類別

import java.util.ArrayList;

public class ch10_6_2_arraylist {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
        ArrayList<String> alist = new ArrayList<String>(4);
        String name = "蠟筆小新";
        alist.add("小丸子");
        alist.add("蠟筆小新");
        alist.add("小甜甜");
        alist.add("小叮噹");
        System.out.println("物件尺寸:" + alist.size());
        alist.add(2, name);//新增元素
        System.out.println("物件尺寸:" + alist.size());
        System.out.println("集合物件(1):");
        for (int i = 0; i < alist.size(); i++) { //利用迴圈取得元素
            System.out.print(i + ")" + alist.get(i) + " ");
        }
        System.out.println(" ");
        System.out.println("集合物件(2):");
        for (String element : alist) {
            System.out.print(element + " ");
        }
        System.out.println(" ");
        System.out.println("搜尋:"+name);
        System.out.println("indexOf():"+alist.indexOf(name));
        System.out.println("lastindexOf():"+alist.lastIndexOf(name));
        alist.set(3,"小叮鈴");//取代元素
        System.out.println("取代元素三:"+alist);
        alist.remove(0);//刪除元素
        System.out.println("取代元素0:"+alist);
    }

}

ArrayList類別實作List介面,使用類似陣列方式來儲存,元素是使用索引位置來依序的存入,我們只需將元素新增或插入ArrayList物件,並不用事先宣告物件尺寸,如同一種可自動調整陣列尺寸的動態陣列

泛型集合類別-HashSet類別

import java.util.HashSet;

public class 集合物件 {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
        HashSet<String> hset = new HashSet<>();
        System.out.println("集合物件是否為空:" + hset.isEmpty());
        String name1 = "林至玲";
        String name2 = "王金評";
        hset.add("胖胖褲豬");
        hset.add(name1);
        hset.add(name2);
        hset.add("多拉A夢");
        System.out.println("集合物件的尺寸為: "+hset.size());
        System.out.println("集合物件是否為空:" + hset.isEmpty());
        System.out.println("集合物件有林至玲:" + hset.contains(name1));
        hset.remove(name1);
        System.out.println("集合物件有林至玲:" + hset.contains(name1));
        System.out.println("集合物件內容為:" +hset);
        hset.clear();
    }

}

程式碼在HashSet類別之後,使用「<」和「>」括起的資料型態是泛型型態,可以指定集合物件儲存元素的資料型態,以便Java編譯程式自行追蹤記錄元素的資料型態,所以取出集合物件的元素時,就不需使用程式碼來執行型態轉換。 

HashSet類別實作Set介面,繼承Collection介面的方法且使用「雜湊表」(Hash Table)演算法來改進新增、刪除和存取集合物件元素的執行效率,其儲存元素的排列和插入順序不同,也不保證擁有固定的排列順序 

JSP:表單製作-下拉式選單+陣列

<body>
<%
String data[]={"麵","水餃","飯","湯"};
%>
<form id="form1" name="form1" method="post" action="/0910/display5.jsp">
  <label for="order"></label>
  <select name="order" id="order">
  <%for(int i=0;i<data.length;i++){%>
    <option value="<%out.print(i);%>"><%out.print(data[i]);%></option>
   <%}%>
  </select>
</form>
</body>

JSP:表單製作foreach迴圈+核取方塊

 input.jsp
 <body>
<form id="form1" name="form1" method="post" action="/0910/display4.jsp">
  <p>你會哪些語言?
</p>
  <p>
    <label>
      <input type="checkbox" name="lang" value="C" id="lang_0" />
      C語言</label>
    <br />
    <label>
      <input type="checkbox" name="lang" value="PHP" id="lang_1" />
      PHP</label>
    <br />
    <label>
      <input type="checkbox" name="lang" value="JAVA" id="lang_2" />
      JAVA</label>
    <br />
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
</body>
---------------------------------------------------------------------------------------------------
 display.jsp
<body>
<%
String[] lang=request.getParameterValues("lang");
for(String data:lang){
out.println( data +"</br>");

}
%>
</body>

JSP:表單製作-RadioButtonGroup

RadioButtonGroup的參數"name"相同,則為同一群組。
ID為不同的DOM物件所以值不同。

新增以下兩個檔案input.jsp、display.jsp

input.jsp
<body>
<form id="form1" name="form1" method="post" action="/0910/display2.jsp">
  <p>請問是否要加入?
</p>
  <p>
    <label>
      <input type="radio" name="enroll" value="Y" id="enroll_0" />
      是</label>
    <br />
    <label>
      <input type="radio" name="enroll" value="N" id="enroll_1" />
      否</label>
    <br />
    <input type="submit" name="button" id="button" value="送出" />
  </p>
</form>
</body>

--------------------------------------------------------------------------------------------
display.jsp
 <body>
<%
String strname="";
strname=request.getParameter("enroll");
out.println("你的答案為:"+strname);
%>
</body>

JSP:表單製作(兩數相加)

新增method.jsp、ans.jsp,注意轉型及呼叫get變數。

method.jsp
<body>
<form action="ans.jsp" method="get">
<input type="text" id="num1" name="num1" />
+
<input type="text" id="num2" name="num2" />
<input type="submit" value="=" />
</form>


------------------------------------------------------------------------
ans.jsp
<body>
<%
String i, j;
i=request.getParameter("num1");
j=request.getParameter("num2");
int total=Integer.valueOf(i)+Integer.valueOf(j);
out.println("答案為: "+total);
%>
</body>

JSP:表單製作(簡單傳送字串)

新增兩個檔案 input.jsp、display.jsp, 要注意method參數get、post。
(post:若有要傳送圖片或檔案,請使用這個參數。)

input.jsp
<body>
<form action="display.jsp" method="post">
<input type="text" id="username" name="username"/>
<input type="submit" />
</form>
</body>
-----------------------------------------------------------------------------------
display.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String strname="";
strname=request.getParameter("username");
out.println("你的姓名為:"+strname);
%>
</body>



2013年9月9日 星期一

JSP+html九九乘法表


方法一
先在Eclisp寫的九九乘法表JAVA Code :
public class ninenine {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
for(int i=1;i<10;i++){
    for(int j=1;j<10;j++){
        System.out.print(j+"*"+i+"="+i*j+"\t");
    }
    System.out.println("");
}
    }

}

複製到DW後改寫成JSP
<body>
<table width="200" border="1">
   <% for(int i=1;i<10;i++){%>
 <tr>
  <%    for(int j=1;j<10;j++){  %>
<TD>
  <%
        out.print(j+"*"+i+"="+i*j);
    }%>
    </TD>
  </tr>
  <%}%>
</table>
</body>

方法二
直接在DW用JSP寫
<table border="1">
<%
int i, j;
for (i=1;i<=9;i++)
{
    out.println("<tr>");
    for (j=1;j<=9;j++)
    {
        out.println("<td>" + j + "x" + i + "=" + i * j + "</td>");      
    }  
    out.println("</tr>");
}

%>
</table>

JSP網頁架構

JSP網頁架構
經由網頁伺服器(Tomcat ) :
將網頁檔(*.jsp)-->servlet原始程式碼(*.java)--->編譯成可執行檔(*.class)-->輸出成HTML。


執行環境:
JDK+Tomcat

Tomcat裝好輸入以下網址:
http://localhost:8080/
若有看到以下畫面,成功。












  • tomcat目錄下的 \conf\server.xml & web.xml為參數設定檔。
  • tomcat目錄下的\work\Catalina\localhost\_\org\apache\jsp有執行過的*.java和*.class檔。

JSP指令:  用<%     %>包覆
EX:
<%
out.println("Hello World!!");
%>

JAVA-方法丟出例外

Java程式是使用throw指令來自行丟出例外。

public class ch10_2_2 {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
        int result;
        try {
            int a = (int) (Math.random() * 10);
            int b = (int) (Math.random() * 10);
            int c = (int) (Math.random() * 10);
            result = cal(a, b, c);
            System.out.println("計算結果為: " + result);
        } catch (IllegalArgumentException e) {
            // TODO 自動產生的 catch 區塊
            System.out.println("例外說明: "+e.getMessage());
            System.out.println("例外原因: ");
            e.printStackTrace();
        } catch (ArrayIndexOutOfBoundsException e) {
            // TODO 自動產生的 catch 區塊
            System.out.println("例外說明: "+e.getMessage());
            System.out.println("例外原因: ");
            e.printStackTrace();
        }
    }

    static int cal(int a, int b, int c) throws IllegalArgumentException, ArrayIndexOutOfBoundsException{
        int index;
        int[] data = { 22, 14, 36, 68, 87 };
        if (c <= 0) {
            throw new IllegalArgumentException("C小於等於0。");
        } else {
            index = a * b / c;
            if (index >= 5) {
                throw new ArrayIndexOutOfBoundsException("索引值大於5。");
            }
        }
        return data[index];
    }
}

Java例外處理程序 、finally、try/catch

例外處理程序


public class ch10_1_1 {

    public static void main(String[] args) {
        // TODO 自動產生的方法 Stub
        int i;
        try {
            for (i = 2; i > -1; i--) {
                System.out.println("計算結果為: " + 10 / i);
            }
        } catch (ArithmeticException e) {
            // TODO 自動產生的 catch 區塊
            System.out.println("例外說明: "+e.getMessage());
            System.out.println("例外原因: ");
            e.printStackTrace();
        }
        finally{
            System.out.println("例外處理結束");
        }
        System.out.println("JAVA程式執行結束!!");
    }

}

2013年9月8日 星期日

我到底該如何選擇?!

自從四月份,從前任公司離開後,一直在思索我的人生走向。

我發覺自己興趣似乎太過廣泛,對每件事都很想嘗試,但都不疾而終。
最近很夯的Candy Crush Saga倒是很認真在玩。早上吃飯也玩、下課休息也玩、晚上回來也玩。
也常常告訴別人說:"能不玩就不要玩" ,結果自己拼命玩。像不像現今的父母對小孩的模式,政府對人民的態度。 (PS:以上純屬個人關點,沒有任何批判。)

直到昨天與朋友喝下午茶的時候,他說我很像專門寫旅遊網誌的人。他的一句話讓我萌起建立網誌的念頭  (PS: 跟我上面說的一樣,興趣廣泛 ^^!!!) ,我一直在思考要怎麼經營這個網誌可以讓我持之以恆。讓它成為我生命中的一部份。

曾經在一個網誌上看過一段話,
「決定」沒有對錯,但永遠不要後悔自己所做的決定。
當下,心中有如被震醒。過往的我,一直排徊在要與不要之間,很怕每個決定都是不好的。所以當自己決定好一件事時,心裡的小孩就會對我說:這是對的嗎?是不是要選擇另外一個。任何決定對我而言,似乎都可以隨時翻盤一般 (賭博都沒那麼輕易翻盤^^!!!)

直到這一句話給了我新的思維,也讓我學習到新的思考模式。很多產品在生產時需要事前分析規劃,就如同我開這個網誌一般,將最好與最壞的情況打量一下,其實答案就呼之欲出。當自己決定做這件事就不要在去思考這個決定到底好不好,而是要努力去做到最好。