MyBatis를 쓰는 주된목적
: SQL문과 자바 코드를 분리하는 것 (코드 양이 줄어드는 것도 맞지만 !)
MVC를 쓰는 주된목적
: 모델2기법 - 비즈니스 코드(Java)와 프리젠테이션(웹)을 분리하는 것
지금까지 배운 건 모델1기법 --- 다 섞어서 썼다.
----> 개발 속도가 빠르다 ( 1페이지 안에서 자바, 웹 다 썼으므로)
----> 클라이언트한테 시뮬레이션 보여주거나 할 때 빠르게 할 때 유용
----> but, 유지보수가 어렵다. / 확장성 X (아예 버리고 새로 짜는게 더 쉬울 정도)
그러므로 회사 사이트를 만들 때는 모델1으로 하면 안 된다. 모델2로 해야된다.
BUT, 개발 속도가 현저히 느려진다.
웹 안에서는 자바 코드가 들어가면 안 된다.
<% %> 이거 쓰면 안 된다 (자바 코드)
<%= %> 이것도 쓰면 안 된다. (자바 출력 코드)
하나의 파일이 두 개가 될 것이다. ( 자바파일 / 웹파일 )
파일 3개였던게 6개가 되게된다.
MVC는 전체흐름 파악이 매우 중요 !! ( 파일이 매우 많아지기 때문 )
이제는 EL => ${ } 쓴다.
$( ) -- jQuery
${ } -- EL
헷갈리지 말기
EL (Expression Language), 표현언어
EL은 JSTL에 소개된 내용으로 JSP 2.0에 추가된 기능이며 JSP의 기본문법을 보완하는 역할을 한다
(1) EL에서 제공하는 기능
JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
집합 객체에 대한 접근 방법 제공
수치 연산, 관계 연산, 논리 연산자 제공 ----> BUT, if문 for문이 안 된다 !!!
자바 클래스 메소드 호출 기능 제공
표현 언어만의 기본 객체 제공
표기법 : ${ expr }
그래서 들어오는게 커스텀 태그 ( 태그를 만들어보자 )
A회사 B회사
< if < if
< for < forEach
10년 전에는 이런식으로 각자 커스텀태그로 만들어 썼다.
호환이 안 되는 문제가 생긴다.
A회사에서 B회사꺼를 사용할 수가 없다. ( 돈 주고 샀어야만 했다 )
호환이 되도록 만든게 스탠다드 태그
---> JSTL (Jsp Standard Tag Library)
< c :
Dynamic Web Project: EL_JSTL
Folder: EL
File : elTest.jsp
EL / JSTL => <% %> <%= %> 사용하면 안 된다.
=> 자바와 웹 분리가 주목적이므로 !!!
<%@ 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>
<table border="1" width="50%">
<tr>
<th width="50%">표현식</th>
<th>값</th>
</tr>
</table>
</body>
</html>
EL은 수치 연산, 관계 연산, 논리 연산자 제공해주므로 다 된다.
예전에는 <%= 25+3 %>
이제는 ${25+3} 앞에 \ 붙여주면 계산해준다.
elTest.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>
<table border="1" width="50%">
<tr>
<th width="50%">표현식</th>
<th>값</th>
</tr>
<tr align="center">
<td>\${25 + 3}</td>
<td>${25 + 3}</td>
</tr>
<tr align="center">
<td>\${25 / 3}</td>
<td>${25 / 3}</td>
</tr>
<tr align="center">
<td>\${25 div 3}</td>
<td>${25 div 3}</td>
</tr>
<tr align="center">
<td>\${25 % 3}</td>
<td>${25 % 3}</td>
</tr>
<tr align="center">
<td>\${25 mod 3}</td>
<td>${25 mod 3}</td>
</tr>
<tr align="center">
<td>\${25 < 3}</td>
<td>${25 < 3}</td>
</tr>
<!-- > gt, < lt, >= ge, <= le, == eq, != ne -->
<tr align="center">
<td>\${25 != 3}</td>
<td>${25 != 3}</td>
</tr>
<tr align="center">
<td>\${25 ne 3}</td>
<td>${25 ne 3}</td>
</tr>
<tr align="center">
<td>\${ header['host'] }</td>
<td>${ header['host'] }</td>
</tr>
<tr align="center">
<td>\${ header.host }</td>
<td>${ header.host }</td>
</tr>
</table>
</body>
</html>
elInput.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>
<style type="text/css">
table {
border-collapse: collapse;
}
th, td {
padding: 10px;
}
</style>
</head>
<body>
<form method="get" action="elResult.jsp">
<table border="1">
<tr>
<th>X</th>
<td><input type="text" name="x" /></td>
</tr>
<tr>
<th>Y</th>
<td><input type="text" name="y" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="계산" />
<input type="reset" value="취소" />
</td>
</tr>
</table>
</form>
</body>
</html>
elResult.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>
${param.x} + ${param.y} = ${param.x + param.y}
</body>
</html>
밑에처럼 적어도 된다.
${param['x']} + ${param['y']} = ${param['x'] + param['y']}
- 뺄셈
${param['x']} - ${param['y']} = ${param['x'] - param['y']}
- 곱셈
${param.x} * ${param.y} = ${param.x * param.y}
- 나눗셈
${param.x} / ${param.y} = ${param.x / param.y}
자바 클래스의 메소드 이용
- 자바클래스 작성하고 메소드는 static 설정
- 태그라이브러리에 대한 설정정보를 담고 있는 tld(Tag Library Descriptor)파일을 작성
- web.xml에 tld파일을 사용할 수 있는 설정정보를 추가
- 자바클래스에 접근하는 jsp파일을 작성
web.xml은 시키지 않아도 읽지만 tld 파일은 알아서 읽지 않는다.
web.xml에게 tld라는 설정파일을 읽어라 하고 알려줘야한다.
elInput_java.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>
<style type="text/css">
table {
border-collapse: collapse;
}
th, td {
padding: 10px;
}
</style>
</head>
<body>
<form method="get" action="elResult_java.jsp">
<h3>자바 클래스의 메소드 이용</h3>
<table border="1">
<tr>
<th>X</th>
<td><input type="text" name="x" /></td>
</tr>
<tr>
<th>Y</th>
<td><input type="text" name="y" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="계산" />
<input type="reset" value="취소" />
</td>
</tr>
</table>
</form>
</body>
</html>
elResult_java.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>
<h3>자바 클래스의 메소드 이용</h3>
${param['x']} + ${param['y']} = ${param['x'] + param['y']} <br>
</body>
</html>
Package: com.el
Class: Compute.java
메서드 이름은 sum이고 2개의 파라메터를 받아서 합을 return하는 메서드이다.
package com.el;
public class Compute {
public static int sum(String x, String y) {
return Integer.parseInt(x) + Integer.parseInt(y);
}
}
elResult_java.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>
<h3>자바 클래스의 메소드 이용</h3>
${param['x']} + ${param['y']} = ${ sum(param['x'], param['y']) } <br>
</body>
</html>
이렇게 적으면 sum이라는 함수가 뭔지 모른다.
그러므로 sum이라는 함수는 Compute에 있고 패키지도 어디에 있는지 알려줘야한다.
이런 정보를 알려주는 게 tld라는 파일이다.
url - 웹의 주소값 / uri - 파일의 위치
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="angel" uri="/WEB-INF/elFunc.tld" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>자바 클래스의 메소드 이용</h3>
${param['x']} + ${param['y']} = ${ angel:sum(param['x'], param['y']) } <br>
</body>
</html>
elFunc.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
</taglib>
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>EL에서 자바 메소드 실행</description>
<tlib-version>1.0</tlib-version>
<function>
<description>x와 y의 합</description>
<name>sum</name>
<function-class>com.el.Compute</function-class>
<function-signature>int sum(java.lang.String, java.lang.String)</function-signature>
</function>
</taglib>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>EL_JSTL</display-name>
<jsp-config>
<taglib>
<taglib-uri>tld</taglib-uri>
<taglib-location>/WEB-INF/elFunc.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
elResult_java.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="angel" uri="tld" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>자바 클래스의 메소드 이용</h3>
${param['x']} + ${param['y']} = ${ angel:sum(param['x'], param['y']) } <br>
</body>
</html>
Compute 클래스의 뺄셈을 하는 메서드 => sub( )
Multiply 클래스의 곱셈을 하는 메서드 => mul( ) => elFunc2.tld
web.xml - tld2 추가하기
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>EL_JSTL</display-name>
<jsp-config>
<taglib>
<taglib-uri>tld</taglib-uri>
<taglib-location>/WEB-INF/elFunc.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>tld2</taglib-uri>
<taglib-location>/WEB-INF/elFunc2.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
elResult_java.jsp - devil 추가하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="angel" uri="tld" %>
<%@ taglib prefix="devil" uri="tld2" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>자바 클래스의 메소드 이용</h3>
${param['x']} + ${param['y']} = ${ angel:sum(param['x'], param['y']) } <br>
${param['x']} - ${param['y']} = ${ angel:sub(param['x'], param['y']) } <br>
${param['x']} * ${param['y']} = ${ devil:mul(param['x'], param['y']) } <br>
</body>
</html>
Compute.java
Compute 클래스의 뺄셈을 하는 메서드 => sub( )
package com.el;
public class Compute {
public static int sum(String x, String y) {
return Integer.parseInt(x) + Integer.parseInt(y);
}
public static int sub(String x, String y) {
return Integer.parseInt(x) - Integer.parseInt(y);
}
}
elFunc.tld - x와 y의 차 부분 추가하기
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>EL에서 자바 메소드 실행</description>
<tlib-version>1.0</tlib-version>
<function>
<description>x와 y의 합</description>
<name>sum</name>
<function-class>com.el.Compute</function-class>
<function-signature>int sum(java.lang.String, java.lang.String)</function-signature>
</function>
<function>
<description>x와 y의 차</description>
<name>sub</name>
<function-class>com.el.Compute</function-class>
<function-signature>int sub(java.lang.String, java.lang.String)</function-signature>
</function>
</taglib>
Multiply.java
Multiply 클래스의 곱셈을 하는 메서드 => mul( ) => elFunc2.tld
package com.el;
public class Multiply {
public static int mul(String x, String y) {
return Integer.parseInt(x) * Integer.parseInt(y);
}
}
elFunc2.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>EL에서 자바 메소드 실행</description>
<tlib-version>1.0</tlib-version>
<function>
<description>x와 y의 곱</description>
<name>mul</name>
<function-class>com.el.Multiply</function-class>
<function-signature>int mul(java.lang.String, java.lang.String)</function-signature>
</function>
</taglib>
JSTL (Jsp Standard Tag Library)
2개의 jar파일이 필요
jstl-1.2.jar
standard-1.1.2.jar
pageScope → requestScope → sessionScope → applicationScope 순으로 호출
page - pageScope
request - requestScope
session - sessionScope
application - applicationScope
메소드 호출시 접두사 set/get를 생략 할 수 있다
메소드명을 변수명처럼 사용 할 수 있다
Folder: JSTL
File: jstlTest.jsp
변수설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>*** 변수 설정 ***</h3>
<% String name = "홍길동"; %>
<c:set var="name" value="홍길동"></c:set>
</body>
</html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 추가하기
<% %> 와 <c:set ~ 둘이 같은 역할을 하는 코드인 거 확인 !
forEach
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>*** 변수 설정 ***</h3>
<c:set var="name" value="홍길동" />
<c:set var="age">25</c:set>
나의 이름은 ${name }입니다. <br>
내 나이는 <c:out value="${age }"/>살입니다. <br>
나의 키는 ${height }cm 입니다. <br>
<h3>*** forEach ***</h3>
<c:forEach var="i" begin="1" end="10" step="1"> <%-- for(int i=1; i<=10; i++) --%>
${i }  
</c:forEach>
</body>
</html>
<h3>*** forEach ***</h3>
<c:forEach var="i" begin="1" end="10" step="1"> <%-- for(int i=1; i<=10; i++) --%>
${i }  
<c:set var="sum" value="${sum + i}" />
</c:forEach>
<br>
1 ~ 10까지의 합 = ${sum }
<c:forEach var="i" begin="1" end="10" step="1">
${11-i}  
</c:forEach>
forToken
<h3>*** forToken ***</h3>
<c:forTokens var="car" items="소나타,아우디,페라리,벤츠,링컨" delims=",">
${car }<br>
</c:forTokens>
jstlInput.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>
<form method="get" action="jstlResult.jsp">
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th width="70">이름</th>
<td><input type="text" name="name"></td>
</tr>
<tr>
<th width="70">나이</th>
<td><input type="text" name="age"></td>
</tr>
<tr>
<th width="70">색깔</th>
<td>
<select name="color" id="color" style="width: 100px;">
<optgroup label="색깔">
<option value="red">빨강</option>
<option value="green">초록</option>
<option value="blue">파랑</option>
<option value="magenta">보라</option>
<option value="cyan">하늘</option>
</optgroup>
</select>
</td>
</tr>
<tr>
<th>취미</th>
<td>
<input type="checkbox" name="hobby" id="hobby1" value="독서" />
<label for="hobby1">독서</label>
<input type="checkbox" name="hobby" id="hobby2" value="영화" />
<label for="hobby1">영화</label>
<input type="checkbox" name="hobby" id="hobby3" value="음악" />
<label for="hobby1">음악</label>
<input type="checkbox" name="hobby" id="hobby4" value="게임" />
<label for="hobby1">게임</label>
<input type="checkbox" name="hobby" id="hobby5" value="쇼핑" />
<label for="hobby1">쇼핑</label>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="SEND" />
<input type="reset" value="CANCEL" />
</td>
</tr>
</table>
</form>
</body>
</html>
jstlResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
<li>이름 : ${param.name }</li>
<li>나이 : ${param.age }</li>
<li>색깔 : ${param.color }</li>
<li>취미 : ${param.hobby }</li>
</ul>
</body>
</html>
jstlInput.jsp - post방식으로 바꾸면 한글이 깨진다
<form method="post" action="jstlResult.jsp">
jstlResult.jsp - 한글 처리 해주기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<fmt:requestEncoding value="UTF-8" />
<ul>
<li>이름 : ${param.name }</li>
<li>나이 : ${param.age }</li>
<li>색깔 : ${param.color }</li>
<li>취미 : ${param.hobby }</li>
</ul>
</body>
</html>
나이 - 성인 / 청소년
<li>나이 : ${param.age }살
<c:if test="${param.age >= 19 }">성인</c:if>
<c:if test="${param.age < 19 }">청소년</c:if>
</li>
색깔
<li>색깔 :
<c:if test="${param.color == 'red' }">빨강</c:if>
<c:if test="${param.color == 'green' }">초록</c:if>
<c:if test="${param.color == 'blue' }">파랑</c:if>
<c:if test="${param.color == 'magenta' }">보라</c:if>
<c:if test="${param.color == 'cyan' }">하늘</c:if>
</li>
<li>색깔 :
<c:if test="${param.color == 'red' }">빨강</c:if>
<c:if test="${param.color == 'green' }">초록</c:if>
<c:if test="${param.color == 'blue' }">파랑</c:if>
<c:if test="${param.color == 'magenta' }">보라</c:if>
<c:if test="${param.color == 'cyan' }">하늘</c:if>
<c:choose>
<c:when test="${param.color == 'red' }">빨강</c:when>
<c:when test="${param.color == 'green' }">초록</c:when>
<c:when test="${param.color == 'blue' }">파랑</c:when>
<c:when test="${param.color == 'magenta' }">보라</c:when>
<c:otherwise>하늘</c:otherwise>
</c:choose>
</li>
String name = request.getParameter("name");
String hobby[] = request.getParameterValues("hobby");
우리가 전에 썼던 방식
<li>취미 :
${paramValues['hobby'][0]}
${paramValues['hobby'][1]}
${paramValues['hobby'][2]}
${paramValues['hobby'][3]}
${paramValues['hobby'][4]}
</li>
이런식으로 선택한 값만 출력되는 거 확인할 수 있음.
<li>취미 :
${paramValues['hobby'][0]}
${paramValues['hobby'][1]}
${paramValues['hobby'][2]}
${paramValues['hobby'][3]}
${paramValues['hobby'][4]}
<br>
취미 :
${paramValues.hobby[0]}
${paramValues.hobby[1]}
${paramValues.hobby[2]}
${paramValues.hobby[3]}
${paramValues.hobby[4]}
</li>
둘 다 쓸 줄 알아야한다 !!
<li>취미 :
${paramValues['hobby'][0]}
${paramValues['hobby'][1]}
${paramValues['hobby'][2]}
${paramValues['hobby'][3]}
${paramValues['hobby'][4]}
<br>
취미 :
${paramValues.hobby[0]}
${paramValues.hobby[1]}
${paramValues.hobby[2]}
${paramValues.hobby[3]}
${paramValues.hobby[4]}
<br>
취미 :
<c:forEach var="data" items="${paramValues.hobby}"> <%-- for(String data : hobby) --%>
${data }
</c:forEach>
</li>
3방식 다 똑같다 !!!!
대신 여기서는 자료형이 필요없기 때문에 var에는 그냥 data만 적으면 된다 !
'JSP & Servlet' 카테고리의 다른 글
DAY 51 - EL_JSTL ( 2024.09.12 ) (0) | 2024.09.12 |
---|---|
DAY 51 - MVC ( 2024.09.12 ) (2) | 2024.09.12 |
DAY 49 - MyBatis (2024.09.10) (0) | 2024.09.10 |
DAY 48 - MyBatis ( 2024.09.09) (0) | 2024.09.09 |
DAY 46 JSP - Connection Pool / 로그인 / 쿠키(2024.09.05) (1) | 2024.09.06 |