반응형
포스팅을 보시기 전 해당하는 예제 소스는 블로그 주인(Alpreah)이 제작을 했습니다.
이점 참고 해주세요.
#1 과정을 보기전 결과 화면 및 파일
## 로그인 페이지 ##
## 회원가입 페이지 ##
## 로그인 후 페이지 ##
#2 글을 읽기 전 한번씩 읽어주세요.
부가적인 설명을 보시기 전, 마리아디비와 마이바티스를 연동을 해야 합니다.
만약, 연동을 하지 않았다면 아래의 링크를 확인 해주세요.
알카이브 파일을 넣는법을 모르신다면 아래의 링크를 참고 해주세요.
DB에 SQL을 넣는법을 모르신다면 아래의 링크를 참고 해주세요.
[Srping] heidisql에 테이블 생성 sql문 넣기
#3 설명
HomeController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | package org.alpreah.demo; import javax.inject.Inject; import javax.servlet.http.HttpSession; import org.alpreah.domain.member; import org.alpreah.persistence.member_dao; import org.springframework.context.annotation.Bean; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; @Controller public class HomeController { //싱글톤으로 선언된 것을 주입 받는다. @Inject //해당하는 클레스에서 member_dao라는 자료형을 자기는 m_dao를 선언한다. private member_dao m_dao; //GET으로 /페이지를 요청하면 @RequestMapping(value = "/", method = RequestMethod.GET) public String login() { //VIEW 폴더애 login.jsp 파일을 뷰페이지로 선언 return "login"; } //body의 값을 매핑하는 용도 @ResponseBody //POST로 Login으로 요청을 할 경우 @RequestMapping(value = "Login", method = RequestMethod.POST) //login이라는 메소드명을 가지고 매개변수는 member m, Httpsession session public int login(member m, HttpSession session) { //m_dao.Login(m, session)을 호출하고 반환한다. return m_dao.Login(m, session); } //GET으로 reigster페이지를 요청 할 경우 @RequestMapping(value = "/register", method = RequestMethod.GET) public String register() { //view안에 있는 register.jsp를 뷰페이지로 지정한다. return "register"; } //body의 값을 매핑하는 용도 @ResponseBody //POST로 /register 페이지로 요청을 할 경우 @RequestMapping(value = "/register", method = RequestMethod.POST) //메소드 이름이 register 매게변수는 member 자료형의 변수명은 m public int register(member m) { //m_dao.Register(m)의 값을 반환한다. return m_dao.Register(m); } // GET으로 /index페이지에 요청을 할 때 @RequestMapping(value = "/index", method = RequestMethod.GET) public String index() { //view폴더에 있는 index.jsp를 뷰페이지로 선언한다. return "index"; } //로그아웃 관련 페이지 // /logout으로 GET 방식으로 페이지를 접근하게 된다면 @RequestMapping(value = "/logout", method = RequestMethod.GET) //메소드 이름은 LOGOUT 매게 변수는 SESSION public String logout(HttpSession session) { //m으로 선언된 세션을 삭제시킨다. session.removeAttribute("m"); // /페이지로 리다이렉트 시킨다. return "redirect:/"; } //JSONP를 사용하기 위해 선언 @ControllerAdvice public class JsonpAdviceController extends AbstractJsonpResponseBodyAdvice { public JsonpAdviceController() { super("callback"); } } @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); jsonConverter.setObjectMapper(objectMapper); return jsonConverter; } } | //cs |
member.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package org.alpreah.domain; public class member { //해당 클래스에서 m_id, m_pw를 선언 private String m_id; private String m_pw; //Stirng값을 반환하는 get_M_id 메소드 public String getM_id() { //해당하는 클레스의 전역변수로 선언된 m_id를 반환한다. return m_id; } //반환값이 없는 setM_id 매개변수는 Stirng m_id를 가진다. public void setM_id(String m_id) { //전역 변수에 있는 m_id에 매개변수로 받은 m_id를 담는다. this.m_id = m_id; } public String getM_pw() { return m_pw; } public void setM_pw(String m_pw) { this.m_pw = m_pw; } } | cs |
member_dao.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package org.alpreah.persistence; import javax.inject.Inject; import javax.servlet.http.HttpSession; import org.alpreah.domain.member; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Repository; //자세한 설명은 구글 검색 (너무 길어져서 생략) @Repository public class member_dao { //싱글톤으로 선언된걸 주입 받음 @Inject private SqlSession session; //자신이 사용하고 싶은 mapper의 namespace 이름 private static final String NameSpace = "memberMapper."; public int Id_Check(member m) { //예외처리 try { //결과값을 반환 return session.selectOne(NameSpace + "Id_Check", m); } catch (Exception e) { //오류 발생시 오류 출력과 -1 반환 e.printStackTrace(); return -1; } } public int Register(member m) { //위에 선언된 Id_Check(m)의 결과값을 Id_Check_Result에 담는다. int Id_Check_Result = Id_Check(m); //Id_Check_Result값이 0이 아니라면 Id_Check_Result값을 반환 //0은 아이디가 중복되지 않음 자세한거는 mapper를 열어보세요. if(Id_Check_Result != 0) return Id_Check_Result; try { //sqlsession에 insert를 할꺼고 내가 쓸 맵퍼는 위에 12번째줄에 선언된거고 //내가 사용 할 QUERY문은 Register를 사용하고 넘길 값은 m이다. //이후 설명은 다 생략 똑같은 내용 session.insert(NameSpace + "Register", m); return 0; } catch (Exception e) { e.printStackTrace(); return -2; } } public int Login(member m, HttpSession Hsession) { int Id_Search_Result = -1; try { Id_Search_Result = session.selectOne(NameSpace + "Login", m); } catch (Exception e) { e.printStackTrace(); return -1; } if(Id_Search_Result != 1) return Id_Search_Result; try { member m_info = session.selectOne(NameSpace + "Login_Info", m); Hsession.setAttribute("m", m_info); return 1; } catch (Exception e) { e.printStackTrace(); return -2; } } } | cs |
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>인덱스 데모</title> </head> <body> //세션 스코프를 통해 m으로 선언된 변수명에 m_id를 찾아서 출력 ${sessionScope.m.m_id}님 안녕하세요. <br> <a href = "/demo/logout">로그아웃</a> </body> </html> | cs |
login.jsp
HTML 설명은 생략 JQUERY만 설명함
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>로그인 데모</title> </head> <body> <h3>## 로그인 페이지 ##</h3> <input type = "text" id = "m_id" placeholder="아이디"><br> <input type = "password" id = "m_pw" placeholder="비밀번호"><br> <button id = "login_process">로그인</button> <p>만약 로그인 할 계정이 없다면 <a href = "/demo/register">여기</a>를 눌러주세요.</p> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script> <script> $(document).ready(function(){ //login_process의 id를 가지는것을 클릭하게 된다면 함수 실행 $("#login_process").click(function(){ //json 객체를 생성 var json = { //m_id의 이름을 가지고 m_id의 id를 가지는 태그의 벨류값을 가져옴 아래도 동일 m_id : $("#m_id").val(), m_pw : $("#m_pw").val() }; //json을 포이치문 돌림 for(var str in json){ //json[m_id or m_pw]를 돌릴때 길이가 0이면 아래 출력 if(json[str].length == 0){ //str은 json에 변수명을 가지고 #은 아이디 찾는것 attr은 에트류뷰트의 //placeholder를 찾는것 alert($("#" + str).attr("placeholder") + "를 입력해주세요."); //포커스를 올려줌 $("#" + str).focus(); return; } } //비동기 통신 선언 (아작스) $.ajax({ type : "post", //post로 요청 url : "Login", //login url로 요청 data : json, // json데이터를 전성 success : function(data) { //성공 하면 switch (Number(data)) { //위치문 case 0: // 0 일때 alert("아이디 또는 비밀번호가 일치하지 않습니다."); //경고 출력 break; case 1: // 1 일떄 window.location.href = "/demo/index"; //로그인 성공시 index페이지 이동 default: break; } }, error : function(error) { //404 500등 오류 발생시 alert("오류 발생"+ error); } }); }); }); </script> </body> </html> | cs |
Register.jsp
Login.jsp와 동일하니 생략
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>회원가입 데모</title> </head> <body> <h3>## 회원가입 페이지 ##</h3> <input type = "text" id = "m_id" placeholder="아이디"><br> <input type = "password" id = "m_pw" placeholder="비밀번호"><br> <button id = "register_process">회원가입</button> <p>만약 로그인 할 아이디가 있다면 <a href = "/demo">여기</a>를 눌러주세요.</p> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script> <script> $(document).ready(function(){ $("#register_process").click(function(){ var json = { m_id : $("#m_id").val(), m_pw : $("#m_pw").val() }; for(var str in json){ if(json[str].length == 0){ alert($("#" + str).attr("placeholder") + "를 입력해주세요."); $("#" + str).focus(); return; } } $.ajax({ type : "post", url : "register", data : json, success : function(data) { switch (Number(data)) { case 0: alert("정상적으로 회원가입 되었습니다."); window.location.href = "/demo"; break; case 1: alert("아이디가 중복 되었습니다."); break; default: alert("알수없는 오류가 발생 했습니다. [Error Code :" + Number(data) + "]"); break; } }, error : function(error) { alert("오류 발생"+ error); } }); }); }); </script> </body> </html> | cs |
memberMapper.xml
쿼리문을 담아두는곳
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 해당하는 맵퍼의 네임스페이스를 memberMapper 선언 --> <mapper namespace="memberMapper"> <!-- select를 하는 구문으로 선언을 하고 select 하는 질의어의 고유ID는 Id_Check로 선언 반환값은 INT--> <select id = "Id_Check" resultType="int"> <!-- 검색을 하는데 갯수를 출력해라 MEMBER 테이블에 해당하는 테이블의 별칭은 m으로 선언한다. --> select count(*) from member m <!-- 검색을 하는데 m테이블에 m_id 는 매개변수로 받아온 m_id와 동일해야 한다. --> where m.m_id = #{m_id} <!-- 결과 : 0이면 아이디 중복 x 1이면 중복 검색 결과가 없으면 0으로 나옴 아래는 다 생략 동일하니--> </select> <insert id = 'Register'> INSERT INTO member (m_id, m_pw) VALUES (#{m_id}, #{m_pw}) </insert> <select id = "Login" resultType="int"> select count(*) from member m where m.m_id = #{m_id} and m.m_pw = #{m_pw} </select> <select id = "Login_Info" resultType="Member"> select * from member m where m.m_id = #{m_id} and m.m_pw = #{m_pw} </select> </mapper> |
반응형
'스프링(Spring) > 스프링 개발자료 배포' 카테고리의 다른 글
[Spring] 간단한 게시판과 간단한 디자인 예제 소스 (0) | 2018.12.07 |
---|---|
[Spring] 간단한 게시판 등록 예제 소스 (9) | 2018.12.05 |