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: 跟我上面說的一樣,興趣廣泛 ^^!!!) ,我一直在思考要怎麼經營這個網誌可以讓我持之以恆。讓它成為我生命中的一部份。

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

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