
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<c:set var="root" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>๋ฏธ๋ ํ๋ก์ ํธ</title>
<!-- Bootstrap CDN -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" />
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<!-- ์๋จ ๋ฉ๋ด ๋ถ๋ถ -->
<c:import url="/WEB-INF/views/include/menu.jsp" />
<div class="container" style="margin-top: 100px">
<div class="row">
<div class="col-sm-3"></div>
<div class="col-sm-6">
<div class="card shadow">
<div class="card-body">
<form:form action="${root }/user/join_pro" modelAttribute="joinUser">
<div class="form-group">
<form:label path="name">์ด๋ฆ</form:label>
<form:input path="name" class="form-control" />
<form:errors path="name"/>
</div>
<div class="form-group">
<form:label path="user_id">์์ด๋</form:label>
<div class="input-group">
<form:input path="user_id" class="form-control" />
<div class="input-group-append">
<button type="button" class="btn btn-primary">์ค๋ณตํ์ธ</button>
</div>
</div>
<form:errors path="user_id"/>
</div>
<div class="form-group">
<form:label path="user_pw">๋น๋ฐ๋ฒํธ</form:label>
<form:input type="password" path="user_pw" class="form-control" />
<form:errors path="user_pw"/>
</div>
<div class="form-group">
<form:label path="user_pw2">๋น๋ฐ๋ฒํธ ํ์ธ</form:label>
<form:input type="password" path="user_pw2" class="form-control" />
<form:errors path="user_pw2"/>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-primary">ํ์๊ฐ์
</button>
</div>
</div>
</form:form>
</div>
</div>
</div>
<div class="col-sm-3"></div>
</div>
</div>
<!-- ํ๋จ ๋ฉ๋ด ๋ถ๋ถ -->
<c:import url="/WEB-INF/views/include/footer.jsp" />
</body>
</html>
UserVO ์์
user_pw2 ์์ฑ
package com.demo.domain;
public class UserVO {
// -- ์ฌ์ฉ์ ํ
์ด๋ธ
// create table user(
// user_idx int AUTO_INCREMENT,
// name varchar(50) not null,
// user_id varchar(100) not null,
// user_pw varchar(100) not null,
// primary key(user_idx)
// );
//
private int user_idx;
private String name;
private String user_id;
private String user_pw;
private String user_pw2;
//๊ฒํฐ ์ธํฐ ์์ฑ
public int getUser_idx() {
return user_idx;
}
public void setUser_idx(int user_idx) {
this.user_idx = user_idx;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUser_pw2() {
return user_pw2;
}
public void setUser_pw2(String user_pw2) {
this.user_pw2 = user_pw2;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_pw() {
return user_pw;
}
public void setUser_pw(String user_pw) {
this.user_pw = user_pw;
}
}
form:form๋ modelAttribute ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ค
UserController์ join ์์
@GetMapping("/join")
public String join(@ModelAttribute("joinUser") UserVO joinUser) {
return "user/join";
}
๋ชจ๋ธ์ ๊ฐ์ฒด ๋ฐ๋ก ๋ด์์ค Model model ์ด๋ ๋์ผํ ๊ธฐ๋ฅ
modelAttribute
https://offbyone.tistory.com/325
์คํ๋งํ๋ ์์ํฌ <form:form> ํ๊ทธ ์ฌ์ฉ๋ฒ
์คํ๋งํ๋ ์์ํฌ์ JSP ๊ธฐ์ ์ค์ form taglib ๊ฐ ์์ต๋๋ค. form ํ๊ทธ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด HTML ํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๊ฑฐ๋ ์๋ฌ๋ฉ์ธ์ง ์ฒ๋ฆฌ๋ฑ์ ๊ฐํธํ๊ฒ ํ ์ ์์ต๋๋ค. ์คํ๋งํ๋ ์์ํฌ form
offbyone.tistory.com

์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด์
pom.xml์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ(๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ ์ค ๋ฐ๋ก ๋ฐ์ )
<!-- ์ ํจ์ฑ ๊ฒ์ฌ : validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- ์ ํจ์ฑ ๊ฒ์ฌ : hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
UserVO์์ ๋ฐ๋ก ๊ฒ์ฌ ํญ๋ชฉ ์ง์ ๊ฐ๋ฅํจ
public class UserVO {
// -- ์ฌ์ฉ์ ํ
์ด๋ธ
// create table user(
// user_idx int AUTO_INCREMENT,
// name varchar(50) not null,
// user_id varchar(100) not null,
// user_pw varchar(100) not null,
// primary key(user_idx)
// );
//
private int user_idx;
//์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด ์ถ๊ฐ
@Size(min=2, max=4 , message = "์ด๋ฆ์ 2~4์๋ก ์
๋ ฅํด์ฃผ์ธ์")
// @Pattern(regexp ="[๊ฐ-ํฃ]*")
private String name;
@Size(min=4, max=20, message = "์์ด๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
private String user_id;
@Size(min=4, max=20 , message = "ํจ์ค์๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
private String user_pw;
@Size(min=4, max=20 , message = "ํจ์ค์๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
private String user_pw2;
UserController ์ ์ถ๊ฐ
@PostMapping("/join_pro")
public String join_pro(@Valid @ModelAttribute("joinUser") UserVO joinUser,BindingResult result) {
if(result.hasErrors()) {
return "user/join";
}
return "user/join_success";
}

@Valid๊ฐ ์ ํจ์ฑ๊ฒ์ฌ๋ฅผ ํจ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฌ๊ฐ BindingResult ์ ๋ค์ด๊ฐ๊ฒ๋จ
์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ง์ฝ ์๋ฌ๊ฐ ๋๋ค๋ฉด joinํ์ด์ง๋ก ๋ค์ ๋์๊ฐ๋ฉฐ ์๋ฌ๋ฉ์ธ์ง(VO์์ ์ง์ )๋ ๊ฐ์ด ๋ฐํ๋จ

์๋ฌ ๋ฉ์ธ์ง์ ์์์ ๋ฃ๊ณ ์ถ์ผ๋ฉด



ํ์ฌ๋ ๋ฌธ์์ด ๊ธธ์ด์๋ง ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ ์ฉ๋ ์ํ์ด๊ณ ,
ํ๊ธ์ธ์ง ์์ด์ธ์ง๋ ์ฒดํฌ ๊ฐ๋ฅํ๋๋ก
UserVO์์
@Size(min=2, max=4 , message = "์ด๋ฆ์ 2~4์๋ก ์
๋ ฅํด์ฃผ์ธ์")
@Pattern(regexp="[๊ฐ-ํฃ]*",message = "ํ๊ธ๋ก ์
๋ ฅํด์ฃผ์ธ์.")
private String name;
ํ ์คํธํ๊ธฐ

private int user_idx;
//์ ํจ์ฑ ๊ฒ์ฌ ์กฐ๊ฑด ์ถ๊ฐ
@Size(min=2, max=4 , message = "์ด๋ฆ์ 2~4์๋ก ์
๋ ฅํด์ฃผ์ธ์")
@Pattern(regexp="[๊ฐ-ํฃ]*",message = "ํ๊ธ๋ก ์
๋ ฅํด์ฃผ์ธ์.")
private String name;
@Size(min=4, max=20, message = "์์ด๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
@Pattern(regexp="[a-zA-Z0-0]*",message = "์๋ฌธ ๋๋ ์ซ์๋ก ์
๋ ฅํด์ฃผ์ธ์.")
private String user_id;
@Size(min=4, max=20 , message = "ํจ์ค์๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
@Pattern(regexp="[a-zA-Z0-0]*",message = "์๋ฌธ ๋๋ ์ซ์๋ก ์
๋ ฅํด์ฃผ์ธ์.")
private String user_pw;
@Size(min=4, max=20 , message = "ํจ์ค์๋๋ 4์์ด์ 20์์ดํ ์๋ฌธ ์ซ์")
@Pattern(regexp="[a-zA-Z0-0]*",message = "์๋ฌธ ๋๋ ์ซ์๋ก ์
๋ ฅํด์ฃผ์ธ์.")
private String user_pw2;
regular expression (์ ๊ท ํํ์)
https://www.nextree.co.kr/p4327/
์ ๊ทํํ์(Regular Expression)์ ์๊ฐํฉ๋๋ค.
๋ ์ด ๊ฐ์๋ก ๊ฐ์ธ์ ๋ณด ๋ณดํธ์ ๊ด๋ จํ์ฌ ๋ณด์์ ์ฑ ์ ์ ์ง์ ์ผ๋ก ๊ฐํํ๊ณ ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ Web์์ ํ์๊ฐ์ ์ Password ์ค์ ์ ๋ณต์กํด์ง ๋ณด์์ ์ฑ ์ ๋ง์ถ๋ค ๋ณด๋ ๋ณต์กํ๊ฒ ์กฐํฉํด์ผ๋ง ์ ์์
www.nextree.co.kr
์ ๋๋ก ์ ๋ ฅํ์ผ๋ฉด(join_success.jsp)๋ก ์ด๋์ด๋
ํ์ฌ๋ ๋ง๋ค์ง ์์์404์๋ฌ ๋ฐ์

๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ 1๊ณผ ๋น๋ฐ๋ฒํธ 2๊ฐ ๋์ผํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋๊ฒ ์ฝ๋๋ฅผ ์์ ํ๋ค
UserController.
@PostMapping("/join_pro")
public String join_pro(@Valid @ModelAttribute("joinUser") UserVO joinUser,
BindingResult result , Model model) {
if(result.hasErrors()) {
return "user/join";
}
if(!joinUser.getUser_pw().equals(joinUser.getUser_pw2())) {
model.addAttribute("msg", "๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ์ง ์์ต๋๋ค.!");
return "user/join";
}
return "user/join_success";
}
join.jsp ์ ์๋ฌ ๋ฉ์ธ์ง ์ถ๋ ฅ


'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๋ก๊ทธ์ธ ์ฒ๋ฆฌ (1) | 2023.10.30 |
|---|---|
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ์์ด๋ ์ค๋ณต ๊ฒ์ฌ (0) | 2023.10.27 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2- VO์์ฑ ๋ฐ MyBatis ์ค์ , ์ธํฐ์ ํฐ ์ค์ (0) | 2023.10.26 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ํ ์ด๋ธ ๋ง๋ค๊ธฐ(DB) (1) | 2023.10.26 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - BoardController, board(read,modify,write,delete.jsp)ํ์ด์ง ์์ฑ (1) | 2023.10.26 |