REG - Emlak
Real Estate Management
Kütüphaneler
javax.mail-1.6.1.jar activation-1.1.jar JSTL 1.2.1 - jstl-api.jar JSTL 1.2.1 - jstl-impl.jar Spring Framework 4.0.1 JDK 1.8
Gereklilikler
<context-param>
1
<param-name>jdbcURL</param-name>
2
<param-value>jdbc:mysql://localhost:3306/emlak_project</param-value>
3
</context-param>
4
Mysql bağlantısını oluşturabilmek için web.xml'e eklenmelidir.
<context-param>
1
<param-name>host</param-name>
2
<param-value>smtp.gmail.com</param-value>
3
</context-param>
4
Kullanıcıların email yollayabilmeleri için kullanılan parametredir.
<servlet>
1
<servlet-name>dispatcher</servlet-name>
2
<servlet-class>org.springframework.web.servlet.DispatcherServlet</
3
<load-on-startup>2</load-on-startup>
4
</servlet>
5
Servletin ismini sınıfını açılış sırasını gösterir
<listener>
1
<listener-class>org.springframework.web.context.ContextLoaderListe 2
</listener>
3
SQL Scripti
Emlak_projesi emlak_projesi.sql - 4KB
Sınıf Açıklamaları
UserDAO
package login;
1 2
import java.sql.*;
3 4
public class UserDAO { 5
6
public User checkLogin(String email, String password) throws SQL 7
ClassNotFoundException { 8
String jdbcURL = "jdbc:mysql://localhost:3306/emlak_project"
9
String dbUser = "root";
10
String dbPassword = "admin";
11 12
Class.forName("com.mysql.jdbc.Driver");
13
Connection connection = DriverManager.getConnection(jdbcURL, 14
String sql = "SELECT * FROM user WHERE email = ? and passwor 15
PreparedStatement statement = connection.prepareStatement(sq 16
statement.setString(1, email);
17
statement.setString(2, password);
18 19
ResultSet result = statement.executeQuery();
20 21
User user = null;
22 23
if (result.next()) { 24
user = new User();
25
user.setFullname(result.getString("fullname"));
26
user.setEmail(email);
27
} 28
29
connection.close();
30 31
return user;
32
} 33
} 34 35
AdminDAO
Kullanıcı tarafından girilen oturum açma bilgilerini veritabanındaki verilerle karşılaştıran bir yöntemdir.
package login;
1 2
import java.sql.*;
3 4
public class AdminDAO { 5
6
public Admin checkLogin(String email, String password) throws SQ 7
ClassNotFoundException { 8
String jdbcURL = "jdbc:mysql://localhost:3306/emlak_project"
9
String dbUser = "root";
10
String dbPassword = "admin";
11 12
Class.forName("com.mysql.jdbc.Driver");
13
Connection connection = DriverManager.getConnection(jdbcURL, 14
String sql = "SELECT * FROM admin WHERE email = ? and passwo 15
PreparedStatement statement = connection.prepareStatement(sq 16
statement.setString(1, email);
17
statement.setString(2, password);
18 19
ResultSet result = statement.executeQuery();
20 21
Admin admin = null;
22 23
if (result.next()) { 24
admin = new Admin();
25
admin.setFullname(result.getString("fullname"));
26
admin.setEmail(email);
27
} 28
29
connection.close();
30 31
return admin;
32
} 33
} 34 35
Admin kullanıcıs tarafından girilen oturum açma bilgilerini veritabanındaki verilerle karşılaştıran ve veritabanında böyle bir veri var mı yok mu karşılaştıran bir yöntemdir.
EmlakDAO
package login;
1 2
import java.sql.Connection;
3
import java.sql.DriverManager;
4
import java.sql.PreparedStatement;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.sql.Statement;
8
import java.util.ArrayList;
9
import java.util.List;
10 s 11
public class EmlakDAO { 12
private String jdbcURL;
13
private String jdbcUsername;
14
private String jdbcPassword;
15
private Connection jdbcConnection;
16 17
public EmlakDAO(String jdbcURL, String jdbcUsername, String jdbcPa 18
this.jdbcURL = jdbcURL;
19
this.jdbcUsername = jdbcUsername;
20
this.jdbcPassword = jdbcPassword;
21 } 22 23 24 25
protected void connect() throws SQLException { 26
if (jdbcConnection == null || jdbcConnection.isClosed()) { 27
try { 28
Class.forName("com.mysql.jdbc.Driver");
29
} catch (ClassNotFoundException e) { 30
throw new SQLException(e);
31
} 32
jdbcConnection = DriverManager.getConnection(
33
jdbcURL, jdbcUsername, jdbcPassword);
34
} 35
} 36 37
protected void disconnect() throws SQLException { 38
if (jdbcConnection != null && !jdbcConnection.isClosed()) { 39
jdbcConnection.close();
40
} 41
} 42 43
public boolean insert1Emlak(Emlak emlak) throws SQLException { 44
String sql = "INSERT INTO emlak (il, ilce, fiyat, ozellik) VALUE 45
connect();
46
47
PreparedStatement statement = jdbcConnection.prepareStatement(sq 48
statement.setString(1, emlak.getIl());
49
statement.setString(2, emlak.getIlce());
50
statement.setFloat(3, emlak.getFiyat());
51
statement.setString(4, emlak.getOzellik());
52 53
boolean rowInserted = statement.executeUpdate() > 0;
54
statement.close();
55
disconnect();
56
return rowInserted;
57 } 58 59
public List<Emlak> listAllEmlak() throws SQLException { 60
List<Emlak> listEmlak = new ArrayList<>();
61 62
String sql = "SELECT * FROM emlak";
63 64
connect();
65 66
Statement statement = jdbcConnection.createStatement();
67
ResultSet resultSet = statement.executeQuery(sql);
68 69
while (resultSet.next()) { 70
int id = resultSet.getInt("idemlak");
71
String il = resultSet.getString("il");
72
String ilce = resultSet.getString("ilce");
73
float fiyat = resultSet.getFloat("fiyat");
74
String ozellik = resultSet.getString("ozellik");
75
76
Emlak emlak = new Emlak(id, il, ilce, fiyat, ozellik);
77
listEmlak.add(emlak);
78
} 79
80
resultSet.close();
81
statement.close();
82 83
disconnect();
84 85
return listEmlak;
86 } 87 88
public boolean delete1Emlak(Emlak emlak) throws SQLException { 89
String sql = "DELETE FROM emlak where idemlak = ?";
90 91
connect();
92 93
PreparedStatement statement = jdbcConnection.prepareStatement(sq 94
statement.setInt(1, emlak.getId());
95 96
boolean rowDeleted = statement.executeUpdate() > 0;
97
statement.close();
98
disconnect();
99
return rowDeleted;
100 } 101 102
public boolean update1Emlak(Emlak emlak) throws SQLException { 103
String sql = "UPDATE emlak SET il = ?, ilce = ?, fiyat = ?, ozel 104
sql += " WHERE idemlak = ?";
105
connect();
106 107
PreparedStatement statement = jdbcConnection.prepareStatement(sq 108
statement.setString(1, emlak.getIl());
109
statement.setString(2, emlak.getIlce());
110
statement.setFloat(3, emlak.getFiyat());
111
statement.setString(4, emlak.getOzellik());
112
statement.setInt(5, emlak.getId());
113 114
boolean rowUpdated = statement.executeUpdate() > 0;
115
statement.close();
116
disconnect();
117
return rowUpdated;
118 } 119 120
public Emlak getEmlak(int id) throws SQLException { 121
Emlak emlak = null;
122
String sql = "SELECT * FROM emlak WHERE idemlak = ?";
123 124
connect();
125 126
PreparedStatement statement = jdbcConnection.prepareStatement(sq 127
statement.setInt(1, id);
128 129
ResultSet resultSet = statement.executeQuery();
130 131
if (resultSet.next()) { 132
String il = resultSet.getString("il");
133
String ilce = resultSet.getString("ilce");
134
float fiyat = resultSet.getFloat("fiyat");
135
String ozellik = resultSet.getString("ozelli 136
137
emlak = new Emlak(id , il, ilce, fiyat, ozellik);
138
} 139
140
resultSet.close();
141
statement.close();
142 143
return emlak;
144 } 145 146 147
} 148
149
Veritabanındaki emlak tablosu için CRUD (Oluşturma, Okuma, Güncelleme, Silme) işlemleri sağlayan bir Veri Erişim Katmanı (DAO) sınıfı uygulamamız gerekir.
Gördüğünüz gibi, JDBC bağlantı bilgisi kurucusu aracılığıyla bu sınıfa enjekte edilir. Ve aşağıdaki yöntemler CRUD işlemleri içindir:
Oluştur: insertEmlak(Mülk) - bu , emlak tablosuna yeni bir satır ekler.
Oku: listAllEmlak () - bu tüm satırları alır; ve getEmlak (id) - birincil anahtar değerine (ID) göre belirli bir satırı döndürür.
Güncelleme: updateEmlak (Mülk) - bu, veritabanındaki mevcut bir satırı günceller.
Sil: deleteEmlak (Mülk) - bu, birincil anahtar değerine (ID) dayalı olarak veritabanındaki
mevcut bir satırı kaldırır.
CreateDAO
package login;
1 2
import java.sql.Connection;
3
import java.sql.DriverManager;
4
import java.sql.PreparedStatement;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.sql.Statement;
8
import java.util.ArrayList;
9
import java.util.List;
10 11
public class CreateDAO { 12
private String jdbcURL;
13
private String jdbcUsername;
14
private String jdbcPassword;
15
private Connection jdbcConnection;
16 17
public CreateDAO(String jdbcURL, String jdbcUsername, String jdbcP 18
this.jdbcURL = jdbcURL;
19
this.jdbcUsername = jdbcUsername;
20
this.jdbcPassword = jdbcPassword;
21 } 22 23
CreateDAO() { 24
throw new UnsupportedOperationException("Not supported yet."
25
} 26
27
protected void connect() throws SQLException { 28
if (jdbcConnection == null || jdbcConnection.isClosed()) { 29
try { 30
Class.forName("com.mysql.jdbc.Driver");
31
} catch (ClassNotFoundException e) { 32
throw new SQLException(e);
33
} 34
jdbcConnection = DriverManager.getConnection(
35
jdbcURL, jdbcUsername, jdbcPassword);
36
} 37
} 38 39
protected void disconnect() throws SQLException { 40
if (jdbcConnection != null && !jdbcConnection.isClosed()) { 41
jdbcConnection.close();
42
} 43
} 44 45
public boolean insertUser(User user) throws SQLException { 46
String sql = "INSERT INTO user (email,password,fullname) VALUES 47
connect();
48 49
PreparedStatement statement = jdbcConnection.prepareStatement(sq 50
statement.setString(2, user.getEmail());
51
statement.setString(3, user.getPassword());
52
statement.setString(1, user.getFullname());
53 54
boolean rowInserted = statement.executeUpdate() > 0;
55
statement.close();
56
disconnect();
57
return rowInserted;
58 } 59 60
public List<User> listAllUser() throws SQLException { 61
List<User> listUser = new ArrayList<>();
62 63
String sql = "SELECT * FROM user";
64 65
connect();
66 67
Statement statement = jdbcConnection.createStatement();
68
ResultSet resultSet = statement.executeQuery(sql);
69 70
while (resultSet.next()) { 71
int id = resultSet.getInt("id");
72
String email = resultSet.getString("email");
73
String password = resultSet.getString("password");
74
String fullname = resultSet.getString("fullname");
75
76
User user = new User(id, email, password, fullname);
77
listUser.add(user);
78
} 79
80
resultSet.close();
81
statement.close();
82 83
disconnect();
84 85
return listUser;
86 } 87 88 89 90 91 92
public User getCreate(int id) throws SQLException { 93
User user = null;
94
String sql = "SELECT * FROM user WHERE id = ?";
95 96
connect();
97
98
PreparedStatement statement = jdbcConnection.prepareStatement(sq 99
statement.setInt(1, id);
100 101
ResultSet resultSet = statement.executeQuery();
102 103
if (resultSet.next()) { 104
String email = resultSet.getString("email");
105
String password = resultSet.getString("password");
106
String fullname = resultSet.getString("fullname");
107
108
user = new User(id, email, password, fullname);
109
} 110
111
resultSet.close();
112
statement.close();
113 114
return user;
115 } 116 117
User checkLogin(String email, String password) { 118
throw new UnsupportedOperationException("Not supported yet."
119
} 120
} 121 122
Veritabanındaki user tablosu için CRUD (Oluşturma, Okuma) işlemleri sağlayan bir Veri Erişim Katmanı (DAO) sınıfı uygulamamız gerekir. Kayıt ol sayfasında kullanıcı
oluşturulduğu zaman veritabanına kaydeder.
EmlakList
<center>
1
<h2>Emlak Yönetimi</h2>
2
<h2>
3
<a href="new1" style="background-color:buttonhighlight">Ye 4
5
<a href="list" style="background-color:buttonhighlight">Mü 6
<br></br>
7
<a href="index.jsp" style="color:white">ANASAYFA</a>
8
9
</h2>
10
</center>
11
<div align="center">
12
<table border="1" cellpadding="5" >
13
<caption><h2>List of Emlak</h2></caption>
14
<tr style="background-color:burlywood">
15
<th>ID</th>
16
<th>IL</th>
17
<th>ILCE</th>
18
<th>FIYAT</th>
19
<th>OZELLIK</th>
20
</tr>
21
<c:forEach var="emlak" items="${listEmlak}">
22
<tr style="background-color:buttonhighlight">
23
<td style="background-color:burlywood"><c:out va 24
<td><c:out value="${emlak.il}" /></td>
25
<td><c:out value="${emlak.ilce}" /></td>
26
<td><c:out value="${emlak.fiyat}" /></td>
27
<td><c:out value="${emlak.ozellik}" /></td>
28
29
<td style="background-color:burlywood">
30
<a style="background-color:goldenrod" href="ed 31
32
<a style="background-color:goldenrod" href="de 33
</td>
34
</tr>
35
</c:forEach>
36
</table>
37
</div>
38
Bu JSP sayfasında, emlak tablo kayıtlarını veritabanından görüntülemek için JSTL
kullanıyoruz. ListEmlak nesnesi, daha sonra oluşturacağımız bir sunucu uygulamasından
geçirilecektir.
EmlakForm
<div align="center">
1
<c:if test="${emlak != null}">
2
<form action="update1" method="post">
3
</c:if>
4
<c:if test="${emlak == null}">
5
<form action="insert1" method="post">
6
</c:if>
7
<table border="1" cellpadding="5">
8
9
<c:if test="${emlak != null}">
10
<input type="hidden" name="id" value="<c:out value='${
11
</c:if>
12
<tr>
13
<th style="color:white"> IL: <br></br></th>
14
<td>
15
<input type="text" name="il" size="45"
16
value="<c:out value='${emlak.il}' />"
17
/> <br></br>
18
</td>
19
</tr>
20
<tr>
21
<th style="color:white"> ILCE: <br></br></th>
22
<td>
23
<input type="text" name="ilce" size="45"
24
value="<c:out value='${emlak.ilce}' />"
25
/> <br></br>
26
</td>
27
</tr>
28
<tr>
29
<th style="color:white"> FIYAT: <br></br></th>
30
<td>
31
<input type="text" name="fiyat" size="45"
32
value="<c:out value='${emlak.fiyat}' />"
33
/> <br></br>
34
</td>
35
</tr>
36
<tr>
37
<th style="color:white"> OZELLIK: <br></br></th>
38
<td>
39
<input type="text" name="ozellik" size="45"
40
value="<c:out value='${emlak.ozellik}' />"
41
/> <br></br>
42
</td>
43
</tr>
44
<tr>
45
<td colspan="2" align="center">
46
<input type="submit" value="Save" />
47
</td>
48
</tr>
49
</table>
50
51
</div>
52
Bu sayfa, hem yeni bir mülk oluşturmak hem de mevcut bir mülkü düzenlemek için
sunulacaktır. Düzenleme modunda, sunucu uygulaması isteğe bir Emlak nesnesi iletir ve bu nesnenin kullanılabilir olup olmadığını belirlemek için JSTL’nin <c: if> etiketini kullanırız.
Varsa (boş değil) form düzenleme modundadır, aksi takdirde oluşturma modundadır.
ControllerServlet
package login;
1 2
import java.io.IOException;
3
import java.sql.SQLException;
4
import java.util.List;
5 6
import javax.servlet.RequestDispatcher;
7
import javax.servlet.ServletException;
8
import javax.servlet.http.HttpServlet;
9
import javax.servlet.http.HttpServletRequest;
10
import javax.servlet.http.HttpServletResponse;
11 12
public class ControllerServlet extends HttpServlet { 13
private static final long serialVersionUID = 1L;
14
private CreateDAO createDAO;
15
private EmlakDAO emlakDAO;
16 17
public void init() { 18
String jdbcURL = getServletContext().getInitParameter("jdbcURL") 19
String jdbcUsername = getServletContext().getInitParameter("jdbc 20
String jdbcPassword = getServletContext().getInitParameter("jdbc 21
22
createDAO = new CreateDAO(jdbcURL, jdbcUsername, jdbcPassword);
23
emlakDAO = new EmlakDAO(jdbcURL, jdbcUsername, jdbcP 24
} 25 26
protected void doPost(HttpServletRequest request, HttpServletRespo 27
throws ServletException, IOException { 28
doGet(request, response);
29 } 30 31
protected void doGet(HttpServletRequest request, HttpServletRespon 32
throws ServletException, IOException { 33
String action = request.getServletPath();
34 35
try { 36
switch (action) { 37
38
case "/new":
39
showNewForm(request, response);
40
break;
41
case "/insert":
42
insertCreate(request, response);
43
break;
44
case "/new1":
45
showNew1Form(request, response);
46
break;
47
case "/insert1":
48
insert1Emlak(request, response);
49
break;
50
case "/delete1":
51
delete1Emlak(request, response);
52
break;
53
case "/edit1":
54
showEdit1Form(request, response);
55
break;
56
case "/update1":
57
update1Emlak(request, response);
58
break;
59
default:
60
listEmlak(request, response);
61
break;
62
63
64
} 65
} catch (SQLException ex) { 66
throw new ServletException(ex);
67
} 68
69
} 70 71
private void listCreate(HttpServletRequest request, HttpServletRes 72
throws SQLException, IOException, ServletException { 73
List<User> listUser = createDAO.listAllUser();
74
request.setAttribute("listUser", listUser);
75
RequestDispatcher dispatcher = request.getRequestDispatcher("wel 76
dispatcher.forward(request, response);
77 } 78 79
private void showNewForm(HttpServletRequest request, HttpServletRe 80
throws ServletException, IOException { 81
RequestDispatcher dispatcher = request.getRequestDispatcher("wel 82
dispatcher.forward(request, response);
83 } 84 85 86 87
private void insertCreate(HttpServletRequest request, HttpServletR 88
throws SQLException, IOException { 89
String email = request.getParameter("email");
90
String password = request.getParameter("password");
91
String fullname = request.getParameter("fullname");
92 93
User newUser = new User(email, password, fullname);
94
createDAO.insertUser(newUser);
95
response.sendRedirect("welcome.jsp");
96 } 97
98
private void listEmlak(HttpServletRequest request, HttpSer 99
throws SQLException, IOException, ServletException { 100
List<Emlak> listEmlak = emlakDAO.listAllEmlak();
101
request.setAttribute("listEmlak", listEmlak);
102
RequestDispatcher dispatcher = request.getRequestDispatcher("Eml 103
dispatcher.forward(request, response);
104 } 105 106
private void showNew1Form(HttpServletRequest request, HttpServletR 107
throws ServletException, IOException { 108
RequestDispatcher dispatcher = request.getRequestDispatcher("Eml 109
dispatcher.forward(request, response);
110 } 111 112
private void showEdit1Form(HttpServletRequest request, HttpServlet 113
throws SQLException, ServletException, IOException { 114
int id = Integer.parseInt(request.getParameter("id"));
115
Emlak existingEmlak = emlakDAO.getEmlak(id);
116
RequestDispatcher dispatcher = request.getRequestDispatcher("Eml 117
request.setAttribute("emlak", existingEmlak);
118
dispatcher.forward(request, response);
119 120
} 121 122
private void insert1Emlak(HttpServletRequest request, HttpServletR 123
throws SQLException, IOException { 124
String il = request.getParameter("il");
125
String ilce = request.getParameter("ilce");
126
float fiyat = Float.parseFloat(request.getParameter("fiyat"));
127
String ozellik = request.getParameter("ozellik");
128 129
Emlak newEmlak = new Emlak(il, ilce, fiyat, ozellik);
130
emlakDAO.insert1Emlak(newEmlak);
131
response.sendRedirect("properties.jsp");
132 } 133 134
private void update1Emlak(HttpServletRequest request, HttpServletR 135
throws SQLException, IOException { 136
int id = Integer.parseInt(request.getParameter("id"));
137
String il = request.getParameter("il");
138
String ilce = request.getParameter("ilce");
139
float fiyat = Float.parseFloat(request.getParameter("fiyat"));
140
String ozellik = request.getParameter("ozellik");
141 142
Emlak emlak = new Emlak(id, il, ilce, fiyat, ozellik);
143
emlakDAO.update1Emlak(emlak);
144
response.sendRedirect("list");
145 } 146 147
private void delete1Emlak(HttpServletRequest request, HttpServletR 148
throws SQLException, IOException { 149
int id = Integer.parseInt(request.getParameter("id"));
150 151
Emlak emlak = new Emlak(id);
152
emlakDAO.delete1Emlak(emlak);
153
response.sendRedirect("list");
154 155
} 156 157 158 159 160 161 162
} 163 164
İlk olarak, sunucu uygulaması ilk kez başlatıldığında EmlakDAO'nun bir örneğini başlatan init () yöntemine bakın. JDBC bağlantı bilgileri, Servlet’in içerik parametrelerinden
okunacaktır. Bu yöntem, sunucu uygulamasının yaşam döngüsü boyunca yalnızca bir kez çağrılır, bu nedenle DAO örnekleme kodunu buraya koymak mantıklıdır. (29-30)
Daha sonra, doPost () yöntemi tüm isteği işleyen doGet () yöntemini çağırdığından, bu sunucu uygulamasının hem GET hem de POST isteklerini işlediğini görebiliriz. (try catch)
Bu yöntem, tüm mülkleri veritabanından almak için DAO sınıfını kullanır ve ardından
sonucu görüntülemek için EmlakList.jsp sayfasına iletir. Dinlenme yöntemleri için de benzer
mantık uygulanır.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
1 2
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xm 3
<context-param>
4
<param-name>contextConfigLocation</param-name>
5
<param-value>/WEB-INF/applicationContext.xml</param-value>
6
</context-param>
7
<listener>
8
<listener-class>org.springframework.web.context.ContextLoade 9
</listener>
10
<servlet>
11
<servlet-name>dispatcher</servlet-name>
12
<servlet-class>org.springframework.web.servlet.DispatcherSer 13
<load-on-startup>2</load-on-startup>
14
</servlet>
15
<servlet-mapping>
16
<servlet-name>dispatcher</servlet-name>
17
<url-pattern>*.htm</url-pattern>
18
</servlet-mapping>
19
<session-config>
20
<session-timeout>
21
30 22
</session-timeout>
23
</session-config>
24
<context-param>
25
<param-name>jdbcURL</param-name>
26
<param-value>jdbc:mysql://localhost:3306/emlak_project</para 27
</context-param>
28
<context-param>
29
<param-name>jdbcUsername</param-name>
30
<param-value>root</param-value>
31
</context-param>
32
<context-param>
33
<param-name>jdbcPassword</param-name>
34
<param-value>admin</param-value>
35
</context-param>
36
<servlet>
37
<servlet-name>ControllerServlet</servlet-name>
38
<servlet-class>login.ControllerServlet</servlet-class>
39
</servlet>
40
<servlet-mapping>
41
<servlet-name>ControllerServlet</servlet-name>
42
<url-pattern>/</url-pattern>
43
</servlet-mapping>
44
<context-param>
45
<param-name>host</param-name>
46
<param-value>smtp.gmail.com</param-value>
47
</context-param>
48 49
<context-param>
50
<param-name>port</param-name>
51
<param-value>587</param-value>
52
</context-param>
53 54
<context-param>
55
<param-name>user</param-name>
56
<param-value>burakkocatepe183@gmail.com</param-value>
57
</context-param>
58 59
<context-param>
60
<param-name>pass</param-name>
61
<param-value>********</param-value>
62
</context-param>
63 64
</web-app>
65 66
ControllerServlet'in tüm istekleri kesmesini sağlamak için, web dağıtım tanımlayıcı web.xml dosyasında eşlemesini yapılandırmamız gerekir.
Gördüğünüz gibi <context-param> öğeleri, DAO sınıfı için JDBC bağlantı bilgilerini (URL, kullanıcı adı ve parola) belirtir.
<servlet> ve <servlet mapping> öğeleri ControllerServletclass için URL eşlemesini bildirir ve belirtir. URL kalıbı /, bunun tüm istekleri işlemek için varsayılan sunucu uygulaması olduğu anlamına gelir.
<hata> sayfası öğeleri, uygulamanın ömrü boyunca ortaya çıkabilecek her tür istisna
(java.lang.Exception) için hata işleme sayfasını belirtir.
UserLoginServlet
package login;
1 2
import java.io.IOException;
3
import java.io.PrintWriter;
4
import java.sql.SQLException;
5 6
import javax.servlet.RequestDispatcher;
7
import javax.servlet.ServletException;
8
import javax.servlet.annotation.WebServlet;
9
import javax.servlet.http.HttpServlet;
10
import javax.servlet.http.HttpServletRequest;
11
import javax.servlet.http.HttpServletResponse;
12
import javax.servlet.http.HttpSession;
13 14 15
@WebServlet("/login") 16
public class UserLoginServlet extends HttpServlet { 17
private static final long serialVersionUID = 1L;
18 19
public UserLoginServlet() { 20
super();
21 } 22
23
24
protected void doPost(HttpServletRequest request, HttpServletRespo 25
throws ServletException, IOException { 26
String email = request.getParameter("email");
27
String password = request.getParameter("password");
28 29
UserDAO userDao = new UserDAO();
30
AdminDAO adminDao = new AdminDAO();
31 32
try { 33
User user = userDao.checkLogin(email, password);
34
Admin admin = adminDao.checkLogin(email, pas 35
String destPage = "signin.jsp";
36
37
if (user != null) { 38
HttpSession session = request.getSession();
39
session.setAttribute("user", user);
40
destPage = "profile.jsp";
41
}if (admin != null) { 42
HttpSession session = request.getSession();
43
session.setAttribute("admin", admin);
44
destPage = "admin.jsp";
45
} else { 46
String message = "Invalid email/password";
47
request.setAttribute("message", message);
48
} 49
50
RequestDispatcher dispatcher = request.getRequestDispatcher(de 51
dispatcher.forward(request, response);
52
53
} catch (SQLException | ClassNotFoundException ex) { 54
throw new ServletException(ex);
55
} 56
} 57 58
} 59 60
Gördüğünüz gibi doPost () yöntemi, istemciden oturum açma isteğini işler. Veritabanına göre e-posta ve parolayı doğrulamak için UserDAO sınıfının checkLogin () yöntemini çağırır.
Oturum açma başarılı olursa, oturumda oturum açmış kullanıcı hakkında bilgi depolamak için bir öznitelik ayarlar ve isteği yönetici ana sayfasına iletir:
package Email;
1 2
import java.util.Date;
3
import java.util.Properties;
4 5
import javax.mail.Authenticator;
6
import javax.mail.Message;
7
import javax.mail.MessagingException;
8
import javax.mail.PasswordAuthentication;
9
import javax.mail.Session;
10
import javax.mail.Transport;
11
import javax.mail.internet.AddressException;
12
import javax.mail.internet.InternetAddress;
13
import javax.mail.internet.MimeMessage;
14 15
public class EmailUtility { 16
public static void sendEmail(String host, String port, 17
final String userName, final String password, String toAddress 18
String subject, String message) throws AddressException, 19
MessagingException { 20
21
// sets SMTP server properties 22
Properties properties = new Properties();
23
properties.put("mail.smtp.host", host);
24
properties.put("mail.smtp.port", port);
25
properties.put("mail.smtp.auth", "true");
26
properties.put("mail.smtp.starttls.enable", "true");
27 28
// creates a new session with an authenticator 29
Authenticator auth = new Authenticator() { 30
public PasswordAuthentication getPasswordAuthentication() { 31
return new PasswordAuthentication(userName, password);
32
} 33
};
34 35
Session session = Session.getInstance(properties, auth);
36 37
// creates a new e-mail message 38
Message msg = new MimeMessage(session);
39 40
msg.setFrom(new InternetAddress(userName));
41
InternetAddress[] toAddresses = { new InternetAddress(toAddress) } 42
msg.setRecipients(Message.RecipientType.TO, toAddresses);
43
msg.setSubject(subject);
44
msg.setSentDate(new Date());
45
msg.setText(message);
46 47
// sends the e-mail 48
Transport.send(msg);
49 50
} 51
} 52
Sınıfın, SMTP sunucu ayarlarını ve ileti ayrıntılarını bağımsız değişkenleri olarak alan
sendEmail () adlı bir statik yöntemi vardır. SMTP sunucu ayarlarını uygulamanın web.xml
dosyasına koyacağız.
EmailSendingServlet
package Email;
1 2
import java.io.IOException;
3 4
import javax.servlet.ServletContext;
5
import javax.servlet.ServletException;
6
import javax.servlet.annotation.WebServlet;
7
import javax.servlet.http.HttpServlet;
8
import javax.servlet.http.HttpServletRequest;
9
import javax.servlet.http.HttpServletResponse;
10 11
@WebServlet("/EmailSendingServlet") 12
public class EmailSendingServlet extends HttpServlet { 13
private String host;
14
private String port;
15
private String user;
16
private String pass;
17 18
public void init() { 19
// reads SMTP server setting from web.xml file 20
ServletContext context = getServletContext();
21
host = context.getInitParameter("host");
22
port = context.getInitParameter("port");
23
user = context.getInitParameter("user");
24
pass = context.getInitParameter("pass");
25
} 26
27
protected void doPost(HttpServletRequest request, 28
HttpServletResponse response) throws ServletException, I 29
// reads form fields 30
String recipient = request.getParameter("recipient");
31
String subject = request.getParameter("subject");
32
String content = request.getParameter("content");
33 34
String resultMessage = "";
35 36
try { 37
EmailUtility.sendEmail(host, port, user, pass, recipient 38
content);
39
resultMessage = "Mesajınız iletilmiştir.";
40
} catch (Exception ex) { 41
ex.printStackTrace();
42
resultMessage = "There were an error: " + ex.getMessage(
43
} finally { 44
request.setAttribute("Message", resultMessage);
45
getServletContext().getRequestDispatcher("/Result.jsp").
46
request, response);
47
} 48
} 49
} 50
Gördüğümüz gibi, sunucu uygulaması EmailSendingServlet - init () yönteminde
başlatıldığında SMTP sunucusu için yapılandırmayı yükler ve doPost () yönteminde
kullanıcının isteklerini işler. EmailForm.jsp sayfasından ileti ayrıntılarını (alıcı, konu ve
içerik) okur ve EmailUtility sınıfının sendEmail () yöntemini çağırarak e-postayı göndermeye
çalışır. Kullanıcılar sonunda e-postanın gönderilip gönderilmediğini bildiren bir Result.jsp
sayfası alacaklar.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
1
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2
xmlns="http://java.sun.com/xml/ns/javaee"
3
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
4
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
6
id="WebApp_ID" version="3.0">
7
<display-name>EmailSendingWebApp</display-name>
8 9
<!-- SMTP settings -->
10
<context-param>
11
<param-name>host</param-name>
12
<param-value>smtp.gmail.com</param-value>
13
</context-param>
14 15
<context-param>
16
<param-name>port</param-name>
17
<param-value>587</param-value>
18
</context-param>
19 20
<context-param>
21
<param-name>user</param-name>
22
<param-value>YOUR_EMAIL</param-value>
23
</context-param>
24 25
<context-param>
26
<param-name>pass</param-name>
27
<param-value>YOUR_PASSWORD</param-value>
28
</context-param>
29 30
<welcome-file-list>
31
<welcome-file>EmailForm.jsp</welcome-file>
32
</welcome-file-list>
33
</web-app>
34
SMTP ayarları, bağlam parametreleri olarak yapılandırılır. Bu uygulamada, bir Gmail’in SMTP hesabı kullanıyoruz ve gönderenin e-posta adresini (kullanıcı) ve şifresini hesap ayarınıza uyacak şekilde değiştirmeniz gerekir. Hesabınız için SMTP'nin etkinleştirildiğinden emin olmak için e-posta servis sağlayıcınızı kontrol edin. Servlet 3.0 API kullandığımız için, bu web.xml dosyasında sunucu uygulaması bildirimi ve eşleme gerektirmez. Ve
EmailForm.jsp, <welcome-file-list> bölümünde varsayılan sayfa olarak ayarlanır.
Kodların Önemli Kısımları
contact.jsp
<b>${user.fullname} ${user.email}</b>
1
<b>${admin.fullname} ${admin.email}</b>
2
<a href="logout" >ÇIKIŞ</a>
3
Ana sayfada giriş yapan kullanıcının adını , soyadını ve emailini gösterir . Admin giriş yaptıysa eğer adminin adını , soyadını ve emailini gösterir. Çıkış'a tıkladığımız da ise giriş yaptığımız kullanıcıdan çıkışımızı yapar.
<form action="EmailSendingServlet" method="post">
1
<table border="0" width="35%" align="center">
2
<caption><h2>Emailimiz ile iletişime geçebilirsiniz.</h2><br></
3
<tr>
4
<td width="50%" style="color:white">EMAİL </td>
5
<td><input type="hidden" name="recipient" size="50" value="
6
</tr>
7
<tr>
8
<td style="color:white">BAŞLIK </td>
9
<td><input type="text" name="subject" size="50"/></td>
10
</tr>
11
<tr>
12
<td style="color:white">KONU </td>
13
<td><textarea rows="10" cols="39" name="content"></textar 14
</tr>
15
<tr>
16
<td colspan="2" align="center"><input type="submit" value 17
</tr>
18
</table>
19
</form>
20
Formun öznitelik eyleminin, daha sonra oluşturulacak bir servletin URL'sine işaret ettiğini
unutmayın. Bu formu gönderirken, servlet işleme için çağrılır.
Admin.jsp
<section id="aa-signin">
1
<div class="container">
2
<div class="row">
3
<div class="col-md-12">
4
<div class="aa-signin-area">
5
<div class="aa-signin-form">
6
<div class="aa-signin-form-title">
7
<a class="aa-property-home" href="index.jsp">ANA SAY 8
<center>
9
<b>${admin.fullname} ${admin.email}</b><br></br>
10
<h1>Emlak Management</h1><br></br>
11
<h2>
12
<a href="new1">Yeni Emlak Ekle</a>
13
14
<a href="list">Emlakları Listele</a>
15
<br></br>
16
17
18
</h2>
19
</center>
20
<div align="center">
21
22
23
<c:forEach var="emlak" items="${listEmlak}">
24
<tr>
25
<td><c:out value="${emlak.id}" /></td>
26
<td><c:out value="${emlak.il}" /></td>
27
<td><c:out value="${emlak.ilce}" /></td>
28
<td><c:out value="${emlak.fiyat}" /></td>
29
<td><c:out value="${emlak.ozellik}" /></td>
30
31
</tr>
32
</c:forEach>
33
</div>
34
</div>
35
</div>
36
</div>
37
</div>
38
</section>
39
Giriş sayfasından admin kullanıcısı olarak giriş yaptığınız zaman sizi bu sayfaya atıcak ve
sadece emlak ekleme ve diğer emlakların hareketleri gösteriliyor.
welcome.jsp
<div class="aa-signin-form-title">
1
<a class="aa-property-home" href="index.jsp">ANA SAYFA</a>
2
<b>${user.fullname} ${user.email}</b>
3
<h1>Hoşgeldiniz</h1><br></br>
4
<h1>Kullanıcı oluşturuldu lütfen giriş yapınız</h1><br></br>
5
<h2>
6
<a href="signin.jsp">Giriş yapmak için tıklayınız</a>
7
8
<br></br>
9
</h2>
10
</tr>
11
</c:forEach>
12
</div>
13
Kayıt olduktan sonraki gösterilecek sayfadır ve 3.satır ile oluşturulan kullanıcının adı ,
soyadı , emaili ekranda gösterilecektir .
profile.jsp
<footer id="aa-footer">
1
<div class="container">
2
<row>
3
<div class="col-md-12">
4
5
<div style="text-align: center">
6
<h2>${user.fullname}</h2>
7
<br><br>
8
</div>
9
<center>
10
<h2>MÜLK EKLEMEK İÇİN</h2><br></br>
11
<a href="new1" style="background-color:buttonhighlig 12
13
</center>
14
</div>
15
</row>
16
</div>
17 18
</footer>
19
<!-- End Proerty h 20
Kullanıcı giriş yaptığı zaman açılan sayfadır ve mülk ekleme kısmı vardır.
changePassword
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
1
<%@page import="java.sql.*"%>
2
<%@page import="java.io.*"%>
3
<%
4
String currentPassword=request.getParameter("current");
5
String Newpass=request.getParameter("new");
6
String conpass=request.getParameter("confirm");
7
String connurl = "jdbc:mysql://localhost:3306/emlak_project";
8
Connection con=null;
9
String pass="";
10
int id=0;
11
try{
12
Class.forName("com.mysql.jdbc.Driver");
13
con = DriverManager.getConnection(connurl, "root", "admin");
14
Statement st=con.createStatement();
15
ResultSet rs=st.executeQuery("select * from user where password='"+c 16
while(rs.next()){
17
id=rs.getInt(1);
18
pass=rs.getString(3);
19
} System.out.println(id+ " "+pass);
20
if(pass.equals(currentPassword)){
21
Statement st1=con.createStatement();
22
int i=st1.executeUpdate("update user set password='"+Newpass+"' wher 23
out.println("Password changed successfully");
24
st1.close();
25
con.close();
26 } 27
else{
28
out.println("Gecersiz sifre");
29 } 30
} 31
catch(Exception e){
32
out.println(e);
33 } 34
%>
35
Girilen kullanıcının şifresini değiştirdiği yer
Youtube Linki
https://www.youtube.com/watch?v=84gUUURvyAE
Github Linki
https://github.com/Buraky99/REM-System