본문 바로가기

IT I 프로그래밍/자바 I 스프링 DB

[6] 스프링(Spring Tools 4) DB : 회원가입 만들기

[6] 스프링(Spring Tools 4) DB : 회원가입 만들기

 

1. 신규 프로젝트 만들기(Spring Legacy Project)

> package explorer 오른쪽마우스 > new > other > Spring > Spring Legacy Project > Next 클릭

> Templates > Spring MVC Project > Project name : CrudMember > Next 클릭

> 패키지명 작성 com.bc.app > Next 클릭

참조 문서

 

 

------------------------------------------------------------------------------------------------------------

2. 개발 실행 환경 버전 세팅하기 (Project Facets)

> CrudMember 프로젝트 오른쪽마우스 > Properties > Project Facets > Dynamic Web Module : 3.1 / Java : 1.8 > Apply 버튼 > Java Compiler 에서 1.8버젼 확인 > Apply and Close 클릭 > Yes클릭

참조 문서

 

 

------------------------------------------------------------------------------------------------------------

3. 개발 실행 환경 버전 세팅하기 (Pom.xml)

> 자바(JDK) & 스프링프레임워크 & 서블릿 & JSP 버전 세팅 > 메이븐 설정

 

 

------------------------------------------------------------------------------------------------------------

4. 디펜던시 추가 (Pom.xml)

참조 문서

----------------------------------------------------------------------------------------

<!-- dependencies 는 dependency들의 모음. 여기에 dependency를 추가하면 jar파일 추가와 같다. 자동으로 라이브러리 추가됨 -->          
      <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.25</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-dbcp2</artifactId>
          <version>2.8.0</version>
      </dependency>             
      <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
      <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.2</version>
      </dependency>                   
      <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-pool2</artifactId>
          <version>2.9.0</version>
      </dependency>       
      <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>       
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>5.3.9</version>
      </dependency>

 

 

------------------------------------------------------------------------------------------------------------

5. DB Pool 설정 (root-context.xml)

> src > main > webapp > WEB-INF > spring > root-context.xml

----------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  xsi:schemaLocation="http://www.springframework.org/schema/jdbc   
  http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
  http://www.springframework.org/schema/beans   
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util-3.1.xsd">
   <!-- Root Context: defines shared resources visible to all other web components -->
   <bean name="dsdbcp" class="org.apache.commons.dbcp2.BasicDataSource"  destroy-method="close">
      <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost:3306/jspdb?characterEncoding=utf8"/>
      <property name="username" value="root"/>
      <property name="password" value="1234"/>
      <property name="initialSize" value="5"/>
      <property name="maxIdle" value="5"/>
   </bean>    
    <bean id="jdbcTmp" class="org.springframework.jdbc.core.JdbcTemplate">
       <constructor-arg ref="dsdbcp"/>
    </bean>  
</beans>

 

 

------------------------------------------------------------------------------------------------------------

6. 한글 처리 필터 설정 (Web.xml)

> src > main > webapp > WEB-INF >views > web.xml > *<listener>하단(13번째줄)에 작성

참조 문서

----------------------------------------------------------------------------------------

<!--  한글 처리 필터 -->
   <filter> 
       <filter-name>EncodingFilter</filter-name> 
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
       <init-param> 
          <param-name>encoding</param-name> 
          <param-value>UTF-8</param-value> 
       </init-param> 
       <init-param> 
          <param-name>forceEncoding</param-name> 
          <param-value>true</param-value> 
       </init-param> 
    </filter>     
    <filter-mapping> 
       <filter-name>EncodingFilter</filter-name> 
       <url-pattern>/*</url-pattern> 
    </filter-mapping>

 

 

------------------------------------------------------------------------------------------------------------

7. *.do 설정 (Web.xml)

> src > main > webapp > WEB-INF >views > web.xml

----------------------------------------------------------------------------------------

<servlet-mapping>

 <servlet-name>appServlet</servlet-name>

 <url-pattern>*.do(변경)</url-pattern>

</servlet-mapping>

 

------------------------------------------------------------------------------------------------------------

8. 웰컴 파일 리스트 작성 (Web.xml / homecontroller.java)

8-1. Web.xml

> src > main > webapp > WEB-INF >views > web.xml > 6번째줄 ...com/xml/ns/javaee/web-app_2_5.xsd" 하단에 작성

----------------------------------------------------------------------------------------

   <welcome-file-list>
      <welcome-file>main.do</welcome-file>
   </welcome-file-list>

-----------------------------------------------------------------------------------------

8-2. HomeController.java

@RequestMapping(value = "/main.do(변경)")

public String home(Model model){

 return "main";

 

------------------------------------------------------------------------------------------------------------

9. main.jsp 작성 (main.jsp)

> src > main > webapp > WEB-INF >views 오른쪽 마우스 > new > others > Wizards 'jsp'입력 > JSP File 선택 > File Name 'main.jsp'입력

 

----------------------------------------- 중간확인 Run On Server --------------------------------------

10. 데이터베이스 만들기 (main.jsp)

----------------------------------------------------------------------------------------

CREATE TABLE spmember(
   idx INT PRIMARY KEY AUTO_INCREMENT,
   id VARCHAR(200) UNIQUE NOT NULL,
   pw VARCHAR(200) NOT NULL,
   NAME VARCHAR(50) NOT NULL,
   email VARCHAR(200)
);

 

------------------------------------------------------------------------------------------------------------

11. Dto 만들기(SpMemberDTO.java)

11-1. Dto를 패키지로 분류(com.hs.app.bean)

> src/main/java 오른쪽 마우스> Package > new > com.hs.app.bean > Finish 클릭

 

11-2. Class 만들기 (SpmemberDTO)

> src/main/java 오른쪽 마우스> Class > new > SpmemberDTO > Finish 클릭

----------------------------------------------------------------------------------------

package com.hs.app.bean;

 

import org.springframework.stereotype.Component; // @Component 작성시 자동으로 import

 

// 11-2-1 변수 생성 (DB에서 필요한 것 들을 가져온다.)

public class SpmemberDTO {

 private int idx;
 private String id;
 private String pw;
 private String name;
 private String email;

// 11-2-2 생성자 생성

// > 편집 창오른쪽 마우스> Source > Generate Constructor using Fields

// > Select fields to initialize > idx제외 모두 선택(회원가입할 때는 idx는 값을 자동으로 생성하고 어디서 받는게 없으므로 뺀다) > Generate 클릭 > super();삭제(필요없음)

 public SpmemberDTO(String id, String pw, String name, String email) {
 this.id = id;
 this.pw = pw;
 this.name = name;
 this.email = email;

 }

// 11-2-3 게터&세터 생성

// > 편집 창오른쪽 마우스> Source > Generate Getters and Setters > Select fields > Select All > Generate 클릭
 public int getIdx() {
 return idx;
 }
 public void setIdx(int idx) {
 this.idx = idx;
 }
 public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getPw() {
 return pw;
 }
 public void setPw(String pw) {
 this.pw = pw;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
this.name = name;
 }
 public String getEmail() {
 return email;
 }
 public void setEmail(String email) {
 this.email = email;
 }
}

package com.hs.app.dao;

public class SpMemberDAO {

}

 

 

------------------------------------------------------------------------------------------------------------

12. Dao 만들기(SpMemberDAO.java)

12-1. Dao를 패키지로 분류(com.hs.app.dao)

> src/main/java 오른쪽 마우스> Package > new > com.hs.app.dao > Finish 클릭

12-2. Class 만들기 (SpMemberDAO)

> src/main/java 오른쪽 마우스> Class > new > SpMemberDAO > Finish 클릭

----------------------------------------------------------------------------------------

package com.hs.app.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; // 12-2-2. JdbcTemplate을 작성하면 자동으로 import
import org.springframework.stereotype.Repository; // 12-2-1. @Repository작성하면 자동으로 import

import com.hs.app.bean.SpmemberDTO; // 12-2-4. SpmemberDTO dto 작성하면 자동으로 import
// 12-2-1. @Repository 작성

// @Repository 애노테이션은 해당 클래스를 최상위 컨테이너(루트컨테이너)에 빈 객체로 생성해줌

// @Repository로 등록 된 것을 @Autowire로 연결시켜 사용한다. 

@Repository
public class SpMemberDAO {

// 12-2-3. @Autowired 작성

 @Autowired

// @Autowire를 적으면 @Repository 등록된 것을 땡겨 쓸 수 있다. 즉 오토로 줄을 연결해준다는 의미

// 12-2-2. JdbcTemplate 작성

 private JdbcTemplate jdbcTmp;

// 12-2-4. insert 쿼리문 작성

 private String insertMember ="insert into spmember values(null, ?, ?, ?, ?)";

// 12-2-5. memberInsert() 메소드 작성

// 메서드명이 update인 이유 : insert, update, delete는 실제 database의 내용이 갱신되므로 메서드 이름이 update이다

 public int memberInsert(SpmemberDTO dto) {
 return jdbcTmp.update(insertMember, dto.getId(), dto.getPw(), dto.getName(), dto.getEmail());
 }

}

 

------------------------------------------------------------------------------------------------------------

13. DB에 값이 들어갈 수 있도록 insert 기능 구현

13-1. MVC

// 13-1.1. main.jsp 수정 (main.jsp)

<body>
 <a href="MemberRegist">회원가입</a>

 <a href="MemberList">회원목록</a>

</body>

// 13-1.2. regist.jsp 작성(regist.jsp)

 <form action="RegistProc.do" method="post">
  <table border="1">
   <tr><td>아이디</td><td><input type="text" name="id"></td></tr> 
   <tr><td>비밀번호</td><td><input type="text" name="pw"></td></tr> 
   <tr><td>이름</td><td><input type="text" name="name"></td></tr> 
   <tr><td>이메일</td><td><input type="text" name="email"></td></tr> 
  </table>
  <input type="submit" name="회원가입">
 </form>

 

13-2. MVC : HomeController.java 수정

// 13-2.3. SpMemberDAO dao 객체 생성 및 @Autowired로 세팅

@Autowired
SpMemberDAO dao;

// 13-2.1. Url&Jsp파일 맵핑(MemberRegist.do - regist.jsp)

@RequestMapping("/MemberRegist.do")
public String regist() {
return "regist";
}
// 13-2.2. Url&리다이렉션 맵핑(RegistProc.do - redirect:/main.do)
@RequestMapping("/RegistProc.do")
public String registProc(SpmemberDTO dto) { // String타입을 반환하는registProc()

// 13-2.4. dao메소드 실행 (memberInsert(dto);)
dao.memberInsert(dto);

// DAO 안(SpMemberDAO.java)에 있는memberInsert()를 처리한다

// private String insertMember ="insert into spmember values(null,?,?,?,?)";
// public int memberInsert(SpmemberDTO dto) { // dto의 모든 것을 가져온다.
// return jdbcTmp.update(insertMember, dto.getId(), dto.getPw(), dto.getName(), dto.getEmail());
// }

return "redirect:/main.do";
}

 

------------------------------------------------------------------------------------------------------------

14. DB에 값을 삭제하도록 delete 기능 구현

14-1. MVC : SpMemberDAO.java 수정

// 14-1.1. SQL문 작성

private String insertMember ="insert into spmember values(null,?,?,?,?)"; 

//상단의 형태와 하단의 형태는 똑같다

@Value("delete from spmember where idx=?")
private String deleteMember;

public int memberInsert(SpmemberDTO dto) {
return jdbcTmp.update(insertMember, dto.getId(), dto.getPw(), dto.getName(), dto.getEmail());
}

// 14-1.2. 메소드 작성(memberDelete())
public int memberDelete(int idx){
return jdbcTmp.update(deleteMember, idx);
}