Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database 
04. Jsp [Server] (v)

05. 미니프로젝트 (3W)
06. HTML,CSS  
07. JS

08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

JSP

Connection Pool

  • Eclipse > Servers폴더 > context.xml 수정

커넥션 풀링

  • 미리 정해진 개수만큼 DB커넥션을 풀에준비해두고, 어플레이케이션이 요청할 떄마다 Pool에서 꺼내서 할당하며, 다시 돌려받아서 Pool에 넣는 기법

DataSource

  • 데이터베이스 연결을 관리하는 인터페이스로, Connection객체 반환
  • DB에 이용되는 URL, id, pw, DriverClass를 미리 정의해 놓고 사용하는 객체
# DAO클래스에 dataSource사용
/*
 * DAO는 클래스는 여러개 만들필요 없이, 객체가 한개만 생성되도록
 * singleton클래스로 생성
 */
//1. 나자신의 객체를 1개 생성한다.
private static UsersDAO instance = new UsersDAO();
//2. 외부에서 생성자를 호출할수 없도록 private막는다
private UsersDAO() {
	
	try {
		InitialContext context = new InitialContext();
		dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
		
	} catch (Exception e) {
		e.printStackTrace();
	}
	
}
//3. 외부에서 객체를 요구할 때, instance를 반환합니다.
public static UsersDAO getInstance() {
	return instance;
}

//커넥션풀을 사용할 dataSource클래스
private DataSource dataSource;
# dataSource를 이용한 Connection연결
try {			
	conn=dataSource.getConnection();
	pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, email);
	rs = pstmt.executeQuery();
	
	if(rs.next()) result=1; // 1 = 중복
	
} catch (Exception e) {
	e.printStackTrace();
} finally {
	JdbcUtil.close(conn, pstmt, rs);
}

EL(Expression Language)

${Value}

EL 내장객체

${내장객체.name}

내장 객체 의미
pageScope page객체를 참조하는 객체
requestScope request객체를 참조하는 객체
sessionScope session객체를 참조하는 객체
applicationScope application객체를 참조하는 객체
param 요청 파라미터를 참조하는 객체
paramValues 요청 파라미터(배열)을 참조하는 객체
initParam 서블릿컨텍스트 초기화 파라미터를 참조하는 객체
cookie 쿠키 객체를 참조하는 객체
<!-- scope는 생략이 가능하고 request의 경우 request도 생략가능 -->	
${param.name }<br> // form태그 이용
${param.age }<br>

${requestScope.dto}<br>
${requestScope.dto.departmentId }<br>
${dto.departmentName }<br>
${dto.managerId }<br>
${dto.locationId }<br>
${name }

${sessionScope.userId }<br>
${applicationScope.menu }<br>

JSTL(JSP Standarad Tag Library)

종류 URI prefix
Core http://java.sun.com/jsp/jstl/core c
XML processing http://java.sun.com/jsp/jstl/xml x
Formatting http://java.sun.com/jsp/jstl/fmt fmt
Database access http://java.sun.com/jsp/jstl/sql sql
Functions http://java.sun.com/jsp/jstl/functions fn

1. JSTL Core Library 사용 방법

태그 설명
c:catch 예외처리에 사용
c:out jspWriter에 내용 출력
c:set JSP에 사용될 변수 설정
c:remove 설정한 변수 제거
c:if 조건 처리
c:choose 다중 조건 처리
c:forEach 컬렉션이나 Map의 각 항목 처리
c:forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용
c:when 조건에 맞을 때
c:otherwise 맞는 조건이 없는 경우
c:import url을 사용해 다른 자원의 결과 삽입
c:redirect URL을 재작성
c:param 파라미터 설정
  1. 출력 태그

<c:out value="출력값"/>

<c:out value="${a }"/>

  1. 변수 선언 태그

<c:set var="변수명" value="설정값" scope="범위"/>

<c:set var="a" value="홍길동" />

  1. 변수 제거 태그

<c:remove var="변수명" scope="범위"/>

  1. 조건문(if) 태그

<c:if test="조건식" var="조건 처리 변수명"></c:if>

<c:if test="true">
	<b>무조건 실행되는 문장</b>
</c:if>
<c:if test="${param.name eq '홍길동' }" >
	참 입니다.
</c:if>

<c:if test="${param.age >=20 }">
 	성인 입니다.
</c:if>
<c:if test="${param.age<20 }">
	미성년자 입니다.
</c:if>
  1. 조건문(choose) 태그
<c:choose>
      <c:when test="조건식"> 처리 내용 </c:when>
      <c:when test="조건식"> 처리 내용 </c:when>
      <c:otherwise> 처리 내용 </c:otherwise>
</c:choose>
  1. 반복문 태그

<c:forEach items="객체명" begin="시작값" end="끝 값" step="증감삭" var="변수명">

<h3>구구단 5단 출력</h3>
<c:forEach var="i" begin="1" end="9" step="1">
	<c:out value="5 * ${i } = ${5*i }"/>
	<br>
</c:forEach>	


<h3>2~9단까지 출력</h3>
<c:forEach var="i" begin="2" end="9" step="1">
	<b>${i }단</b>
	<br>
	<c:forEach var="j" begin="1" end="9" step="1">
	<c:out value="${i } * ${j } = ${i*j }"/>
	<br>
</c:forEach>	
	<c:out value="---------------------------"/>
	<br>
</c:forEach>	

<h3>향상된 for문</h3>

<c:set var="arr" value="<%=new int[] {1,2,3,4,5} %>"/>

<c:forEach var="i" items="${arr }" varStatus="stat">
	${i} <br>
	i의 인덱스 : ${stat.index} <br>
	i의 카운트 : ${stat.count }<br>
</c:forEach>

2. JSTL Fmt Library

  1. parseDate

<fmt:parseDate var="a" value="2025/02/24" pattern="yyyy/MM/dd"/>

  1. formatDate

<fmt:formatDate var="newA" value="${now }" pattern="yyyy년 MM월 dd일 HH:mm:ss"/>

  1. parseNumber

<fmt:parseNumber var="b" value="$32.14" pattern="$0.0" /> <fmt:parseNumber var="c" value="1.123abc" type="number" />

  1. formatNumber

<fmt:formatNumber value="2000" pattern="0000.00"/>


MVC2

"https://velog.io/@gillog/a-j5c0h49n"

URL-Pattern

1. 디렉토리 페턴

  • 디렉토리 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조
http://localhost:8181/cr/Hello  // Hello서블릿
http://localhost:8181/cr/World  // World서블릿

2. 확장자 패턴

  • 확장자 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조
http://localhost:8181/cr/Hello.do // *.do 서블릿
http://localhost:8181/cr/World.do // *.do 서블릿

# URL 매핑 확장자 패턴 형태
@WebServlet("*.example")
public class MyController extends HttpServlet {
...
}

MVC 컨트롤러 - 서블릿(Servlet)

  1. 웹 브라우저가 전송한 HTTP 요청을 받아 요청방식에 맞게 doGet(), doPost()호출
  2. 웹 브라우저가 어떤 기능을 요청했는지 분석
  3. 모델을 사용해 요청한 기능 수행
  4. 모델로부터 전달받은 결과물을 알맞게 가공한 후, request나 session의 setAttribute() 메서드를 이용해 결과값을 속성에 저장
  5. 웹 브라우저에 결과를 전송할 JSP페이지를 선택한 후, 해당 JSP로 포워딩 혹은 리다이렉트함
@WebServlet("*.example")
public class MyController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public MyController() {
        super();
    }
    
    // 2. get, post 요청을 action으로 하나로 묶음
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doAction(request,response);
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request,response);
	}

	protected void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 3. 요청을 분기
		request.setCharacterEncoding("utf-8");
		
		String uri = request.getRequestURI();
		// contextPath : 절대경로
		String contextPath = request.getContextPath();
		String command = uri.substring(contextPath.length());
		
		//System.out.println(uri);
		//System.out.println(contextPath);
		System.out.println(command);
		
		if(command.equals("/controller/join.example")) {
			System.out.println("회원가입 작업");
		}else if(command.equals("/controller/login.example")) {
			System.out.println("로그인 작업");
		}else if(command.equals("/controller/getInfo.example")) {
			System.out.println("회원정보 작업");
		}
	}

}

MVC 뷰 - JSP

MVC 모델