рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛред
рдпрд╣ рд▓реЗрдЦ рд╡реЗрдм рдФрд░ рдЬрд╛рд╡рд╛ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рдо рдорд╛рдирдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред
рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ (рд╡рд┐рд╢рд╛рд▓ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдоред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рддреБрд░рдВрдд рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдиреБрдХрд╕рд╛рди рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред
рдЖрд╡реЗрджрди рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛?
рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИ рдФрд░ рдЕрдВрдд рддрдХ рдЖрдк рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдХреНрдпрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд▓реЙрдЧрд┐рди рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдЦреБрд▓рд╛рд╕рд╛ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдЖрдк рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред
рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
- рдкрд╕рдВрджреАрджрд╛ рдЖрдИрдбреАрдИ (рдореИрдВ рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
- рд╕рд┐рд░ рдкрд░ рдмрд╛рджрд▓ рдирд╣реАрдВ
- рдорд╛рд╡реЗрди (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдбрд░)
- JDBC (рдЬрд╛рд╡рд╛ рдФрд░ DBMS рдХреЗ рдмреАрдЪ рдХреА рдХрдбрд╝реА)
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
рдПрдХ рд╕рд░рд▓ рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рд╣рдо рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд╛рдкрд▓реВрд╕реА рдХреЗред
рдЖрдИрдбреАрдИ рдХреЛ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рддреИрдпрд╛рд░ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВред
- рдЬрд╛рд╡рд╛ - рдореБрдЦреНрдп рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ "рдЬрд╛рджреВ" рд╣реЛрдЧрд╛
- resources тАФ . ( , , front )
- test тАФ . ( , )
- pom.xml тАФ Maven. , , "" .
, IDE, - Maven.

-
, .
, .

-, , "-".
.
- Browser тАФ . Frontend. Backend тАФ , . .
- Controller тАФ Frontend, . , , .
- Service тАФ - . . .
- DAL(data access layer) тАФ . , , , .
- Database тАФ , .
- .
, H2.
, -. User.
create table DATABASE.USER
(
ID INT auto_increment,
NAME VARCHAR not null,
SURNAME VARCHAR not null,
LOGIN VARCHAR not null,
PASSWORD VARCHAR not null,
constraint USER_PK
primary key (ID)
);
Spring
java.
java com.zuk( ), App main .
Spring. , @SpringBootApplication Spring, , . Spring .
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
pom.xml.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.zuk</groupId>
<artifactId>LoginAndRegistration</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
</dependencies>
</project>
, Spring .

Spring 8080. , http://localhost:8080.
, Spring , .
application.properties src.main.resources.
-.
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:~/test
spring.datasource.username=sa
spring.datasource.password=
Spring, .
, .
, . , . Spring .
.
java.com.zuk.connection ConnectionManager, , .
properties, FileInputStream.
FileInputStream fis;
Properties property = new Properties();
application.properties, properties.
fis = new FileInputStream("src/main/resources/application.properties");
property.load(fis);
getConnection.
public Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(property.getProperty("spring.datasource.url"),property.getProperty("spring.datasource.username"),property.getProperty("spring.datasource.password"));
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
, App.
, .
conn2: url=jdbc:h2:~/test user=SA
, pom.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
POJO (Plain Old Java Objects)
, , .
, , . , , , . , , . POJO.
, User.
.
java.com.zuk.entity, User.
, .
User.javapublic class User {
private int id;
private String name;
private String surname;
private String login;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
DAL
, , DAL. , . DAO (data access object) тАФ - .
java.com.zuk.dao UserDao ( ). findByLogin, save.
public interface UserDao {
User findByLogin(String login);
Boolean save(User user);
}
, java.com.zuk.dao.impl,
UserDaoImpl.
тАФ , , (, ).
public class UserDaoImpl implements UserDao {
@Override
public User findByLogin(String login) {
return null;
}
@Override
public Boolean save(User user) {
return null;
}
}
findByLogin. SQL .
SELECT * from DATABASE.User where LOGIN=login
User.
, null.
ConnectionManager cm = new ConnectionManager();
Connection con = cm.getConnection();
@Override
public User findByLogin(String login) {
User user = null;
if (con != null) {
}
return user;
}
if , SQL , user.
PreparedStatement pr = con.prepareStatement("SELECT * FROM DATABASE.User where LOGIN=?");
pr.setString(1 , login);
ResultSet resultSet = pr.executeQuery();
if(resultSet.next()) {
user = new User();
user.setId(resultSet.getInt("ID"));
user.setName(resultSet.getString("NAME"));
user.setSurname(resultSet.getString("SURNAME"));
user.setLogin(login);
user.setPassword(resultSet.getString("PASSWORD"));
return user;
}
pr.close();
con.close();
.
save .
.
save
@Override
public Boolean save(User user) {
ConnectionManager cm = new ConnectionManager();
Connection con = cm.getConnection();
if (con != null) {
try {
PreparedStatement pr = con.prepareStatement("insert into DATABASE.USER (NAME,SURNAME,LOGIN,PASSWORD) values (?,?,?,?)");
pr.setString(1,user.getName());
pr.setString(2,user.getSurname());
pr.setString(3,user.getLogin());
pr.setString(4, DigestUtils.md5DigestAsHex((user.getPassword()).getBytes()));
pr.executeUpdate();
pr.close();
con.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
Service
-. java.com.zuk.service, UserService : login, registration. UserServiceImpl java.com.zuk.service.impl, UserService.
public class UserServiceImpl implements UserService {
@Override
public String login(User user) {
return null;
}
@Override
public String registration(User user) {
return null;
}
}
login.
:
- "login" .
- 1 , .
- 2 , "life is beautiful"
UserDaoImpl userDao = new UserDaoImpl();
@Override
public String login(User user) {
User findUser = userDao.findByLogin(user.getLogin());
if(findUser!=null){
if(DigestUtils.md5DigestAsHex((user.getPassword()).getBytes()).equals(findUser.getPassword())){
return "life is beautiful" + "your Id: " + findUser.getId();
}
}
return "do not give up";
}
.
registration @Override
public String registration(User user) {
User findUser = userDao.findByLogin(user.getLogin());
if(findUser==null) {
userDao.save(user);
return "life is beautiful";
}
return "this login is not available";
}
Controller
, - .
java.com.zuk.controller Controller. "" RestController, Spring , Rest Controller.
, @RequestMapping("/").
@RestController
public class Controller {
@RequestMapping("/")
String main() {
return "Hello from Controller";
}
}
, http://localhost:8080.
"Hello from Controller".
html . , .
resources, resources.static.
html
<html>
<title>Login</title>
<body>
<form action="http://localhost:8080/login" method="post">
<input type="text" required name="login" placeholder="login" />
<input type="password" required name="password" placeholder="password" />
<button>login</button>
</form>
<a href="http://localhost:8080/registrationForm">don't have account</a>
</body>
</html>
<html>
<title>Registration</title>
<body>
<form action="http://localhost:8080/registration" method="post">
<input type="text" required name="name" placeholder="name" />
<input type="text" required name="surname" placeholder="surname" />
<input type="text" required name="login" placeholder="login" />
<input type="password" required name="password" placeholder="password" />
<button>registration</button>
</form>
<a href="http://localhost:8080/loginForm">already have account</a>
</body>
</html>
, http://localhost:8080/loginForm, http://localhost:8080/registrationForm html .
, /loginForm, /registrationForm html. ModelAndView.
@RequestMapping("/loginForm")
ModelAndView loginForm() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("loginForm.html");
return modelAndView;
}
@RequestMapping("/registrationForm")
ModelAndView registrationForm() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("registrationForm.html");
return modelAndView;
}
, action http://localhost:8080/login registration, .
service.
UserServiceImpl userService = new UserServiceImpl();
@PostMapping("/login")
String login(@RequestParam String login,@RequestParam String password) {
User user = new User();
user.setLogin(login);
user.setPassword(password);
return userService.login(user);
}
@PostMapping("/registration")
String registration(@RequestParam String name,@RequestParam String surname, @RequestParam String login,@RequestParam String password) {
User user = new User();
user.setName(name);
user.setSurname(surname);
user.setLogin(login);
user.setPassword(password);
return userService.registration(user);
}
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣рдорд╛рд░реЗ рддрд░реАрдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд▓рдЧреЗред рдпреЗ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рд░реВрдкреЛрдВ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдирд╛рдо рдЗрдирдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рдХреБрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рдЖрдкрдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рд╕рдмрдХрд╛ рд╕реБрдЦрдж рд╡рд┐рдХрд╛рд╕ред