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" ;
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 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;
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@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>
실행 결과