السلام عليكم ورحمة الله و بركاته,
سوف أتحدث عن كيفيه إستخدام eclipse لبناء مشروع ويب بإستخدام jsp/servlet على طريقة ال Model-View-Controller
١- قم بتزيل eclipse من هنا : Eclipse IDE for Java EE Developers
2- قم بتحميل tomcat من هنا
٣- قم بفك ضغظ كلا الملفين في مجلد من إختيارك, و لنقل ل eclipse
/home/mhewedy/programs/eclipse_ee
و ل tomcat :
/home/mhewedy/programs/tomcat6.0.26
(ملحوظه: قم بتنصيب mysql إذ لم يكن منصب لديك, أو أي برنامج إدارة قواعد بيانات أخر, ولكن, قم بتغير ال url, user, password على حسب البرنامج الذي سوف تستخدمه)
٤- إذهب إلى المجلد الذي يحتوي على eclipse و قم بالنقر على (تشغيل) الملف eclipse (أو eclipse.exe إذا كنت تستخدم ويندوز)
٥- لإنشاء تطبيق ويب جديد, إختر File , ثم New ثم Other ثم إكتب في مربع النص dynamic , ثم إختر Dynamic Web Project , إضغط Next
6- أدخل إسم لمشروعك, و ليكن, MyWebApp
٧- تحت Target runtime إنقر New, إختر Apache tomcat 6.0 , ثم إضغط Next, إضغط Browse , ثم إختر المسار الذي يحوي tomcat, إضغط finish
٩- نحن مازلنا في معالج إنشاء تطبيق جديد, إضغط Next, Next, Finish.
١٠- تعالي على WebContent و إضغط بزر الفأره الأيمن و إختر New ثم JSP ثم أدخل إسم , مثلا index.jsp ثم إضغط finish
(تأكد من أن الصفحه سوف يتم إنشاؤها داخل المجلد : MyWebApp/WebContent )
١١ -سيكون لدينا تطبيق بالشكل التالي:
دعنا نتحدث عن مشروعنا, المشروع عباره عن صفحة تسجيل عاديه, يقوم المستخدم بتسجيل بياناته لدينا,,,
هذه هي شفرة قاعدة البيانات:
create database register; use register; create table user( id int not null AUTO_INCREMENT PRIMARY KEY, username varchar(50) not null, password varchar(50) not null, fullname varchar(200), email varchar(50) );
قم بتنفيذها على قاعدة بياناتك
بعد ذلك, تعالي لنصمم البرنامج,
أولا لنبدأ بال Model :
سوف نمثل بيانات المستخدم بالفئة User , قم بإنشاء صنف جديد و سمه User , و إكتب به الشفره التاليه:
package com.forat.model;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String username;
private String password;
private String fullName;
private String email;
public User() {
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}تعالي معا لنكتب الكود الذي سوف يخزن الكائن من نوع User إلي قاعدة البيانات:
أولا , هذه هي العمليات التي سوف نقوم بتنفيذها على أي كائن عندنا في تطبيقنا, قمت بوضعها داخل واجهه لكي تكون بمثابة عقد يقوم بإبرامه أي كائن يريد أن يُخزن في قاعدة البيانات:
package com.forat.model;
import java.util.List;
public interface DAO<T> {
public void persist(T o);
public T find (int id);
public List<T> findAll();
public void remove(int id);
public void update(T o);
}و لأننا نريد أن نخزن الكائن User, سوف نوقع هذا العقد:
package com.forat.model;
import java.util.List;
public class UserDAO implements DAO<User> {
@Override
public void persist(User o) {
}
@Override
public User find(int id) {
return null;
}
@Override
public List<User> findAll() {
return null;
}
@Override
public void remove(int id) {
}
@Override
public void update(User o) {
}
}سوف نقوم بكتابة الكود لهذه الفئة لاحقا, ولكن دعنا أولا نقوم بكتابة الكود الذي سوف يتعامل مباشرة مع قاعدة البيانات:
بداية, قم بتحميل ال jdbc driver الخاص ب mysql من هنا
ثم ضعه في مشروعك داخل المجلد
MyWebApp/WebContent/WEB-INF/lib
بالنسبه للكود الخاص بال JDBC,
قم بإنشاء الثلاث فئات التاليه:
package com.forat.db;
import java.sql.Connection;
public class PooledConnection {
private Connection connection;
private boolean inUse = false;
public PooledConnection(Connection connection) {
this.connection = connection;
}
/**
*
* @return
*/
public synchronized Connection getConnection() {
if (!inUse) {
inUse = true;
return connection;
}
return null;
}
Connection _getUnderlyingConn() {
return connection;
}
public synchronized void releaseConnection() {
inUse = false;
}
}package com.forat.db;
import java.sql.Connection;
import java.sql.DriverManager;
class ConnectionFactory {
static Connection createConnection() {
try {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/register", "root", "system");
}catch(Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex.getMessage(), ex);
}
}
static {
try {
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex.getMessage(), ex);
}
}
}package com.forat.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.forat.model.User;
/**
* This class needs extensive testing before used in real applications
* @author mohammed
*
*/
public class Manager {
private static List<PooledConnection> connectionPool = new ArrayList<PooledConnection>();
public static synchronized Connection getConnection() {
for (PooledConnection pconn : connectionPool) {
Connection conn = pconn.getConnection() ;
if (conn != null)
return conn;
}
PooledConnection pconn = new PooledConnection(ConnectionFactory.createConnection());
connectionPool.add(pconn);
return pconn.getConnection();
}
public static synchronized void closeConnection(Connection conn) {
for (PooledConnection pconn : connectionPool) {
if (pconn._getUnderlyingConn() == conn) {
pconn.releaseConnection();
return;
}
}
System.err.println("Connection " + conn + " Cannot be release!");
}
static {
for (int i=0; i < 10; i++) {
connectionPool.add(new PooledConnection(ConnectionFactory.createConnection()));
}
}
}, ثم تعال ثانية نرجع للفئة UserDAO لنكتب الكود للداله persist:
@Override
public void persist(User o) {
Connection conn = null;
try {
conn = Manager.getConnection();
String sql = "INSERT INTO user (username, password, fullname, email) VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, o.getUsername());
pstmt.setString(2, o.getPassword());
pstmt.setString(3, o.getFullName());
pstmt.setString(4, o.getEmail());
int result = pstmt.executeUpdate();
if (result != 1)
throw new SQLException("no row inserted!");
}catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Cannot add new User", ex);
}finally {
Manager.closeConnection(conn);
}
}و بذلك يكون الكود النهائي لهذه الفئة (UserDAO) :
package com.forat.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import com.forat.db.Manager;
public class UserDAO implements DAO<User> {
@Override
public void persist(User o) {
Connection conn = null;
try {
conn = Manager.getConnection();
String sql = "INSERT INTO user (username, password, fullname, email) VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, o.getUsername());
pstmt.setString(2, o.getPassword());
pstmt.setString(3, o.getFullName());
pstmt.setString(4, o.getEmail());
int result = pstmt.executeUpdate();
if (result != 1)
throw new SQLException("no row inserted!");
}catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Cannot add new User", ex);
}finally {
Manager.closeConnection(conn);
}
}
@Override
public User find(int id) {
return null;
}
@Override
public List<User> findAll() {
return null;
}
@Override
public void remove(int id) {
}
@Override
public void update(User o) {
}
public static void main(String[] args) {
User u = new User();
u.setUsername("Ahmed");
u.setPassword("system");
u.setEmail("ahmed.hewedy@yahoo.com");
new UserDAO().persist(u);
}
}لاحظ الدالة main , قم بتشغليها لتجرب الداله persist.
إلي الأن قمنا بعمل ال Model, ويتبقي لنا جزءئ ال View و ال Controller,
,,,
سنكمل في اللقاء القادم إن شاء الله تعالي
