Vestibulum urna ipsum

product Detail | Add to cart

Aliquam sollicitudin

product Detail | Add to cart

Pellentesque habitant

product Detail | Add to cart

在Eclipse 下以 Tomcat server 進行 MySQL database 存取之 WTP (Web Tools Platform) Project的偵錯與開發


在Eclipse 下以 Tomcat server 進行 MySQL database 存取之 WTP (Web Tools Platform) Project的偵錯與開發







1.環境


  • a. Eclipse : 請至 Eclipse 下載適當之 J2EE版 Eclipse IDE.

    下載之 Eclipse IDE 解壓縮後, 在其 eclipse 目錄下即有執行檔可直接執行


  • b. Tomcat : 請至 Tomcat 下載適當之 Tomcat server 進行安裝.

    (在此我下載 apache-tomcat-6.0.28-windows-x86.zip 下載後解壓縮至 c:\Program Files\Java

    解壓縮後, 請複製一份 MySQL 之 library (mysql-connector-java-5.1.x-bin.jar) 到Tomcat安裝目錄
    下之lib目錄)


  • c. MySQL : 請至 MySQL 下載適當之 MySQL server 進行安裝.
    (建立 localhost:3306/user 之 database, id 為 root , pw 請自行設定, 以上參數, 在建立 database

    connection 時, 會用到請依你的設定, 正確填入. 另外請再建立一 table, member 內含
    sno,name,id,pw四個項目, 以存取資料)


  • 回頁首


    2. 設定 WTP


    選取 Windows -> Preferences -> Server -> Runtime Environments -> Add 以設定 WTP 使用 Tomcat


















    選擇你的 Tomcat 版本





    設定 Tomcat 安裝之目錄



    按 Finish 及 OK 後, 你已可以 Tomcat 執行 WTP project 了



    回頁首



    3. 建立 Dynamic Web Project


  • a. 建立專案

  • b. 建立與專案同名之 Package

  • c. 建立 Server side utilities

  • d. 建立 Client side utilities

  • e. 修改 web.xml

  • f. 偵錯與執行


  • a. 建立專案


    選取 File -> New -> Other -> Web -> Dynamic Web Project. 以建立新的 "Dynamic Web Project"





    建立專案名稱 testwtp




    按 Finsh 後, 一個新的 "Dynamic Web Project" 就建立了



    b. 建立與專案同名之 Package


    選取 File -> New -> Other -> Java -> Package (不一定要經 Other, 但是所有可建立的東西在此都可找到) 以建立與專案同名之 Package



    c. 建立 Server side utilities


    我在 testwtp 下, 建了兩個 Package






    在 member 下, 放了 AddMemberControlServlet.java, AddMemberControl.java 及 Member.java 三個程式


    在 testwtp.member 下, 按右鍵 New -> Other -> Web -> Servlet 以建立Servlet




    建立Java Class 如同一般 Java 程式




    下面是此專案, Sever side utilities 之參考程式碼


    Member.java 程式碼:


    package testwtp.member;

    public class Member {
    private String name;

    private String id;

     private String pw;

     public Member(String name, String id, String pw) {
    this.name = name;
    this.id = id;
    this.pw = pw;

     }

     public String getName() {
    return this.name;
    }

     public void setName(String name) {
    this.name = name;
    }

    public String getId() {
    return this.id;
    }

     public void setId(String id) {
    this.id = id;
    }

     public String getPW() {
    return this.pw;
    }

     public void setPW(String id) {
    this.id = pw;
    }
    }



    AddMemberControl.java 程式碼:


    package testwtp.member;

    import testwtp.Utility.MemberDAO;
    import testwtp.member.Member;

    public class AddMemberControl {
    public boolean addMember(String name, String id, String pw) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
    // String id = req.getParameter("id");
    // String pw = req.getParameter("pw");

     Member newMember = new Member(name,id, pw);
    MemberDAO mDAO = new MemberDAO();

     if (mDAO.addMember(newMember)) {
    return true;
    } else {
    return false;
    }

     }
    }




    AddMemberControlServlet.java 程式碼:


    package testwtp.member;

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import testwtp.member.AddMemberControl;

    /**
    * Servlet implementation class AddMemberControlServlet
    */
    public class AddMemberControlServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public AddMemberControlServlet() {
    super();
    // TODO Auto-generated constructor stub
    }

     /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    }

     /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String name = req.getParameter("name");
    String id = req.getParameter("id");
    String pw = req.getParameter("pw");

     // Member newMember = new Member(id,pw);
    AddMemberControl mAdd = new AddMemberControl();

     try {
    if (mAdd.addMember(name, id, pw)) {
    resp.sendRedirect("ResultPage.jsp?msg=1");
    } else {
    resp.sendRedirect("ResultPage.jsp?msg=0");
    }
    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }




    MemberDAO.java 程式碼:

    package testwtp.Utility;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;

    import testwtp.member.Member;

    public class MemberDAO {
    private Connection con;

     private void buildConn(String host, String id, String pw)
    throws InstantiationException, IllegalAccessException,
    ClassNotFoundException, SQLException {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://" + host, id, pw);
    }

     private Statement getStatement() throws SQLException {
    return con.createStatement();
    }

     private boolean closeConn() throws SQLException {
    this.con.close();
    return true;
    }

     public boolean addMember(Member member) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
    //1. 取得member的資料

    String name=member.getName();
    String id=member.getId();
    String pw=member.getPW();

    //2. 建立資料庫連線
    try {
    buildConn("127.0.0.1:3306/user", "root", "123456");
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Statement stmt=null;
    try {
    stmt = getStatement();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    //A. 先給定查詢該使用者是否存在之SQL語法
    String qsql="select * from member where id='"+id+"'";
    //B. 判斷查詢結果,若存在,回傳False,不存在,繼續新增使用者
    try {
    if(stmt.executeQuery(qsql).next()){
    closeConn();
    return false;
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    Statement stmt2=null;
    try {
    stmt2 = getStatement();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //3. 建立SQL insert語法 (v)
    String sql="insert into member(name,id,pw) values('"+name+"','"+id+"','"+pw+"')";
    //4. 上傳資料
    try {
    stmt2.executeUpdate(sql);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //5. 回傳成功與否
    try {
    closeConn();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return true;
    }
    }

     


    d. 建立 Client side utilities


    Client side utilities 之所有檔案要放在資料夾 WebComtent 下, 在此我建了 AddMemberPage.jsp 及 ResultPage.jsp


    在 WebComtent 下, 按右鍵 New ->JSP 以建立 JSP 檔



    下面是此專案, Client side utilities 之參考程式碼


    AddMemberPage.jsp 程式碼:


    <%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
    <!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>
    <form action="AddMemberControlServlet" method ="post">
    <p align="center">
    <font size="5"><b>請輸入:</b></font>
    </p>
    <p> </p>
    <p align="center">
    <br>
    姓名: <input type="text" name="name" size="20"><br>
    帳號: <input type="text" name="id" size="20"><br>
    密碼: <input type="password" name="pw" size="20"><br>
    <input type="submit" value="確認">
    <input type="reset" value="取消">
    </p>
    </form>
    </body>
    </html>

    ResultPage.jsp 程式碼:


    <%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
    <!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>
    <p><a href="AddMemberPage.jsp">回首頁</a></p>
    <%
    String msg1 = request.getParameter("msg");
    if (msg1.equals("1")) {
    out.print("Add successful!!");
    } else {
    out.print("Add failed!!");
    }
    %>
    </body>
    </html>


    e. 修改 web.xml


    修改 WebContent/WEB-INF/web.xml 以使 AddMemberPage.jsp 成為 Welcome page, 參考程式碼如下


    <?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" id="WebApp_ID" version="2.5">
    <display-name>testwtp</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>AddMemberPage.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
    <description></description>
    <display-name>AddMemberControlServlet</display-name>
    <servlet-name>AddMemberControlServlet</servlet-name>
    <servlet-class>testwtp.member.AddMemberControlServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>AddMemberControlServlet</servlet-name>
    <url-pattern>/AddMemberControlServlet</url-pattern>
    </servlet-mapping>
    </web-app>


    f. 偵錯與執行


    以 Run ->Debug As ->Debug on Server 來執行程式之偵錯






    執行 Debug 時, Eclipse 之視窗如下, 但有時不會顯示, 需用 外部 Browser 檢視 http://localhost:8080/testwtp/AddMemberPage.jsp




    以 Run ->Run As ->Run on Server 來執行程式, 若程式正確則可以, Exoport Web Archive


    回頁首


    4. 建立 Web Archive


    在專案名稱上點擊滑鼠右鍵, Export -> WAR file 以 建立 Web Archive



    Destination 依個人之選定


    回頁首

    我的Java程式學習心得

    JAVA程式的基本架構 :


    0. 所屬套件: (需在最前一行)

    package Flower ;

    I . 程式註解

    /* 藍色部分非必要 */

    II. 引用套件:

    import java .lang.* ;

    III. 建立類別:

    (能見度修飾子)
    存取權限 描述詞 類別 類別名稱 生修飾 基礎類別名稱{ }
    public final class Iris extends Flower { }
    package abstract

    III-1 建立類別成員:

    III-1.a 屬性:

    存取權限 描述詞 資料型別 變數(屬性)名稱 ;
    public static int sepallength ;
    protected final :
    package double
    private Class

    III-1.b 建構子:

    存取權限 類別名稱(參數){ }
    public Iris (String sl, String sw, String pl, String pw, String t){ }
    protected
    package
    private

    參數: 同方法參數格式

    III-1.c 方法:

    存取權限 描述詞 回傳資料型別 方法名稱(參數){ }
    public static void open(int seconds){ }
    protected final int
    package abstract :
    private double
    Class

    參數: 資料型別 變數, 資料型別 變數, 資料型別 變數, ….
    int A, String s, Class Obj, ….




    ˙ 基本上類別是沒有實體(instance)的,但是若其成員被描述宣告具
    static特性時,該成員即擁有實體,具有實體就可被使用,使用方式為:

    類別名稱.成員名稱(參數);

    ˙ 若要產生具某類別特性之實體, 需用下列方式

    (物件)
    類別名稱 類別實體名稱 = 描述詞 建構子;
    Iris iris[0] = new Iris(data[0],data[1], data[2],data[3],data[4]);

    ˙ 上面建立了 iris[0] 這個物件(實體), 它屬於Iris類別

    ˙ 繼承後衍生類別之成員相較於基礎類別成員的特性:

    屬性: 增加, 遮蔽(hide)
    方法: 增加, 遮蔽(hide),多載(Overload),覆寫(Override)

    ˙ 方法名稱及參數來判別是否Overload或Override.
    若參數不同則為Overload, 若參數相同則為Override,
    Override時其回傳資料型別亦必須相同.

    ˙ 變數(屬性)名稱相同就可遮蔽(hide)

    ˙ 靜態方法僅可被遮蔽(hide)

    ˙ Overload 可視為另一種method

    ˙ Override 則為同一種method之改寫(覆寫)

    ˙ 在向上資料型別轉換(Upcasting)時,被遮蔽之基礎類別成員可參考到,
    被衍生類別覆寫者則僅能以衍生者為參考.

    ˙ 不可以在衍生類別定義與基礎類別靜態方法標記相同的實體方法
    或者定義與基礎類別之實體方法標記相同的靜態方法

    ˙ 標記相同 : 方法名稱及參數均相同

    發文測試

    部落格今天開張了