2011年1月28日 星期五

Div 標籤 使用 Jquery 隱藏

要在 jQuery 影藏標籤的話,

可以使用 show(), hide() 的方式


不過若是在 div 標籤先設定 Style= " visibility:hidden;", 的屬性的話, 就會無法控制

因為 jQuery 還不能控制 DOM 裡面的標籤

不過或許可以試試$() .css 來設定

2011年1月27日 星期四

javascript 編輯軟體 komodo edit

由於記憶不太好,有時候寫好得javascript 物件會忘記,所以就找了一下有沒有相關的軟體可以自動增測寫好的程式物件。

總算找到了 komodo-edit , 使用了一下還不錯用

2011年1月26日 星期三

struts 2 首頁

如題,想要在首頁就使用 structs 2 定義的頁面 是有點問題,會顯示不出來, 網路上搜尋 struts2 index.action 就有很多結果

目前還沒全部看懂,限介紹一個簡單的方法,就是先建一個 假的首頁 ,在利用 location.href 的方式轉到真正的首頁

入以下的 index.htm


<!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>index</title>

<SCRIPT>

function Init(){
location.href= "index.action ";
}
</SCRIPT>
</head>
<body onload="Init()">

</body>
</html>



為何要那樣麻煩,在我的應用是為了要支援多國語言的首頁.

2011年1月24日 星期一

struts2 多國語言依據瀏覽器語言選項

主要參考了這篇文章 struct2 國際化

我是在GAE 上執行的 所以相關設定可以參考 轉貼 struts2 整合 Google Appengine

的設定,主要包含 下載 struts2 , web.xml 設定 , structs.xml ,ServletContextListener 和 freemarker.core.TextBlock 等步驟

要使用 struct 的多國語言,不只一種方式,這裡我介紹的是在 struts.xml 中的宣告

在 struts.xml 加入 以下的敘述


<constant name="struts.custom.i18n.resources" value="applicationResource" />


value 就是自訂的名稱, 因為 struts2 資源檔的定義格式就是 自訂的名稱_語系簡碼_國家簡碼.properties 例如: applicationResource_zh_tw.properties

修改後的 struts.xml 如下

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.devMode" value="false" />

<constant name="struts.custom.i18n.resources" value="applicationResource" />

</struts>



若在eclipse 下開發的話還可以下載 “PropEdit”(http://propedit.sourceforge.jp/eclipse/updates/)這個外掛
來源參考 Struts 2.0系列教程(四)Struts2国际化(i18n)您的应用程序




簡單的jsp 如下


<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 i18n tag example</h1>

<s:text name="hello"/>


</body>
</html>


properties 檔的設定文字必須要先轉成 unicode 的形式字串

在java中 可以呼叫native2ascii 來協助達成, native2ascii -編碼 來源檔案 目標檔案


例如
native2ascii -encoding utf8 applicationResource_zh_tw.properties applicationResource_zh_tw2.properties




加入 properties 檔 在 src 資料夾下面 如圖




就可以開始執行

結果如範例網站 ,這裡支援 俄文(ru)、繁體中文(zh_tw)、簡體中文(zh_CN)、英文(en)
http://11.latest.catontest.appspot.com/HelloWorld.jsp

要改預覽語言的方式:

IE:
工具-> 網際網路選項-> 語言


Firefox
工具->選項->內容-> 語言->選擇

2011年1月21日 星期五

轉貼 struts2 與 servlet 共用

在 web.xml 下加入以下設定, 否則 servlet 也會被 struts2 濾掉


<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

轉貼 struts2 整合 Google Appengine

簡單的說 struts2 是第二代基於Model-View-Controller (MVC)模型的web應用框架。 詳細說明就請查閱 WIKI


步驟有點繁複,我這裡只整理簡單的步驟,詳細可以看參考文件

1. 下載 struts2 ,這裡我是下載 struts-2.2.1.1-all

2. 載入以下的 jar 檔, javassist-3.7.ga.jar 這個檔要到apps\struts2-blank-2.2.1\WEB-INF\lib 這裡找
2-1. commons-fileupload-1.2.1.jar
2-2. commons-io-1.3.2.jar
2-3. commons-logging-1.0.4.jar
2-4. freemarker-2.3.16.jar
2-5. ognl-3.0.jar
2-6. struts2-core-2.2.1.jar
2-7. xwork-2.2.1.jar
2-8. javassist-3.7.ga.jar


2. 建立 java



package com

import com.opensymphony.xwork2.ActionSupport;



@SuppressWarnings("serial")

public class LoginAction extends ActionSupport{

private String userName;

private String password;

public void setUserName(String name){

userName = name;

}

public void setPassword(String pwd){

password = pwd;

}



public String execute(){

if(userName.equals("gae") && password.equals("struts2")){

addActionMessage("Welcome," + userName);

return SUCCESS;

}

addActionError("Username and Password Combination doesnot match.");

return INPUT;

}

}






3. 配置 web.xml


<?xml version="1.0" encoding="utf-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

</welcome-file-list>

</web-app>



4. 建立要使用的jsp檔案

如 login.jsp 和 home.jsp


login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=ISO-8859-1">
<title>Please login</title>
</head>
<body>
<s:actionerror/>
<s:form action="home" method="post">
<s:textfield name="username" label="UserName"></s:textfield>
<s:textfield name="password" label="Password"></s:textfield>
<s:submit name="login" value="login"></s:submit>
</s:form>
</body>
</html>



home.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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=ISO-8859-1">
<title>Home Page</title>
</head>
<body>
<s:actionmessage />

</body>
</html>



5. 在SRC 目錄下建立 structs.xml 大小寫不能變, 設定檔案的對應




<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="member" namespace="/member" extends="struts-default">
<action name="login">
<result>/login.jsp</result>
</action>
<action name="home" method="login" class="com.login.LoginAction">
<result>/home.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts>




6. 建立 ServletContextListener 避免錯誤

如下 命名為 OgnlListener , implements ServletContextListener


package com;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;



import ognl.OgnlRuntime;

public class OgnlListener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener {

public OgnlListener() {
}

public void contextInitialized(ServletContextEvent sce) {
OgnlRuntime.setSecurityManager(null);
}

public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}

public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}

public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}

public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}

public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}

public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}

}



7. 將對應的 檔案加入 web.xml宣告中



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="member" namespace="/member" extends="struts-default">
<action name="login">

<listener>
<listener-class>com.OgnlListener</listener-class>
</listener>

<result>/login.jsp</result>
</action>
</package>
</struts>



8. 建立 Package: freemarker.core, 並在下面建立 一個 TextBlock 的檔案 如下
https://docs.google.com/leaf?id=0B_JOf_Tyv_f6MzcwNDY5NTAtZTkwYS00OWUzLWJjN2ItNDhmNDNmYTg0NzQ4&hl=en


9. 完成執行GAE

參考文章:

Creating Struts2 application on Google App Engine (GAE)

在GAE中使用struts2框架

2011年1月19日 星期三

範例 javascript 日期增減

以下是簡單的範例碼: 利用先換算成豪秒,再做加減

此外也有看過setDate()方式來作增減的,不過跨月份的話用setDate()方式就會出錯


/**
* AddDate
*
* add the date
*
* param: day [in] : the day , Date() format.
* param: dadd [in] : the day diffefent , integer format.
*
*
* return: date
*
*
*
*/
function AddDate(date,dadd){

date = date.valueOf();
date = date + dadd * 24 * 60 * 60 * 1000;
date = new Date(date);
return date;
}

2011年1月17日 星期一

範例 javascript 利用JQuery日期格式轉換

想要吧 javascript 日期轉成想要的格式,如 yy-mm-dd 的樣子其實是蠻麻煩的。

不過利用 jquery 倒是簡單多了

利用以下的程式馬,就可以把日期轉換成 yyyy/mm/dd 的格式 如 2011/01/01


$.datepicker.formatDate('yy/mm/dd', new Date())


詳細可以參考JQuery的說明
這裡 yy 就是顯示4位數

範例 javascript 取得本週 日期

以下範例簡單的利用傳日一個日期物件,然後取得本週的開始日期到結束日期


AddDate 參考 範例 javascript 日期增減



function GetWeek(day)
{

var weekperiod = new Array(2);

/// 宣告起始日期
var dayweekFirst = AddDate(day,-day.getDay());


/// 宣告結束日期
var dayweekLast = AddDate(dayweekFirst 6);

//alert("today: " +day);
//alert("dayweekFirst: " +dayweekFirst);
//alert("dayweekLast: " +dayweekLast);

weekperiod[0] = dayweekFirst;
weekperiod[1] = dayweekLast;

return weekperiod;

}

2011年1月10日 星期一

轉貼 改變滑鼠鼠標

語法如下


<a style="cursor: url('游標網址')" href="連結網址">連結名稱</a>


不過實際測試怪怪的改用span tag 包起來才可以

不瞭解的可以看一下 span和div的不同


補充 可以利用 mouseover 的方式變更

在 標籤內加入 下面者段就可以, 範例是換成 pointer(手形)
onMouseOver="this.style.cursor='pointer';"

----------------------------------------
內建游標一覽
* hand:手形 (firefox 可能支援有問題)
* crosshair:精確定位「十」字形
* text:文本「I」形
* wait:等待,「沙漏」形
* default:預設箭頭
* help:幫助,帶尾箭頭
* e-resize:箭頭朝右方
* ne-resize:箭頭朝右上方
* n-resize:箭頭朝上方
* nw-resize:箭頭朝左上方
* w-resize:箭頭朝左方
* sw-resize:箭頭朝左下方
* s-resize:箭頭朝下方
* se-resize:箭頭朝右下方
* auto:自動,鼠標按照默認的狀態根據頁面上的元素自行改變樣式
* no-drop:出現帶有「禁止標示」的手形游標。原本是用來表示被拖曳的對象不容許在游標目前的位置被放下。
* not-allowed:出現「禁止標示」的游標。原本是用來表示請求的作業不容許被執行。
* pointer:與 hand 相同。
* progress:出現帶有沙漏標示的箭頭游標。原本是用來表示一件工作正在被執行中。
* row-resize:出現上下兩個箭頭,中間由橫線分隔開的游標。原本是用來表示專案或標題欄可以被垂直改變尺寸。
* all-scroll:出現上下左右四個箭頭,中間有一個圓點的游標。原本是用來表示頁面可以向上下左右任何方向捲動。
* col-resize:出現左右兩個箭頭,中間由豎線分隔開的游標。原本是用來表示專案或標題欄可以被水平改變尺寸。
* vertical-text:出現表示可編輯之垂直純文字的游標(通常是大寫字母 I 旋轉 90 度的形狀)。
* move:出現十字箭頭游標。原本是用來表示對象可被移動。
* url('游標圖檔所在的 URL'):以自選的圖檔做為游標外觀。需使用絕對或相對的 URL,來指定游標圖檔所在的位址(圖檔的副檔名 須為 .cur 或 .ani)。






參考 改變滑鼠游標圖片的語法(全)

2011年1月9日 星期日

wireshark 監聽封包心得

 wireshark 是一個封包監控的軟體,這點就不用多說了,在 wiki 中有詳細的介紹 

若要下載的話 可以參考下面的地方

阿榮福利社
官方下載


在這裡補充一下監控的心得, 最近想利用 wireshark 來監聽 機器發出的封包,(該機器沒有作業系統...)但是   wireshark  只能監聽電腦上某個特定的網路卡,

是有聽過用 hub 連結方式,讓 所有封包都能在本機網卡中間聽到,不過現在市面上找得的幾乎都是 switch 等級以上的產品.... 想不到簡單功能的東西反而找不到

再問前輩之後知道要用兩張網卡在同一台機器的方式就可以解決。

簡單的說 是 一張網卡連外,另一張網卡分享給要間聽得機器,

假設我是利用無線網路上網,所以就把無線網路設定網際網路連線共用,如下圖




接者 將機器連到有線網路的網路孔, 機器就可以利用我的無限網路上網。

wiresark 就可以利用 有線網路卡 監控 到進出 機器的封包了

Weather api

網路上提供許多查詢天氣的API ,不過在此就介紹使用過的 weather api,

  1. Yahoo weather API
  2. Google's Secret Weather API

----------------------------------------

Yahoo weather API:



其實是透過發出 HTTP GET 的請求 取得天氣的RSS 型態的資料

語法已知的有兩種:
1. Get by WOEID


http://weather.yahooapis.com/forecastrss?w=location


location 是要對應 yahoo 的 WOEID

官方說明

查WOEID 可以參考這篇 Jackbin 的懶人筆記-在桌面上顯示數位時鐘與即時天氣 - MoonyDesk

2. Get by US zip code or Location ID


http://weather.yahooapis.com/forecastrss?p=location



官方說明

取得PID 的方法

a. 先到查詢天氣的網頁 http://weather.yahoo.com/ 輸入要查的程式名稱取得天氣預報,在點右邊的RSS























b. 上方url 終究可以看到 ID 了







不過要取得 WOEID 或 ZIP code 就算是額外的工作了


------------------------

Google's Secret Weather API

就我所知道的方法,也是有兩種方式

a.  利用 城市名稱 查詢
範例 code


http://www.google.com/ig/api?weather=Mountain+View


參考
http://blog.programmableweb.com/2010/02/08/googles-secret-weather-api/

b. 利用 經緯度查詢


var strURL="http://www.google.com/ig/api?hl=zh-cn&weather=,,,"+point.y*1000000+","+point.x*1000000;




http://www.google.com/ig/api?hl=zh-tw&weather=,,,25012085,121465701

參考 
邦邦的部落格

取得經緯度的方式可以參考

http://universimmedia.pagesperso-orange.fr/geo/loc.htm

2011年1月4日 星期二

Java Http post with SSLSocket

使用 SSL 的 程式碼如下



import java.net.*;
import java.security.Security;
import java.io.*;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;


try {
String xmldata = "xx";

//Create socket
String hostname = "xxx.appspot.com";
int port = 443;
InetAddress addr = InetAddress.getByName(hostname);

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sock = (SSLSocket) factory.createSocket(hostname, port);




//Send header
String path = "/test";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
// You can use "UTF8" for compatibility with the Microsoft virtual machine.
wr.write("POST " + path + " HTTP/1.0\r\n");
wr.write("Host: deltapowermeter.appspot.com\r\n");
wr.write("Connection: close\r\n");
wr.write("Content-Type: application/xml\r\n");
wr.write("Content-Length: " + xmldata.length() + "\r\n");
wr.write("\r\n");
//Send data
wr.write(xmldata);
wr.flush();

// Response
BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
while((line = rd.readLine()) != null)
System.out.println(line);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
}

Java Http post with Socket

程式碼如下


import java.net.*;
import java.io.*;

try {
String xmldata ="QQ";

//Create socket
String hostname = "xxx.appspot.com";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
Socket sock = new Socket(addr, port);


//Send header
String path = "/powermeter/event";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
// You can use "UTF8" for compatibility with the Microsoft virtual machine.
wr.write("POST " + path + " HTTP/1.0\r\n");
wr.write("Host: deltapowermeter.appspot.com\r\n");
wr.write("Connection: close\r\n");
wr.write("Content-Type: application/xml\r\n");
wr.write("Content-Length: " + xmldata.length() + "\r\n");
wr.write("\r\n");
//Send data
wr.write(xmldata);
wr.flush();

// Response
BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
while((line = rd.readLine()) != null)
System.out.println(line);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
System.out.println("ASS");
}

ajax loading img 產生網頁

在網路上査到的網站,可以產生loading 的圖片 還可以設定顏色 算是不錯的小工具網站

網頁如下:
http://www.ajaxload.info/