SPRING 정적 파일

* src/main/webapp/resources폴더안에 생성

css파일 불러올 땐 <link>, javascript파일 불러올 땐 <script>

* servlet-context.xml(16번째 줄)에서 경로 조절 가능

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>

<c:set var="url" value="<%= request.getContextPath() %>"></c:set>
<html>
<head>
	<title>Home</title>
	<link href="${url}/css/test.css" rel="stylesheet">
	<link href="${url}/css/test2.css" rel="stylesheet">
	<script type="text/javascript" src="${url}/js/test.js"></script>
</head>
<body>
<c:url value="/resources/img/asdf.png" var="path" /> 
path: ${path }<br>
req : <%= request.getContextPath() %>/img/asdf.png<br>
page : ${pageContext.request.contextPath }/img/asdf.png<br>
<img src="${path}" width="100" height="100">
<h1>
	Hello world!!!!!!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
<button type="button" onclick="test()">클릭</button>
</body>
</html>

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING cookie 

쿠키 생성

HttpServletResponse를 컨트롤러에서 받아온다.

Cookie c = new Cookie("쿠키명", "쿠키값");

c.setMaxAge(5) : 쿠키 5초 유지

res.addCookie(c) : 쿠키 추가

c.setPath("경로") : 쿠키 path 지정

 

쿠키 받아오기 (모든 쿠키)

HttpServletRequest를 컨트롤러에서 받아온다.

req.getCookies() : 쿠키값 받아오기(배열 형식으로 받아온다)

 

원하는 쿠키만 받기

@CookieValue(value="해당 쿠키명", required = false) Cookie 저장할 변수명

: 해당하는 쿠키값은 변수명에다가 저장한다, 존재하지 않을 경우 null로 표현

 

* document.cookie : 자바스크립트상에서 쿠키값 받아오는 방법(이름, 밸류 다 나옴)

* split을 통해 이름과 밸류를 나눈다(배열 형식으로 저장)

* 인덱스 번호를 통해 본인의 쿠키가 맞는지 확인

package com.care.ex01;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class CookieController {

	@GetMapping("cookie")
	public String myCookie(HttpServletResponse res, 
						HttpServletRequest req,
						@CookieValue(value="myCookie", required = false) Cookie cook) {
		System.out.println("cook : " + cook);
		System.out.println(cook.getName());
		System.out.println(cook.getValue());
		Cookie cookie = new Cookie("myCookie", "testCookie");
		cookie.setMaxAge(5);
		res.addCookie(cookie);
		Cookie[] arrCookie = req.getCookies();
		for (Cookie c : arrCookie) {
			System.out.println("name : " + c.getName());
			System.out.println("value : " + c.getValue());
		}
		return "cookie/cookie";
	}
	@GetMapping("cookie02")
	public String myCookie02(Model model, 
						@CookieValue(value="myCookie", required = false) Cookie cook) {
		if (cook != null) {
			model.addAttribute("cook", cook.getValue());
		}
		return "cookie/cookie02";
	}
	@GetMapping("popup02")
	public String pop02() {
		return "cookie/popup02";
	}
	@GetMapping("cookieChk")
	public void cookieChk(HttpServletResponse res) {
		Cookie cook = new Cookie("myCookie", "testCookie");
		cook.setMaxAge(5);
		cook.setPath("/");
		res.addCookie(cook);
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function popup() {
		let url = "popup02";
		let setWindow = "width=300, height=200, top=500, left=500";
		//if ("${cook}" == "") {
		//	window.open(url, "", setWindow);
		//}
		console.log("cook : " + document.cookie)
		let cookie = document.cookie.split("=");
		console.log("cook : " + cookie)
		console.log("cook : " + cookie[0])
		console.log("cook : " + cookie[1])
		if (cookie[0] != "myCookie") {
			window.open(url, "", setWindow);
		}
	}
</script>
</head>
<body onload="popup()">
	cook : ${cook }<br>
	쿠키 페이지
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function chk() {
		location.href="cookieChk";
		window.close();
	}
</script>
</head>
<body>
	<h3>팝 업 창</h3>
	<hr>
	<input id="check" type="checkbox" onclick="chk()">
	<label for="check">하루동안 열지않음!!!</label>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING session

HttpSession session = req.getSession(); : 세션 생성

session.setAttribute("키", "밸류") : 세션 추가

* 부여하는 세션 이름이 겹칠 경우, sessionScope.이름 을 사용하면 확인 가능

session.removeAttribute("키명") : 특정 세션만 삭제

session.invalidate() : 모든 세션 삭제

* HttpSession session을 받아와서 처리 가능

package com.care.ex01;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SessionController {
	
	@GetMapping("makeSession")
	public String makeSession(HttpServletRequest req) {
		HttpSession session = req.getSession();
		session.setAttribute("id", "aaa");
		session.setAttribute("name", "홍길동");
		session.setAttribute("age", "20");
		return "session/makeSession";
	}
	@GetMapping("resultSession")
	public String resultSession(Model model) {
		model.addAttribute("id", "asdf모델");
		return "session/resultSession";
	}
	@GetMapping("delSession")
	public String delSession(HttpServletRequest req, 
							HttpSession session) {
		HttpSession s = req.getSession();
		System.out.println("s.id : " + s.getAttribute("id"));
		s.removeAttribute("id");
		System.out.println("session.name : " + session.getAttribute("name"));
		session.invalidate();
		return "session/delSession";
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>세션 설정</h3>
	id : ${id }<br>
	name : ${name }<br>
	age : ${sessionScope.age }<br>
	req.age : <%= session.getAttribute("age") %>
	<hr>
	<a href="resultSession">세션 확인</a>
	<a href="delSession">세션 삭제</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>세션 확인</h3>
	id : ${id }<br>
	sessionScope.id : ${sessionScope.id}<br>
	name : ${name }<br>
	age : ${sessionScope.age }<br>
	req.age : <%= session.getAttribute("age") %>
	<hr>
	<a href="makeSession">세션 설정</a>
	<a href="delSession">세션 삭제</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>세션 삭제</h3>
	id : ${id }<br>
	sessionScope.id : ${sessionScope.id}<br>
	name : ${name }<br>
	age : ${sessionScope.age }<br>
	req.age : <%= session.getAttribute("age") %>
	<hr>
	<a href="makeSession">세션 설정</a>
	<a href="resultSession">세션 확인</a>
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING session 활용(login)

* session은 jsp파일에서도 설정 가능, controller에서도 설정 가능

package com.care.ex01;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SessionController {
	
	@GetMapping("makeSession")
	public String makeSession(HttpServletRequest req) {
		HttpSession session = req.getSession();
		session.setAttribute("id", "aaa");
		session.setAttribute("name", "홍길동");
		session.setAttribute("age", "20");
		return "session/makeSession";
	}
	@GetMapping("resultSession")
	public String resultSession(Model model) {
		model.addAttribute("id", "asdf모델");
		return "session/resultSession";
	}
	@GetMapping("delSession")
	public String delSession(HttpServletRequest req, 
							HttpSession session) {
		HttpSession s = req.getSession();
		System.out.println("s.id : " + s.getAttribute("id"));
		s.removeAttribute("id");
		System.out.println("session.name : " + session.getAttribute("name"));
		session.invalidate();
		return "session/delSession";
	}
	@GetMapping("login")
	public String login() {
		return "session/login";
	}
	@PostMapping("check")
	public String check(@RequestParam String id, 
							@RequestParam String pwd,
							HttpSession session) {
		
		String DB_id = "1", DB_pwd = "1";
		if (DB_id.equals(id) && DB_pwd.equals(pwd)) {
			session.setAttribute("loginUser", id);
			session.setAttribute("nick", "홍길동");
			return "session/main";
		}
		return "redirect:login";
	}
	@GetMapping("logout")
	public String logout(HttpSession session) {
		if (session.getAttribute("loginUser") == null) {
			return "redirect:login";
		}
		session.invalidate();
		return "session/logout";
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:choose>
		<c:when test="${loginUser == null }">
			<form action="check" method="post">
				<input type="text" name="id"><br>
				<input type="text" name="pwd"><br>
				<input type="submit" value="로그인"><br>
			</form>
		</c:when>
		<c:otherwise>
			${nick}님 로그인 상태<br>
			<a href="logout">로그아웃</a>
		</c:otherwise>
	</c:choose>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	${nick }님 환영합니다<br>
	<a href="logout">로그아웃</a>
	<a href="login">로그인</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<script type="text/javascript">
		alert("로그아웃 성공!!");
		location.href="login";
	</script>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING database (1)

단위 테스트 : 각각의 메소드 별로 테스트

통합 테스트 : 단위테스트를 통한 메소드들을 결합하여 테스트

 

단위 test

test를 하기위한 기능 가져오기

https://mvnrepository.com/  - spring-test 검색 - 첫번째 클릭 - 아무거나 버전(6.1.3) - maven내용 복사

- pom.xml(118번쨰줄 밑) 붙여넣기 - 해당 버전 대신 ${org.springframework-version}작성

* ${org.springframework-version} : 알아서 버전 설정

 

JUnit을 실행하기 위한 라이브러리 추가

프로젝트 우클릭 - Properties - Java Buid Path - Libraries - Add Library - JUnit선택 - next - JUnit-4선택 - finish - apply

 

서버 구동하지않고, test를 구동하기 때문에 test전용 xml파일 작성

test전용 xml파일 - Namespaces - context 체크

Source - <context:component-scan base-package="해당 test클래스 패키지" />

 

test클래스에서 작성해야하는 것들

@RunWith(SpringRunner.class) : @Autowired에 해당하는 것들을 확인하도록 설정

@contextConfiguration(locations={"classpath:해당하는 test의 xml파일"}) : 해당하는 파일을 진행

@Autowired 클래스명 변수명 : test를 통해 확인하고 싶은 클래스

@Test : 해당하는 메소드 생성하고, 해당 메소드를 통해 확인

assertNotNull(확인하고싶은 클래스의 변수명) : 성공인지 실패인지 알려줌(성공 = 초록, 실패 = 빨강)

해당메소드 클릭 후 ctrl + F11

 

 

DB 연동

* connection pool : 미리 만든 값을 빌려와서 사용(효율적)

* mybatis : 명령어를 통해 실행하도록 해주는 역할

 

hikaricp 추가

https://mvnrepository.com/ - hikaricp 검색 - 첫번째 클릭 - 3.3.1버전 클릭 - maven내용 복사 

- pom.xml -  붙여넣기

jdbc 추가

https://mvnrepository.com/ - spring jdbc 검색 - 첫번째 클릭 - 아무버전 클릭 - maven내용 복사

- pom.xml  -붙여넣기 - 해당 버전 대신 ${org.springframework-version}작성

mybatis 추가

https://mvnrepository.com/ - mybatis 검색 - 첫번째 클릭 - 3.4.6버전 클릭 - maven내용 복사

- pom.xml  -붙여넣기 

mybatis(2) 추가

https://mvnrepository.com/ - mybatis 검색 - 두번째 클릭 - 1.3.2버전 클릭 - maven내용 복사

- pom.xml  -붙여넣기 

ojdbc 추가

cmd - sqlplus - db버전 확인

11버전일 경우

https://mvnrepository.com/ - ojdbc6 검색 - 첫번째 클릭 - 11.2.0.1버전 클릭 - maven내용 복사

- pom.xml  -붙여넣기 

19버전 이상일 경우

https://mvnrepository.com/ - ojdbc8 검색 - 첫번째 클릭 - cmd로 확인한 버전 클릭 - maven내용 복사

- pom.xml  -붙여넣기 

 

db 설정(연결)

위에 설정한 값들 추가(객체 생성)

root-context.xml - bean 및 property 생성

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="username" value="c##LTY"></property>
<property name="password" value="1213"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
</bean>

<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig"></constructor-arg>
</bean>
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"></property>
</bean>

 

mybatis 설정

* mybatis는 memberMapper.xml에서 실행한다

mybatis 검색 - 첫번째 - Getting Started - (Exploring Mapped SQL Statements)에 해당하는 문장 복사 - 

resources/mappers/member/memberMapper.xml - 붙여넣기

- 필요없는것 지우기 - namespace="dao경로" 작성

root-context.xml - Namsapace - (mybatis -spring) 체크

Source - <mybatis-spring:scan base-package="dao경로" /> 

 

* dao에 지정한 메소드명과, mapper.xml에 지정한 <insert>태그 안에 id와 일치하면 실행

넘어온 값은 #{}으로 받는다

 

 

 

통합 test

* @Before : @test전에 실행 된다(초기화 목적)

 

* 통합 테스트를 하기 위해서 Mock이 필요.

* 따라서 import가 알아서 안되기 때문에 입력해야함

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;

 

MockMvc mock = MockMvcBuilders.standaloneSetup("객체").build : 해당 객체를 동작하는 mock 생성

mock.perform(post("/경로").param("id", "1234").param("name", "아무나"))

: 해당 경로로 post방식으로 요청을 보내고, id와 name이라는 파라미터를 설청하여 요청을 보낸다

.andDo(print()) : 요청 및 응답을 출력

.andExpect(forwardedUrl("index")) : 위에 경로의 요청을 처리한 후, index페이지로 forward한다

 

.andExpect(status().isOk()) : status가 200이라면

* Status = 200 : 성공

 

아무 xml(root-context.xml) -  <bean id="txMgr" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"></property>
</bean>

: 해당 내용을 실행하고, rollback한다

@Transactional(transactionManager = "txMgr") : rollback기능을 하고싶은 클래스에 추가하는 방법

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING db (2)

resultMap : dto값과 db컬럼명이 다를 수 있기 때문에

primary key = <id/>

나머지 = <result/> (proerty = "dto 명", column = "db 컬럼명")

<select> 태그 안에 resultMap="resultMap의 id명" : resultMap 적용

* model().attributeExists("키명") : 모델의 해당 키까지 접근 가능한지 확인

* redirect가 일어날 경우 status가 302이기 때문에, .andExpect(status().is3xxRedirection()); 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 01

풀이 과정

위에서 알려준 기본 세팅 작업 후(db 연동 및 encoding)

* ( RedirectAttributes rs )라는 파라미터를 받아오면, redirect를 해도 rs.addAttribute()를 통해 전달 가능

model처럼 따로 보내주는것을 명시 안해도, redirect면 넘어간다.

 

* 세션명들은 공통파일에서 따로 관리해도 효율적이다 (해당 컨트롤러에서 공통파일을 상속받아 사용 가능)

ex) common파일을 생성 후, 해당하는 common파일에 각 세션들의 키명을 변수로 지정해놓고, 꺼내와서 사용

 

*mapper.xml 파일 안에서도 if문 등을 사용 할 수 있다

<if test="조건">sql문</if>을 사용하여, 예를들어 같은 select문인데 조금 다른 경우 사용

@Param("변수명") String id : 해당하는 부분은 dao부분에서 mapper.xml로 보내준다.

 

 

header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style type="text/css">
		ul li{ display: inline; padding: 0 10px;}
	</style>
</head>
<body>
	<div align="center">
		<h1 style="color: burlywood; font-size: 60px; font-family: Gabriloa;">
			CARE &nbsp; LAB	
		</h1>
	</div>
	<div align="right">
		<hr>
		<c:set var="log" value='<%=session.getAttribute("id") %>' />
		<c:choose>
			<c:when test="${log eq null }">
				<ul>
					<li><a href="/root/index">HOME</a></li>
					<li><a href="/root/member/login">회원 정보</a></li>
					<li><a href="/root/member/login">로그인</a></li>
				</ul>
			</c:when>
			<c:otherwise>
				<ul>
					<li><a href="/root/index">HOME</a></li>
					<li><a href="/root/member/info">회원 정보</a></li>
					<li><a href="/root/member/logout">로그아웃</a></li>
				</ul>
			</c:otherwise>
		</c:choose>

		<hr>
	</div>
</body>
</html>

 

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div align="center">
		<table>
			<tr>
				<td align="center">
					<h3>내 사전에 불가능은 없다<br>
						불가능은 소극적인 자의 환영이며<br>
						비겁한 자의 도피처 이다.<br>
					</h3>
				</td>
			</tr>
			<tr>
				<td align="right">
					<h3>- 나폴레옹</h3>
				</td>
			</tr>
		</table>
	</div>
</body>
</html>

 

footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div align="center" style="padding-top: 100px">
		<hr>
		<i style="color: pink; font-size: 30px; font-family: Gabriola;">
			Copyright © CARE Lab. All rights reserved.
		</i>
	</div>
</body>
</html>

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="default/header.jsp"></c:import>
	<c:import url="default/main.jsp"></c:import>
	<c:import url="default/footer.jsp"></c:import>
</body>
</html>

 

HomeController.java

package com.care.root;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

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

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	@GetMapping("index")
	public String index() {
		return "index";
	}
}

 

MemberController.java

package com.care.root.member.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.care.root.member.dto.MemberDTO;
import com.care.root.member.service.MemberService;

@Controller
@RequestMapping("member")
public class MemberController {
	@Autowired MemberService ms;
	
	@GetMapping("login")
	public String login() {
		return "member/login";
	}
	
	@PostMapping("successLogin")
	public String check(MemberDTO dto, HttpServletRequest req, Model model) {
		int result = ms.check(dto);
		if (result == 1) {
			HttpSession session = req.getSession();
			session.setAttribute("id", dto.getId());
			model.addAttribute(session);
			return "member/successLogin";
		}else {
			return "redirect:login";
		}
	}
	@GetMapping("logout")
	public String logout(HttpServletRequest req, Model model) {
		HttpSession session = req.getSession();
		session.invalidate();
		return "index";
	}
	@GetMapping("info")
	public String info(Model model) {
		ArrayList<MemberDTO> info = ms.info();
		model.addAttribute("info", info);
		return "member/info";
	}
	@GetMapping("memberInfo")
	public String memberInfo(@RequestParam("id") String id, Model model) {
		ArrayList<MemberDTO> memberInfo = ms.memberInfo(id);
		model.addAttribute("memberInfo", memberInfo);
		return "member/memberInfo";
	}
	@GetMapping("register")
	public String register() {
		return "member/register";
	}
	@PostMapping("registerSuccess")
	public String registerSuccess(MemberDTO dto) {
		int result = ms.registerSuccess(dto);
		if (result == 1) {
			return "redirect:login";
		}
		return "redirect:register";
	}
}

 

MemberService.java

package com.care.root.member.service;

import java.util.ArrayList;

import com.care.root.member.dto.MemberDTO;

public interface MemberService {
	public int check(MemberDTO dto);
	public ArrayList<MemberDTO> info();
	public ArrayList<MemberDTO> memberInfo(String id);
	public int registerSuccess(MemberDTO dto);
}

 

MemberServiceImpl.java

package com.care.root.member.service;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.care.root.member.dto.MemberDTO;
import com.care.root.mybatis.member.MemberMapper;

@Service
public class MemberServiceImpl implements MemberService{
	@Autowired MemberMapper mm;
	
	public int check(MemberDTO dto) {
		ArrayList<MemberDTO> list = mm.check();
		System.out.println(list.get(0).getId());
		System.out.println(list.get(0).getPw());
		System.out.println(list.get(1).getId());
		System.out.println(list.get(1).getPw());
		System.out.println("입력 id : " + dto.getId());
		System.out.println("입력 pw : " + dto.getPw());
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getId().equals(dto.getId()) && 
					list.get(i).getPw().equals(dto.getPw())) {
				return 1;
			}
		}
		return 0;
	}
	public ArrayList<MemberDTO> info() {
		ArrayList<MemberDTO> info = mm.check();
		return info;
	}
	public ArrayList<MemberDTO> memberInfo(String id) {
		ArrayList<MemberDTO> memberInfo = mm.memberInfo(id);
		return memberInfo;
	}
	public int registerSuccess(MemberDTO dto) {
		int result = mm.registerSuccess(dto);
		return result;
	}
}

 

MemberDTO

package com.care.root.member.dto;

public class MemberDTO {
	private String id;
	private String pw;
	private String addr;
	
	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 getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
}

 

MemberMapper.java

package com.care.root.mybatis.member;

import java.util.ArrayList;

import com.care.root.member.dto.MemberDTO;

public interface MemberMapper {
	public ArrayList<MemberDTO> check();
	public ArrayList<MemberDTO> memberInfo(String id);
	public int registerSuccess(MemberDTO dto);
}

 

MemberMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.care.root.mybatis.member.MemberMapper">
<resultMap type="com.care.root.member.dto.MemberDTO" id="member">
	<id property="id" column="id"/>
	<result property="pw" column="pw" />
	<result property="addr" column="addr" />
</resultMap>
	<select id="check" resultMap="member">
		select * from membership
	</select>
	<select id="memberInfo" resultMap="member">
		select * from membership where id=#{id}
	</select>
	<insert id="registerSuccess">
		insert into membership (id, pw, addr) values(#{id}, #{pw}, #{addr})
	</insert>
</mapper>

 

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="../default/header.jsp" />
	<div align="center">
		<h2>회원등록</h2>
		<form action="registerSuccess" method="post">
			<input type="text" name="id" placeholder="아이디"><br>
			<input type="text" name="pw" placeholder="비밀번호"><br>
			<input type="text" name="addr" placeholder="주소"><br>
			<input type="submit" value="회원가입">
		</form>
	</div>
	<c:import url="../default/footer.jsp" />
</body>
</html>

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="../default/header.jsp" />
	<div align="center"><h1>로그인 페이지 입니다</h1></div>
	<div align="right">
		<form action = "/root/member/successLogin" method="post">
			<table>
				<tr>
					<td>
						<input type="text" name="id" placeholder="아이디">
					</td>
					<td rowspan="2">
						<input type="submit" value="로그인"style="width:60px;height:55px;">
					</td>
				</tr>
				<tr>
					<td><input type="text" name="pw" placeholder="비밀번호">
					</td>
				</tr>
				<tr>
					<td colspan="2" align="left">
						<a href="/root/member/register">회원가입</a>
					</td>
				</tr>
			</table>
		</form>
	</div>
	<c:import url="../default/footer.jsp" />
</body>
</html>

 

successLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="../default/header.jsp" />
	<div align="center"><h1>로그인 성공</h1></div>
	<c:import url="../default/footer.jsp" />
</body>
</html>

 

info.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="../default/header.jsp" />
	<div align="center">
		<h2>회 원 정 보</h2>
		<table border="1">
			<tr>
				<td align="center" style="width: 150px">아이디</td><td align="center" style="width: 150px">비밀번호</td><td align="center" style="width: 150px">주소</td>
			</tr>
			<c:forEach var="info" items="${info}">
				<tr>
					<td><a href="/root/member/memberInfo?id=${info.getId()}">${info.getId()}</a></td><td>${info.getPw()}</td><td>${info.getAddr()}</td>
				</tr>
			</c:forEach>
		</table>
	</div>
	<c:import url="../default/footer.jsp" />
</body>
</html>

 

memberInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:import url="../default/header.jsp" />
	<div align="center">
		<h2>${memberInfo[0].getId() } 정 보</h2>
		<table>
			<tr>
				<td align="center" style="width: 150px">아이디</td><td align="center" style="width: 150px">${memberInfo[0].getId() }</td>
			</tr>
			<tr>
				<td align="center" style="width: 150px">비밀번호</td><td align="center" style="width: 150px">${memberInfo[0].getPw() }</td>
			</tr>
			<tr>
				<td align="center" style="width: 150px">주소</td><td align="center" style="width: 150px">${memberInfo[0].getAddr() }</td>
			</tr>
		</table>
	</div>
<c:import url="../default/footer.jsp" />

</body>
</html>

 

실행 결과

+ Recent posts