AI교육과정 - JSP.5

단비·2022년 11월 29일
0

AI교육과정

목록 보기
37/69
  • JSP 영역
    • 3, 4번을 많이 사용함
    1. page context

      • 현재 처리되고 있는 하나의 페이지 영역
      pageContext.setAttribute("변수", "값")
    2. request(request)

      • 객체가 포워드되는 영역에서 사용하는 객체. 요청하고 포워드하는 과정의 JSP를 request 하는 영역
      request.setAttribute("변수", "값")
    3. session(session)

      • 하나의 사용자가 사이트에서 지나가는 모든 페이지 영역에서 개별적으로 사용하는 객체
      session.setAttribute("변수", "값")
    4. application(application)

      • 하나의 사이트에 속해있는 모든 페이지 영역에서 사용되는 공용 객체
      application.setAttribute("변수", "값")
  • EL(Expression Language) 표현식
    • 자바빈의 프로퍼티, 값, 액션 태그 등을 쉽고 간결하게 사용할 수 있도록 하는 기술

    • page context(기본값)

      🤗 ${}

      <%=pageContext.getAttribute("text") %>
      =>
      ${pageScope.text}
    1. JSP가 실행될 때 즉시 반영하여 값을 출력

      예) <%= 1+1 %> ⇒ ${1+1}

    2. 파라미터 값(매개변수)을 불러올 때 사용

      request.getParameter(name)
      =>
      ${param.name} 또는 ${param['name']} 또는 ${param["name"]}
  • 연산자
    1. 산술 연산자

      ${10 + 2 }

      ${10 -2 }

      ${10 * 2 }

      ${10 / 2 } ⇒ ${10 div 2 }

      ${10 % 2 } ⇒ ${10 mod 2 }

    2. 비교 연산자

      ${10 > 2 } ⇒ ${10 gt 2 }

      ${10 < 2 } ⇒ ${10 lt 2 }

      ${10 == 2 } ⇒ ${10 eq 2 }

      ${10 != 2} ⇒ ${10 ne 2 }

      ${10 >= 2 } ⇒ ${10 ge 2 }

      ${10 <= 2 } ⇒ ${10 le 2 }

    3. 논리 연산자

      ${true and true}

      ${true or false}

      ${not true}

    4. empty 연산자

      ${empty 변수}

      1. 변수의 값이 null이면 true
      2. 문자열, 배열, Map, Collection 객체의 크기가 0이면 true
      3. 그 외에는 false
  • JSTL 라이브러리 https://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
    • jakarta-taglibs-standard-1.1.2.zip
    • 자바코드를 HTML 태그 형식으로 간편하게 사용하기 위해 나온 라이브러리
  • JSTL의 종류
    • core tags
      • 변수 생성, URL 관리, 프로그램의 흐름을 제어

        prefix="c": c로 부르겠단 의미
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
      • c: out

        • jsp에서 <%=%> 태그와 유사한 표현식의 결과를 표시

          <c:out value="${'hello jstl' }"/>
      • c: import

        • 상대 또는 절대 URL을 검색하여 내용을 var 문자열, varReader의 Reader 또는 페이지에 표시
      • c: set

        • 계산 결과를 scope 변수에 설정

          <c:set var="userid" value="apple"/>
      • c: remove

        • 특정 범위에서 지정된 범위 변수를 제거할 때 사용

          <c:remove var="userid"/>
      • c: if

        • 조건을 테스트하는데 사용되는 조건부 태그, 표현식이 참인 경우에만 내용을 표시

          <c:if test="${userid eq 'banana' }">
          		<p>userid는 banana입니다</p>
          </c:if>
      • c: choose, c: when, c: otherwise

        • 조건이 true인 경우 본문 내용을 포함하는 간단한 조건부 태그

          <c:choose>
          		<c:when test="${empty pw }">
          			<p>비밀번호가 입력되지 않았습니다.</p>
          		</c:when>
          		<c:when test="${pw eq '1234'}">
          			<p>비밀번호가 1234</p>
          		</c:when>
          		<c:otherwise>
          			<p>둘 다 아님</p>
          		</c:otherwise>
          </c:choose>
      • c: forEach

        • 기본 반복 태그이며 고정된 횟수 또는 초과되는 중첩된 본문 내용을 반복

          items: 차례대로 불려질 값
          
          var: 차례대로 담겨질 값
          
          varStatus: 불려질 이름, 번호를 매겨주려고 필요한 속성(필요없으면 안써도 됨)
          <c:forEach var="student" items="${list }" varStatus="status">
          			<tr>
          				<td>${status.index }</td>
          				<td>${status.count }</td>
          				<td>${student }</td>
          			</tr>
          		</c:forEach>
      • c: redirect

        • 브라우저를 새 URL로 리디렉션함
    • formatting
      • 메시지, 번호 및 날짜, 통화 형식 등을 지원

        <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
      • fmt: parseNumber

        • 통화, 백분율 또는 숫자의 문자열을 표현, 분석하는데 사용
      • fmt: formatNumber

        • 특정 형식 또는 정밀도로 숫자값을 형식화 하는데 사용

          <fmt:formatNumber value="500000" type="currency" currencySymbol="$"/>
      • fmt:parseDate

        • 시간과 날짜의 문자열 표현을 분석하는데 사용
      • fmt:frmatDate

        • 제공된 패턴 및 스타일을 사용하여 시간 및 또는 날짜를 형식화
      • fmt: setTimeZone

        • 시간대 구성 변수 내에 시간을 저장
    • function
      • 문자열 조작 및 문자열 길이를 지원

        <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
      • fn:contains()

        • 지정된 하위 문자열을 포함하는 입력 문자열을 테스트하는데 사용
      • fn:indexOf()

        • 지정된 하위 문자열이 처음 나타나는 문자열 내에서 인덱스를 반환

          ${fn:indexOf('jstl1 예제','s')} //1
      • fn:split()

        • 문자열을 하위 문자열 배열로 분할
      • fn:endsWith()

        • 입력 문자열이 지정된 접미어로 끝나는지 테스트
      • fn:trim()

        • 문자열의 양쪽 끝 공백을 제거

          ${fn:trim('        jstl 예제       ' )} //jstl 예제
      • fn:toLowerCase()

        • 문자열의 모든 문자를 소문자로 변환
      • fn:toUpperCase()

        • 문자열의 모든 문자를 대문자로 변환
      • fn:substring()

        • 주어진 문자열 시작 및 끝 위치에 따라 문자열의 일부를 반환

          ${fn:substring('jstl 예제', 0, 3)} //jst
      • fn:length()

        • 문자열 내부의 문자 수 또는 컬렉션의 항목 수를 반환

          ${fn:length('1234567890') } //10
      • fn:replace()

        • 모든 문자열을 다른 문자열 시퀀스로 변환

          ${fn:replace('jstl 예제', 'jstl', 'jsp') } //jsp 예제
  • Maven Project https://mvnrepository.com 다이나믹 웹 프로젝트→configure→convert to maven project→pom.xml 생성됨 dependencies: xml에서 태그를 묶는 태그
    • Apache Maven은 자바용 프로젝트 관리도구
    • 라이브러리를 특정 문서(pom.xml)에 정의해놓으면 네트워크를 통해 라이브러리를 자동으로 다운받아 관리
    • 라이브러리 관리가 용이
    • war, jar 파일 기반의 배포용으로로 자주 사용
  • 파일 업로드 https://mvnrepository.com/artifact/com.jfinal/cos/2020.4
    • 이미지 올리려면 form 태그에 enctype="multipart/form-data" 를 꼭 써야함
      • requset.getPrameter로 못받고 MultipartRequest로 받아야함

      • DefaultFileRenamePolicy : 파일이름 중복을 방지함

        <%@ page import="com.oreilly.servlet.MultipartRequest" %>
        <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
      • 타입, 경로, 용량, 인코딩방식, 파일이름 중복 방지

        MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"), 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy())
        String fileName = mr.getFilesystemName("image");
  • 파일 삭제 (.delete()) request.getRealPath: 경로 .exists: 존재하는지 .isFile: 파일타입인지
    String deleteImg = "281786_super_hero_superman_icon.png"; //삭제할 파일이름
    
    String deleteImgFullPath = request.getRealPath("/image/") + deleteImg; // 경로+파일이름
    File img = new File(deleteImgFullPath); //파일타입으로 생성
    
    if(img.exists() && img.isFile()){ //존재하고 파일 타입이 맞으면
    	img.delete();
    }
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글