• Sonuç bulunamadı

Real Estate Management

N/A
N/A
Protected

Academic year: 2022

Share "Real Estate Management"

Copied!
36
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

REG - Emlak

(2)

Real Estate Management

(3)

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

(4)

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

(5)

SQL Scripti

Emlak_projesi emlak_projesi.sql - 4KB

(6)

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

(7)

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.

(8)

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

(9)

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

(10)

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

(11)

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.

(12)

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

(13)

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

(14)

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.

(15)

EmlakList

<center>

1

<h2>Emlak Yönetimi</h2>

2

<h2>

3

<a href="new1" style="background-color:buttonhighlight">Ye 4

&nbsp;&nbsp;&nbsp;

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

&nbsp;&nbsp;&nbsp;&nbsp;

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.

(16)

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

(17)

<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.

(18)

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

(19)

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

(20)

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

(21)

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.

(22)

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

(23)

<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.

(24)

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

(25)

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

(26)

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.

(27)

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

(28)

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.

(29)

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.

(30)

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.

(31)

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

&nbsp;&nbsp;&nbsp;

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.

(32)

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

&nbsp;&nbsp;&nbsp;

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 .

(33)

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

&nbsp;&nbsp;&nbsp;

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.

(34)

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

(35)

Youtube Linki

https://www.youtube.com/watch?v=84gUUURvyAE

(36)

Github Linki

https://github.com/Buraky99/REM-System

Referanslar

Benzer Belgeler

Örnek: C programı ile 10 elemanlı bir dizinin elamanlarının okutulup yazdırılması, toplam ve ortalamasının

movlw 0x3f movwf tbasi movlw 0x00 movwf tbasi+1 movlw 0x5b movwf tbasi+2 movlw 0x00 movwf tbasi+3 movlw 0x66 movwf tbasi+4 movlw 0x00 movwf tbasi+5

 Özgürlüğün kullanılması için izin almaya gerek yoktur..  Özgürlüğün kullanılacağının ve buna ilişkin bazı hususların ilgili makamlara

The dependent variable of this study is cash conversion cycle which represents working capital management and the explanatory variables are profitability,

The dataset contain real estate credit and price conditions (loan principal and spread, and the appraisal and market price) at the mortgage level, matched with borrower

Aşağıdaki sayı dorusunda harflerle gösterilen yerlere denk gelen kesirleri yazınız.. kesirlerini aşağıdaki

}iuğla İlinde kurulnakta olan Xeoerköy Termlk Santralıne alt erıisyon iziı doayae:, 1nceleoolş ve Müsteşaıiığımızın 8örüşü aşağıdg yarl.bdştlr. t-Teslo

If the consumer is paying off a loan gradually, the simple interest approach determines the declining loan balance, and that reduced balance is then used to determine the declining