⛏️/Spring

[Spring] member join ver.

defyuil 2023. 12. 7. 17:47

프로젝트 생성

 

pom.xml 수정

	<properties>
		<java-version>1.11</java-version>
		<org.springframework-version>4.3.8.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
				<!-- 외부 라이브러리 추가 -->
		<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<version>8.0.32</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.1</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>5.0.1</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.30</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
			<version>1.16</version>
		</dependency>






		<!-- 외부 라이브러리 추가 -->

 

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.11</source>
                    <target>1.11</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>

 

 

study에서 파일 복사

 

root-context.xml

 

 

study의 root-context파일을 복사해 온다

	<!-- 프로젝트 전반의 설정을 준비하는 곳(웹 제외) -->
	
	<!-- hikariCP : 연결정보 저장객체 -->
	<bean id="hikariConfig"
	     class="com.zaxxer.hikari.HikariConfig">
<!-- 		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> -->
<!-- 		<property name="jdbcUrl"  value="jdbc:mysql://localhost:3306/springdb"/> -->
		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
		<property name="jdbcUrl"  value="jdbc:log4jdbc:mysql://localhost:3306/springdb"/>
		<property name="username" value="root" />
		<property name="password" value="1234"/>
	</bean>
	<!-- hikariCP : 연결정보 저장객체 -->
	
	<!-- dataSource(CP): 디비연결 -->
	<bean id="dataSource" 
	     class="com.zaxxer.hikari.HikariDataSource" 
	     destroy-method="close">
		     
		<constructor-arg ref="hikariConfig" />
	</bean>
	<!-- dataSource(CP) : 디비연결 -->
	
	<!-- dataSource : 디비연결 -->
<!-- 	<bean id="dataSource"  -->
<!-- 	      class="org.springframework.jdbc.datasource.DriverManagerDataSource"> -->
	      
<!-- 	     <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>  -->
<!-- 	     <property name="url"  value="jdbc:mysql://localhost:3306/springdb"/> -->
<!-- 	     <property name="username" value="root"/> -->
<!-- 	     <property name="password" value="1234"/> -->
<!-- 	</bean>	 -->
	<!-- dataSource : 디비연결 -->
	
	<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행,Mybatis설정) -->	
	<bean id="sqlSessionFactory" 
	     class="org.mybatis.spring.SqlSessionFactoryBean">
	     <property name="dataSource" ref="dataSource" />
	     <property name="configLocation" value="classpath:/mybatis-config.xml"/>
		 <property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"/>	
	</bean>	
	<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행,Mybatis설정) -->	
	
	<!-- sqlSession : 자동 디비연결,데이터처리(SQL실행,Mybatis설정), 자동 자원해제처리 -->
	<!--               기본적인 트랜잭션 관리,쓰레드 처리 안정성 높임  -->
	<bean id="sqlSession"
	      class="org.mybatis.spring.SqlSessionTemplate" 
	      destroy-method="close">
	      
	      <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />	      	
	
	</bean>	
	<!-- sqlSession : 자동 디비연결,데이터처리(SQL실행,Mybatis설정), 자동 자원해제처리 -->
	
	
	<!-- com.itwillbs.persistence 패키지 등록 -->
	<context:component-scan base-package="com.itwillbs.persistence" />
	
		
		
		
</beans>

 

 

 

테스트 해 보기

package com.itwillbs.controller;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
		locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"}
		)
public class MyBatisTest {
	
	private static final Logger logger = LoggerFactory.getLogger(MyBatisTest.class);
	
	@Inject
	private SqlSession sqlSession;
	
	@Test
	public void connectTest() {
		logger.debug(sqlSession+"");		
	}
	

}

 

 

 

회원가입 ver

MemberController

package com.itwillbs.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	// 회원가입 (정보 입력)
	@RequestMapping(value="/join", method=RequestMethod.GET)
	public void memberJoinGET() {
		
	}
	
	// 회원가입 (정보 처리)
	@RequestMapping(value="/join", method=RequestMethod.POST)
	public void memberJoinPOST() {
		
	}

}

 

쓰는 거 하나만 ㅇㅇ

 

@RequestMapping(value = "/members/*")

매핑 추가

 

매핑 안 됨

http://localhost:8088/controller/members/join

로 이동해 보장

 

 

 

jsp 파일 생성

// http://localhost:8088/controller/members/join

이동이동

 

jsp 페이지로 연결된 걸 확인

 

join.jsp

<body>

		<h1>/members/join.jsp</h1>
		
		<fieldset>
			<legend>스프링 MVC 회원가입</legend>
			<form action="/members/join" method="post"> // 겟방식이면 안됩니더
				아이디: <input type="text" name="userid"> <br>
				비밀번호: <input type="password" name="userpw"> <br>
				이름: <input type="text" name="username"> <br>
				이메일: <input type="text" name="useremail"> <br>
			
				<input type="submit" value="회원가입">
			</form>
		
		</fieldset>

</body>

 

어! 근데 !

			<!-- action="members/join" 주소 생략 가능
				 action 속성 정보가 없으면 자기 자신의 주소를 호출 -->
			<form method="post">

 

 

@Controller
//@RequestMapping(value = "/members/*") // 컨트롤러를 구분하는 주소 매핑  ~.me ~.bo
@RequestMapping(value = "/members/*")
public class MemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	// http://localhost:8088/controller/join	
	// http://localhost:8088/controller/members/join
	
	// http://localhost:8088/members/join 
	// 회원가입 (정보입력)
	@RequestMapping(value = "/join",method = RequestMethod.GET)
	public void memberJoinGET() {
		logger.debug(" /members/join 호출 -> memberJoinGET() 실행 ");
		// 연결된 뷰페이지로 이동
		logger.debug(" /views/members/join.jsp페이지로 이동 ");
	}
	
	
	// 회원가입 (정보처리)
	@RequestMapping(value = "/join",method = RequestMethod.POST)
	public String memberJoinPOST() {
		logger.debug("  memberJoinPOST() 호출 ");
		// 전달정보 저장
		
		// DB에 정보를 저장
		// 페이지 이동 (로그인페이지-/members/login)	
		
		return "redirect:/members/login";
		
	}
	
	
	
	
	
}

 

 

MemberVO 생성

@Data
public class MemberVO {

	private String userid;
	private String userpw;
	private String username;
	private String useremail;
	
	private Timestamp regdate;
	private Timestamp updatedate;
	
	
}

 

 

MemberController

	// 회원가입 (정보처리)
	@RequestMapping(value = "/join",method = RequestMethod.POST)
	public String memberJoinPOST(/* @ModelAttribute */ MemberVO vo) {
		logger.debug("  memberJoinPOST() 호출 ");
		//MemberVO vo = new MemberVO();
		//vo.setUserid(request.getParamater("userid"));
		// 한글처리(인코딩 설정) => 필터
		
		// 전달정보 저장
		logger.debug(" vo :"+vo);
		
		// DB에 정보를 저장
		// 페이지 이동 (로그인페이지-/members/login)		
		return "redirect:/members/login";
	}

한글 인코딩 처리 해야 됨

 

web.xml

	<filter>
		<filter-name>setUTF8</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>
	</filter>
	
	<filter-mapping>
		<filter-name>setUTF8</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

이제 한글을 쳐도

깨지지 않는다!

 

 

 

service 클래스 생성

 

MemberService

서비스 계층(비즈니스로직 계층) : 사용자의 요구사항을 구현하는 단계

=> 컨트롤러 - DAO를 연결하는 계층(접착제)

=> 외부 호출이 영속계층(디비)에 종속적인 상황을 막아 줌

public interface MemberService {
	
	// 구현 하고자하는 동작을 추상 메서드로 선언
	public void memberJoin(MemberVO vo);
    	// 컨트롤러가 전달해 준 정보를 가지고 DAO를 처리
		// DAO 객체 생성 - 회원가입 처리 메서드 호출

}

 

 

MemberServiceImpl

@Service : 스프링(root-context.xml)에서 해당 객체를 서비스로 인식

=> 서비스 객체(빈)으로 인식

@Service
public class MemberServiceImpl implements MemberService {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberServiceImpl.class);

	@Override
	public void memberJoin(MemberVO vo) {
		// TODO Auto-generated method stub
		
	}
	
}

 

 

MemberController

 

 

MemberDAO

public interface MemberDAO {
	
	// 회원가입 동작 (S-memberJoin)
	//public void memberJoin();
	public void insertMember();

}

 

 

MemberDAOImpl

@Repository
public class MemberDAOImpl implements MemberDAO {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberDAOImpl.class);
	
	@Override
	public void insertMember() {
		

	}

}

 

 

ServiceImpl

	@Inject
	private MemberDAO mdao;

에 주입

 

rootcontext에 빈 객체가 생성된 걸 볼 수 있음

 

 

MemberVO vo를 추가~

 

MemberDAOImpl

 

 

 

 

경로에 폴더, 매퍼 파일 추가

 

 

memberMapper.xml

<!-- memberMapper.xml -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

dtd 추가

 

  <mapper namespace="com.itwillbs.mapper.MemberMapper">
  
  	<!-- 회원가입 -->
  	<insert id="insertMember">
  		insert into tbl_member(userid, userpw, username, useremail)
  		values(#{userid},#{userpw},#{username},#{useremail})
  	</insert>
  
  </mapper>

매퍼 추가

 

 

DAOImpl에 추가

 

 

 

 

되는지 테스트~~

확인 완