2011年9月4日 星期日

考到汽車駕照了。

順利考到汽車駕照,在這邊要感謝大眾駕訓班的李淑惠教練!萬分感謝!

新北市想學開車的朋友們,若選擇大眾駕訓班的話,小弟在這邊大力推薦李淑惠教練。

李淑惠教練教學認真、很有耐心,人也很和善,且會依照學生的情況彈性調整上課時間。

各位朋友也不想花一大筆錢學開車結果遇到不認真的教練,甚至還要被罵吧!何必花錢找罪受呢?所以若是決定到大眾駕訓班學開車的朋友,請指定李淑惠教練,絕對不會讓大家失望!

注意:
有需要的朋友,要報名之前,一定要先跟李淑惠教練聯絡喔! 不然沒先連絡而直接去櫃檯報名,櫃檯會隨機排個教練而不一定會是李淑惠教練。

聯絡方式:

       李淑惠 教練
       手機:0930-814523
       MSN:cwlee23@hotmail.com
       部落格:http://www.wretch.cc/blog/car112
       大眾駕訓班網址:http://www.dajun.com.tw/

2011年7月11日 星期一

Google App Engine 搭配 Struts 2

最近開始研究 Google App Engine 的 Java 版本,就想試試看 Struts 2 能不能順利整合。

開發環境:
1.Eclipse IDE for Java EE Developers Windows 32 Bit。
2.Google Plugin for Eclipse 3.7
3.Struts 2.2.3

Eclipse + Google Plugin for Eclipse 安裝方法請參考 Google 的說明:說明
P.S. 我有檢查過 Eclipse 的版本,推測應該是 3.7 版,所以 Google Plugin for Eclipse 的連結也改成3.7。

現在開始整合 Struts 2,如下步驟:
  1. 將 Struts 2 的壓縮檔解壓,然後在 lib 資料夾內找到以下 jar 檔並複製:
    P.S. 版本會因你使用的 Struts 2 版本不同而有所差異
    • commons-fileupload-1.2.2.jar

    • commons-io-2.0.1.jar

    • commons-lang-2.5.jar

    • commons-logging-1.1.1.jar

    • javassist-3.11.0.GA.jar

    • ognl-3.0.1.jar

    • struts2-core-2.2.3.jar

    • xwork-core-2.2.3.jar

  2. 將 jar 檔貼到專案的 war/WEB-INF/lib/ 底下,如圖:


  3. 設定專案的 Properties,選擇 Java Build Path > Libraries > Add JARs > 展開該專案並找到步驟二貼上的 jar 檔 > 選取步驟二貼上的 jar 檔並按下 OK,如圖:







  4. 設定專案的 Properties,展開 Google > 選取 Web Application > Add > 選取所有 jar 檔並按下 OK,如圖:



  5. 在專案的 war/ 底下新增 index.jsp 與 HelloWorld.jsp 兩個檔案:

    index.jsp:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" session="false" %>
    <%@ 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>Basic Struts 2 Application - Welcome</title>
    </head>
    <body>
    <h1>Welcome To Struts 2!</h1>
    <p><a href="<s:url action='hello'/>">Hello World</a></p>
    </body>
    </html>

    HelloWorld.jsp:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1" session="false" %>
    <%@ 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>Hello World!</title>
    </head>
    <body>
    <h2><s:property value="messageStore.message" /></h2>
    </body>
    </html>


  6. 在專案 src/sample/ 目錄底下新增一個 InitListener.java:
    P.S. sample 是我設定的 Package,此處請依照你設定的 Package 去更改。
    P.S. 若不是使用 GAE 時是無需加上這個 Listener 的,至於為何要加上這個 Listener 呢?請看:詳細說明
    package sample;

    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 InitListener implements ServletContextListener,
    HttpSessionListener, HttpSessionAttributeListener {

    public InitListener() {
    }

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

    public void contextDestroyed(ServletContextEvent arg0) {
    }

    public void sessionCreated(HttpSessionEvent arg0) {
    }

    public void sessionDestroyed(HttpSessionEvent arg0) {
    }

    public void attributeAdded(HttpSessionBindingEvent arg0) {
    }

    public void attributeRemoved(HttpSessionBindingEvent arg0) {
    }

    public void attributeReplaced(HttpSessionBindingEvent arg0) {
    }
    }


  7. 找到專案 war/WEB-INF/ 底下的 web.xml,將內容更改如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>Demo</display-name>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <listener>
    <listener-class>sample.InitListener</listener-class>
    </listener>
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    </web-app>


  8. 在專案 src/sample/ 目錄底下新增 HelloWorldAction.java 與 MessageStore.java:
    P.S. 網路上抄來的範例,忘了出處日後再補上。

    HelloWorldAction.java:
    package sample;

    import com.opensymphony.xwork2.ActionSupport;

    public class HelloWorldAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    private MessageStore messageStore;

    public String execute() throws Exception {

    messageStore = new MessageStore() ;
    return SUCCESS;
    }

    public MessageStore getMessageStore() {
    return messageStore;
    }

    public void setMessageStore(MessageStore messageStore) {
    this.messageStore = messageStore;
    }

    }

    MessageStore.java:
    package sample;

    public class MessageStore {

    private String message;

    public MessageStore() {

    setMessage("Hello Struts User");
    }

    public String getMessage() {

    return message;
    }

    public void setMessage(String message) {

    this.message = message;
    }
    }


  9. 在專案 src/ 目錄底下新增 struts.xml:

    struts.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="test" extends="struts-default">
    <action name="index">
    <result>/index.jsp</result>
    </action>
    <action name="hello" class="sample.HelloWorldAction" method="execute">
    <result name="success">/HelloWorld.jsp</result>
    </action>
    </package>
    </struts>


  10. 執行專案後在瀏覽器輸入網址可看到結果如下: