В качестве нового опыта есть идея создать приложение на JAVA ( в планах простой чат с сервером и БД) чтобы там использовалось следующее:
JSP
, Servlets
, JDBC
. В голове план про обычный чат в браузере, с регистрацией пользователей и хранением сообщений.
Вопрос: как вообще эта конструкция вся будет выглядеть, что к чему прикручивать и т.д. разъясните. )
через что вообще создать окно чата, через Swing?
и как прикрутить его в браузер, через jpa?
Я бы вам советовал начать со стека spring-boot, security, jpa, velocity(не требует громоздких конфигурационных классов/xml). По структуре: 1) Мейн контроллер - описание главной страницы посредством ModelMap (кнопочки - регистрация, авторизация, диалоговое окно чата)
@RequestMapping(value = "", method = {RequestMethod.GET, RequestMethod.HEAD})
public String MainPage(ModelMap model) {
model.addAttribute("title_page", "Чат сервер");
final User user = securityService.findLoggedIn();
if (user != null) {
model.addAttribute("authuser", user);
}
MainContent(model, domain);
GeneratePageBlock(model, "/site/" + domain + "/pages/main.vm");
return "/site/" + domain + "/index";
}
2) Контроллеры регистрации/авторизации, реализация интерфейса JpaRepository<User, Long>
для обработки данных пользователя, где User
реализация интерфейса UserDetails
-
@Entity
@Table(name = "user")
public class User implements UserDetails {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "id")
private Long id;
@Column(name = "enabled")
private Boolean enabled;
@NotEmpty(message = "Заполните поле")
@Column(name = "username")
private String username;
@NotEmpty(message = "Заполните поле")
@Email(message = "Неверный формат Email")
@Column(name = "email")
private String email;
@NotEmpty(message = "Заполните поле")
@Size(min = 4, message = "Пароль должен содержать минимум {min} символа")
@Column(name = "password")
private String password;
@Transient
private String passwordConfirm;
@Column(name = "roles")
private String roles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@Override
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordConfirm() {
return passwordConfirm;
}
public void setPasswordConfirm(String passwordConfirm) {
this.passwordConfirm = passwordConfirm;
}
public String getRoles() {
return roles;
}
public void setRoles(String roles) {
this.roles = roles;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
if (roles != null) {
if (roles.contains("ADMIN")) {
return AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_MODERATOR", "ROLE_USER");
} else if (roles.contains("MODERATOR")) {
return AuthorityUtils.createAuthorityList("ROLE_MODERATOR", "ROLE_USER");
}
}
return AuthorityUtils.createAuthorityList("ROLE_USER");
}
}
Примерная логика контроллера регистрации -
@RequestMapping(value = "registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("user") User user, BindingResult result,
ModelMap model, HttpServletRequest request) {
model.addAttribute("title_page", "Регистрация - База знаний Lineage 2 Helios");
MainContent(model, domain);
userValidator.validate(user, result);
if (result.hasErrors()) {
GeneratePageBlock(model, "/site/" + domain + "/pages/registration.vm");
return "/site/" + domain + "/index";
}
final User user1 = new User();
user1.setUsername(user.getUsername());
user1.setEmail(user.getEmail());
user1.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
user1.setEnabled(false);
user1.setRoles("ROLE_USER");
userService.save(user1);
final User user_saved = userService.findByUsername(user1.getUsername());
eventPublisher.publishEvent(new OnRegistrationCompleteEvent(user_saved, getAppUrl(request)));
model.addAttribute("message", "Регистрация прошла успешно, информация отправлена на Email: " + user.getEmail());
GeneratePageBlock(model, "/site/" + domain + "/pages/registrationSuccessful.vm");
return "/site/" + domain + "/index";
}
3) Сам чатик - подробный пример можете посмотреть тут -> https://github.com/salmar/spring-websocket-chat
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня активность содержит фрагментПри нажатии кнопки в этом фрагменте, у меня должны измениться состояния View в макете активности
Пытаюсь развернуть вэб приложение на хостинге(там стоит томкат)По умолчанию tomcat предоставляет контекст к приложению равный имени war'ника,...
Как возможно приблизить карту сразу по местности, а именно, если как на примере маркеры находятся в одном городе, то сразу открывать приближенную...