게시판2) 회원가입 페이지

내용이 많기 때문에 모든 부분을 다 다루기 보다는, 중요한 부분만을 다룰것이다.
  • jsp와 controller 가 어떻게 정보를 주고 받는지 모르는 사람은 여기를 먼저 보고 오세요
  • index 화면 구상을 아직 하지 않아서 코드로만ㅎㅎ..
  • 아래 회원가입을 누르면 join 이라는 요청이 controller로 날아가게 한다. get method로 날아간다.

FRONTEND

index.jsp

<li><a href = "join">회원가입</a></li>

controller - @RequestMapping(“/join”)

@Controller
public class MemberController {
    @RequestMapping("/join")
    public String join() {
        return "member/joinForm";
    }

member/joinForm.jsp

1124sp9

js 파일의 위치

  • member/joinForm.jsp의 header에는 다음과 같은 코드가 있다.

    <head>
        <script src="script/validation.js"></script>
    </head>
    
  • 이 js파일은 엉뚱하게

    1125sp3 src/main/webapp/resources/script 아래에 있다.

    이 경로를 인식시켜주기 위해서 servlet-context에 다음과 같은 코드를 넣어준다.

    1125sp2

    <resources mapping="/script/**" location="/resources/script/" />
    

form의 id와 action

<form id="form" action = "join" method ="POST">

id는 js에서 validation 을 마친 후 제출할 때 사용되어진다.

var form = document.getElementById("form");
form.submit();

action 과 method는 Controller의 메쏘드와 mapping 되는 정보를 준다.

아래 함수로 mapping 된다.

@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(Member member) {
    System.out.println(member);
    return "index";
}

select와 for문

  • 페이지 위에 페이지 jstl을 이용하기 위한 페이지 지시자를 사용해야한다.
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 아래와 같이 forEach문과 option 을 같이 사용해 쉽게 설렉트 박스를 만들 수 있다.
  • begin 과 end로 시작과 끝 값을 줄 수 있다.
<th>생년월일</th>
<td><select id ="birthyear"><!-- 1960~2000 -->
    <c:forEach var="year" begin="1960" end="2000" >
        <option>${year}</option>
    </c:forEach>
    </select>

hidden으로 서버에 정보 넘기기

일단 ‘회원가입’ 버튼을 누르면 생년, 월,일의 정보의 유효성을 확인한다.

<input type = "hidden" id= "birth" name="birth">
  • 만약 정보가 제대로 들어갔다면, js에서 생년월일을 하나의 string 으로 저장해 hidden tag의 value로 꽂아준다.

javascript

birth = birthyear.value +'-'+ birthmonth.value + "-" + birthday.value ;
document.getElementById("birth").value = birth;
//위 코드 실행 후 다음과 같이 value가 꽂힌다.
//<input type = "hidden" id= "birth" name="birth" value = 2010-03-21>
  • 그 후 서버에 정보를 넘길 수 있게 form.submit()을 해준다.

javascript

var form = document.getElementById("form");
form.submit();

form. submit()의 명령을 하면, action = “join”, method = “POST”의 정보가

<form id="form" action = "join" method ="POST">

Controller 의 함수와 매치된다. contoller의 code는

@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(Member member) {
    //CODE
}

BACKEND

  • 매퍼 파일인 memberMapper.xml 에 다음과 같은 코드를 삽입해준다.
  • 이 전 블로그 포스트 여기에 나름 친절하게 나와있어서 이 포스트에서는 간단하게 코드와 흐름만 볼 것이다.
  • insert id =”join”이고, 이것이 interface의 메소드 명과 매치되고, 그 메소드의 인자 타입을 parameterType 에 적어주면 된다.
<mapper namespace="sesoc.intern.board.dao.MemberMapper">
    <insert id="join" parameterType="Member">
        INSERT INTO member
        VALUES
        (
        #{userid}
        ,#{userpwd}
        ,#{username}
        ,#{gender}
        ,#{email}
        ,#{phone}
        ,#{hobby}
        ,#{birth}
        ,#{address}
        )
    </insert>
</mapper>
  • interface
public interface MemberMapper {
    public int join(Member mebmer);
}
  • repository에서 interface를 이용해 member를 join 시키고 그 결과로 int를 받아 return 한다. int가 리턴되는 것은 mapper.xml 에서 코드가 실행된 후 나타난다.
public class MemberRepository {
    @Autowired
    SqlSession session;
    public int join(Member member) {
        MemberMapper  mapper = session.getMapper(MemberMapper.class);
        int result = mapper.join(member);
        return result;
    }
}
  • Controller에서는 Autowired로 repository 객체를 불러서 join 작업을 해준다.
@Controller
public class MemberController {
    @Autowired
    MemberRepository repository;

    @RequestMapping(value = "/join", method = RequestMethod.POST)
    public String join(Member member) {
        System.out.println(member);
        int result =repository.join(member);
        if(result ==1) {
            System.out.println("회원가입 성공");
        }else {
            System.out.println("회원가입 실패");
        }
        return "index";
    }
}

◇ Spring 게시판 포스팅 시리즈 ◇

  1. Spring 과 DB 연결하기
  2. 회원 가입 화면 구성 - 현재 글
  3. ID 중복 확인 하기
  4. 로그인 페이지 만들기
  5. 게시판 화면 구성하기
  6. 글 쓰기 기능 구현
  7. 글 확인 기능 구현
  8. 글 수정 기능 구현
  9. 게시판 페이징
  10. 파일 첨부 기능
  11. 파일 다운 기능
  12. MIME 타입
  13. 글 수정시 파일 변경

© 2018. All rights reserved.

Powered by Hydejack v8.5.2