1. 쿠키와 세션의 차이

출처 : https://cyberchimps.com/blog/session-cookies/

 

출처 : https://twitter.com/sahnlam/status/1759829449284231214

 

쿠키와 세션 응답 헤더

 

  📌  쿠키를 사용했을 때는 아이디와 비밀번호가 노출됨  ▶️  보안이 되지 않음


2.  쿠키  Cookie

html 파일

 

<body>
    <form action="cookie01_process.jsp" method="post">
          <p>아 이 디 : <input type="text" name="id"></p>
          <p>비밀번호 : <input type="text" name="passwd"></p>
          <p><input type="submit" value="전송"></p>
    </form>
</body>

 

jsp 파일

 

    📍 쿠키 생성하기
         1) 전송된 아이디와 비밀번호가 일치하면, 쿠키 이름 userId, userPw에 값을 설정하도록 Cookie 객체를 생성

<body>

    <%
      String userId = request.getParameter("id");
      String userPw = request.getParameter("passwd");

      if (userId.equals("admin") && userPw.equals("1234")) { // 로그인 정보가 맞으면
        Cookie cookieId = new Cookie("userId", userId); // 쿠키 생성. Cookie 클래스를 이용해서 쿠키 객체 생성.
        Cookie cookiePw = new Cookie("userPw", userPw);
        response.addCookie(cookieId); // response 할 때 쿠키도 같이 보낼 것
        response.addCookie(cookiePw);

        out.println("쿠키 생성이 성공했습니다<br>");
        out.println(userId + "님 환영합니다");
      } else {
        out.println("쿠키 생성이 실패했습니다");
      }
    %>

</body>

 

    📍 쿠키 객체에 저장된 모든 쿠키 값 가져와 출력
        1) 쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메서드 작성
        2) 얻어온 쿠키 정보의 개수를 출력하도록 Cookie 객체의 length를 작성
        3) 얻어온 쿠키 정보에서 쿠키 이름과 값을 하나씩 출력하도록 Cookie 객체의 getName(), getValue() 메소드 작성

<body>

    <%
      boolean isLogin = false;
      String userId = "";
      Cookie[] cookies = request.getCookies(); // request에서 쿠키를 얻어옴.
      out.println("현재 설정된 쿠키의 개수 => " + cookies.length + "<br>");
      out.println("====================================<br>");
      for (int i = 0; i < cookies.length; i++) {
        out.println("설정된 쿠키의 속성 이름 [ " + i + " ] : " + cookies[i].getName() + "<br>");
        out.println("설정된 쿠키의 속성 값 [ " + i + " ] : " + cookies[i].getValue() + "<br>");
        out.println("--------------------------------------------<br>");

        if (cookies[i].getName().equals("userId") && cookies[i].getValue() != null) {
          // userId라는 쿠키이름이 있고 value가 null이 아니면 로그인 한 것으로 간주
          isLogin = true;
          userId = cookies[i].getValue();
        }
      }

      if (isLogin) {
        out.print(userId + "님이 로그인 중입니다.");
      } else {
        out.print("로그인 상태가 아닙니다.");
      }
    %>

</body>


    📍 쿠키 객체에 저장된 모든 쿠키 삭제하기
        1) 쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메소드 작성
        2) 얻어온 모든 쿠키를 삭제하도록 Cookie 객체의 setMaxAge() 메소드에 유효 기간을 0으로 설정
        3) 웹 페이지 cookie02.jsp로 이동하도록 response 내장 객체의 sendRedirect() 메소드를 작성

<body>
    
    <%
        Cookie[] cookies = request.getCookies();

        for (int i = 0; i < cookies.length; i++) {
            cookies[i].setMaxAge(0);
            response.addCookie(cookies[i]);
        }
        response.sendRedirect("04.jsp");
    %>

</body>


3.  세션  Session

html 파일
<body>
    <form action="session01_process.jsp" method="post">
      <p> 아이디 : <input type="text" name="id"></p>
      <p> 비밀번호 : <input type="text" name="passwd"></p>
      <p><input type="submit" value="전송"></p>
    </form>
</body>

 

jsp 파일

 

     📍  세션 설정하기
         1)  전송된 아이디 비번이 일치하면 세션 속성 이름이 userID, userPW에 값을 설정하도록 session 내장 객체의 setAttribute() 메소드 작성
        2) 일치하지 않으면 실패 메시지를 출력

 

      💫  쿠키와는 다르게 response 객체에 세션을 담는 과정은 없음 ▶️ 서버에 저장하기 때문

<body>
    <%
      String userId = request.getParameter("id");
      String userPw = request.getParameter("passwd");

      if (userId.equals("admin") && userPw.equals("1234")) {
        session.setAttribute("userId", userId);
        session.setAttribute("userPw", userPw);
        out.println("세션 설정이 성공했습니다<br>");
        out.println(userId + "님 환영합니다");
      } else {
        out.println("세션 설정이 실패했습니다");
      }
    %>
</body>

 

    📍 세션에 저장된 속성 값 가져와 출력
        - 세션에 저장된 세션 속성 이름 userID, userPW의 속성 값을 가져오도록 session 내장 객체의 getAttribute() 메소드를 작성

<body>
    <%
        String userId = (String) session.getAttribute("userId"); // 세션의 속성값은 Object라서 다운캐스팅을 해야함.
        String userPw = (String) session.getAttribute("userPw");

        out.println("설정된 세션의 속성 값 [1] : " + userId + "<br>");
        out.println("설정된 세션의 속성 값 [2] : " + userPw);
    %>
</body>

    

    📍  세션에 저장된 세션 속성 삭제
       -  세션에 저장된 세션 속성 이름  userID를 삭제하도록 session 내장 객체의 removeAttribute() 메서드를 작성

<body>
    <p><h4>------ 세션을 삭제하기 전 ------</h4></p>
    <%
        String userId = (String) session.getAttribute("userId");
        String userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");

        session.removeAttribute("userId");
        session.removeAttribute("userPw");
    %>
    
    <p><h4>------ 세션을 삭제한 후 ------</h4></p>
    <%
        userId = (String) session.getAttribute("userId");
        userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");
    %>
</body>

    📍 세션에 저장된 모든 세션 속성 삭제
        1) 요청에 포함된 클라이언트의 세션이 유효하면 유효한 메시지를 출력하고, 그렇지 않으면 유효하지 않은 메시지를 출력
        2) 세션에 저장된 모든 세션 속성을 삭제하도록 session 내장 객체의 invalidate() 메서드를 작성

 

     👾  request.isRequestSessionIdValue() : request에 포함된 SessionId가 유효한지 검사. 반환형은 boolean

<body>
    <p><h4>------ 세션을 삭제하기 전 ------</h4></p>
    <%
        String userId = (String) session.getAttribute("userId");
        String userPw = (String) session.getAttribute("userPw");
        out.println("설정된 세션 userId : " + userId + "<br>");
        out.println("설정된 세션 userPw : " + userPw + "<br>");

        if (request.isRequestedSessionIdValid() == true) {
          out.print("세션이 유효합니다.");
        } else {
          out.print("세션이 유효하지 않습니다.");
        }

        session.invalidate();
     %>
     
    <p><h4>------ 세션을 삭제한 후 ------</h4></p>
    <%
      if (request.isRequestedSessionIdValid() == true) {
        out.print("세션이 유효합니다.");
      } else {
        out.print("세션이 유효하지 않습니다.");
      }
    %>
</body>

    

    📍 세션 아이디와 웹 사이트에서 유지한 시간 출력


        1) 고유한 세션 내장 객체의 아이디를 가져오도록 session 내장 객체의 getId() 메서드를 작성
        2) 세션에 마지막으로 접근한 시간을 가져오도록 session 내장 객체의 getLastAccessedTime() 메서드를 작성
        3) 세션이 생성된 시간을 가져오도록 session 내장 객체의 getCreationTime() 메서드를 작성
        4) 웹 사이트에 머문 시간을 계산하도록 작성

<body>
    <%
      String sessinId = session.getId();
      // 세션에 마지막으로 접근한 시간
      long lastTime = session.getLastAccessedTime();  // 단위가 1/1,000초
      // 세션이 생성된 시간
      long startTime = session.getCreationTime();  // 단위가 1/1,000초

      long usedTime = (lastTime - startTime) / 1000;

      out.println("세션 아이디 : " + sessinId + "<br>");
      out.println("요청 시작 시간  : " + startTime + "<br>");
      out.println("요청 마지막 시간  : " +  lastTime + "<br>");
      out.println("웹 사이트에서 경과 시간  : " + usedTime + "초<br>");
    %>
</body>

    📍 세션 유효 시간을 가져와 출력


        1) 세션에 설정된 유효 시간을 가져오도록 session 내장 객체의 getMaxInactiveInterval() 메서드를 작성하고, 유효시간을 출력
        2) 세션 유효 시간을 60 * 60 초로 설정하도록 session 내장 객체의 setMaxInactiveInterval() 메서드를 작성
        3) 세션에 설정된 유효 시간을 가져오도록 session 내장 객체의 getMaxInactiveInterval() 메서드를 작성하고, 유효시간을 출력

<body>
    <p><h4>------ 세션 유효시간 변경 전 ------</h4></p>
    <%
        int time = session.getMaxInactiveInterval() / 60;

        out.println("세션 유효 시간 : " + time + "분<br>");
    %>
    <p><h4>------ 세션 유효시간 변경 후 ------</h4></p>
    <%
        session.setMaxInactiveInterval(60 * 60);
        time = session.getMaxInactiveInterval() / 60;

        out.println("세션 유효 시간 : " + time + "분<br>");
    %>
</body>

 

 

 

 

 

 

 

 

 

[ 내용 참고 : IT학원 강의 ]


1.  회원가입 양식

html 코드
    <h3>회원가입</h3>
    <form action="form01_process.jsp" name="member" method="post">
        <p> 아이디 : <input type="text" name="id"> <input type="button" value="아이디 중복검사"></p>
        <p> 비밀번호 : <input type="password" name="passwd"></p>
        <p> 이름 : <input type="text" name="name"></p>
        <p> 연락처 : <select name="phone1">
            <option value="010">010</option>
            <option value="011">011</option>
            <option value="016">016</option>
            <option value="017">017</option>
            <option value="019">019</option>
        </select> - <input type="text" maxlength="4" size="4" name="phone2"> -
            <input type="text" maxlength="4" size="4" name="phone3"></p>
        <p> 성별 : <input type="radio" name="sex" value="남성" checked>남성
            <input type="radio" name="sex" value="여성">여성</p>
        <p> 취미 : 독서 <input type="checkbox" name="hobby" value="독서" checked>
            운동<input type="checkbox" name="hobby" value="운동">
            영화<input type="checkbox" name="hobby" value="영화"></p>

        <p> 주소 : <input name="zipcode" id="zipcode" size="10" maxlength="7" readonly>
            <input type="button" value="우편번호 검색" id="address"><br />
            <input name="address01" id="address01" size="70" maxlength="70" readonly>
            <input name="address02" id="address02" size="70" maxlength="70"> </p>

        <p> <textarea name="comment" cols="30" rows="3" placeholder="가입인사를 입력해주세요"></textarea></p>
        <p> <input type="submit" value="가입하기">
            <input type="reset" value="다시쓰기"></p>
    </form>

 

자바스크립트 코드
       /*
        카카오 우편번호 검색 가이드 페이지 :  https://postcode.map.daum.net/guide
        getElementById() : html 에서 매개변수로 받은 id 값이 있는 요소를 반환.
        */
        function execDaumPostcode() {
            new daum.Postcode({
                oncomplete: function(data) {
                    // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.

                    // 각 주소의 노출 규칙에 따라 주소를 조합한다.
                    // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
                    var fullAddr = ''; // 최종 주소 변수
                    var extraAddr = ''; // 조합형 주소 변수

                    // 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
                    if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
                        fullAddr = data.roadAddress;
                    }
                    else { // 사용자가 지번 주소를 선택했을 경우(J)
                        fullAddr = data.jibunAddress;
                    }

                    // 사용자가 선택한 주소가 도로명 타입일때 조합한다.
                    if(data.userSelectedType === 'R'){
                        //법정동명이 있을 경우 추가한다.
                        if(data.bname !== ''){
                            extraAddr += data.bname;
                        }
                        // 건물명이 있을 경우 추가한다.
                        if(data.buildingName !== ''){
                            extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
                        }
                        // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
                        fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
                    }

                    // 우편번호와 주소 정보를 해당 필드에 넣는다.
                    document.querySelector('input[name=zipcode]').value = data.zonecode; //5자리 새우편번호 사용
                    document.querySelector('input[name=address01]').value = fullAddr;

                    // 커서를 상세주소 필드로 이동한다.
                    document.querySelector('input[name=address02]').focus();
                }
            }).open();
        }

        document.addEventListener("DOMContentLoaded", function () {
            const addrBtn = document.querySelector('input[id=address]');
            addrBtn.addEventListener('click', execDaumPostcode);
        });

 

JSP 코드
    <%
        request.setCharacterEncoding("utf-8");
        String userid = request.getParameter("id");
        String password = request.getParameter("passwd");
        String name = request.getParameter("name");
        String phone = request.getParameter("phone1");
        String sex = request.getParameter("sex");
        String[] hobby = request.getParameterValues("hobby");
        String comment = request.getParameter("comment");
    %>
    <p> 아이디 : <%=userid%>
    <p> 비밀번호 : <%=password%>
    <p> 이름 : <%=name%>
    <p> 연락처 : <%=phone%>
    <p> 성별 : <%=sex%>
    <p> 취미 : <%
        if (hobby != null) {
            for(String s: hobby) {
                out.println(" " + s);
            }
        }
        %>
    <p> 가입인사 : <%=comment%>

 


2.  유효성 검사

회원가입시 아이디와 비밀번호를 입력하지 않을 시 + 비밀번호에 아이디가 포함된 경우 경고창 띄우기

html 코드
<body>
    <h3>회원가입</h3>
    <form action="validation_process.jsp" name="member" method="post">
        <p> 아이디 : <input type="text" name="id"> <input type="button" value="아이디 중복검사"></p>
        <p> 비밀번호 : <input type="password" name="passwd"></p>

        <p> <input type="submit" value="가입하기"> </p>
    </form>
</body>

 

javascript 코드
<script>
    document.addEventListener("DOMContentLoaded", function() {
       const id = document.querySelector("input[name=id]");
       const pwd = document.querySelector("input[name=passwd]");
       const submitBtn = document.querySelector('input[value="가입하기"]');

       submitBtn.addEventListener('click', function(event) {
           if (id.value.trim() === "") {
               alert('아이디를 입력해 주세요.');
               event.preventDefault(); // Prevent form submission
               id.focus();
           } else if (pwd.value.trim() === "") {
               alert('비밀번호를 입력해 주세요.');
               event.preventDefault(); // Prevent form submission
               pwd.focus();
           } else if (pwd.value.indexOf(id.value) !== -1) {
               alert('비밀번호는 아이디를 포함할 수 없습니다.');
               event.preventDefault(); // Prevent form submission
               pwd.focus();
           }
       });

    });
</script>

 

JSP 코드
<body>
    <%
        request.setCharacterEncoding("utf-8");
        String userid = request.getParameter("id");
        String password = request.getParameter("passwd");
    %>
       <p> 아이디 : <%=userid%>
       <p> 비밀번호 : <%=password%>

</body>

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

'JSP' 카테고리의 다른 글

[JSP] 쿠키 Cookie 와 세션 Session  (0) 2024.04.20
[JSP] 내장객체 - response, out  (0) 2024.04.17
[JSP] 내장 객체 - request  (0) 2024.04.17
[JSP] 디렉티브 태그 - include, taglib  (0) 2024.04.16
[JSP] 디렉티브 태그 - page tag  (0) 2024.04.16


1.  response 내장 객체의 기능과 사용법

response 내장 객체는 사용자의 요청을 처리한 결과를 서버에서 웹 브라우저로 전달하는 정보를 저장

  ➡️  즉 서버는 응답 헤더와 요청 처리 결과 데이터를 웹 브라우저로 보냄
  ➡️  JSP 컨테이너는 서버에서 웹 브라우저로 응답하는 정보를 처리하기 위해  javax.servlet.http.HttpServletResponse 객체 타입의 response 내장 객체를 사용하여 사용자의 요청에 응답

 


 

1) 페이지 이동 관련 메소드


사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동하는 것을 리다이렉션(redirection)
서버는 웹 브라우저에 다른 페이지로 강제 이동하도록 response 내장 객체의 리다이렉션 메소드를 제공
페이지 이동 시에는 문자 인코딩을 알맞게 설정 해야 함

페이지 이동 방법


  📍 포워드(forward) 방식

<jsp:forward page="이동할 페이지"/>

 

  ✓ 현재 JSP 페이지에서 이동할 URL로 요청 정보를 그대로 전달하므로 사용자가 최초로 요청한 정보가 이동된 URL에서도 유효. 그러나 이동된 URL이 웹 브라우저의 주소 창에 나타나지 않고 처음 요청한 URL이 나타나기 때문에 이동 여부를 사용자가 알 수 없음

  📍 리다이렉트(redirect)방식

response.sendRedirect("이동할 페이지")

 

  ✓ 처음 요청받은 현재 JSP 페이지로부터 이동할 URL을 웹 브라우저로 반환. 이때 웹 브라우저에서는 새로운 요청을 생성하여 이동할 URL에 다시 요청을 전송하므로 처음 보낸 요청 정보가 이동된 URL에서는 유효하지 않음. 즉 클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동. 따라서 이동된 URL이 웹 브라우저의 주소 창에 보임.

페이지 이동 관련 메소드 반환유형 설명
sendRedirect(String url) void 설정한 URL 페이지로 강제 이동

 

<body>
    <%
      response.setHeader("Refresh", "5");
      Calendar calendar = Calendar.getInstance();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR_OF_DAY);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);

      if (hour < 12)
        am_pm = " AM";
      else {
        am_pm = " PM";
        hour = (hour != 12) ? hour - 12 : hour;
      }

      String currentTime = hour + ":" + minute + ":" + second + am_pm;
    %>
    <p>현재 시간은 <b><%=currentTime %></b></p>
    <p><a href="response_data.jsp">구글 홈페이지로 이동하기</a></p>
</body>
// response_data.jsp 파일
<body>
    <%
        response.sendRedirect("https://www.google.com");
    %>
</body>

 


내장 객체로 페이지 이동하기 ▶️  아이디와 비밀번호가 일치하면 성공 페이지로, 그렇지 않으면 로그인 페이지로 이동

 

    1)  폼 문으로 전송받은 아이디와 비밀번호가 일치하면 response01_success.jsp 페이지로 이동.

    2) 일치하지 않으면 response01_failed.jsp 페이지로 이동하도록 response 내장 객체의 sendRedirect() 메서드를 작성

// form 태그 작성
<body>
    <form action="response01_process.jsp" method="post">
      <p> 아 이 디 : <input type="text" name="id">
      <p> 비밀번호 : <input type="text" name="passwd">
      <p> <input type="submit" value="전송">
    </form>
</body>
// response01_process.jsp 파일
<body>

    <%
      request.setCharacterEncoding("utf-8");
      String userid = request.getParameter("id");
      String password = request.getParameter("passwd");

      if (userid.equals("관리자") && password.equals("1234")) {
          out.println("로그인을 성공했습니다!!");
          response.sendRedirect("response01_success.jsp");
      } else {
          out.println("로그인을 실패했습니다.");
          response.sendRedirect("response01_failed.jsp");
      }
    %>

</body>
// response01_success.jsp 파일
<body>
    로그인을 성공했습니다!!
</body>
// response01_failed.jsp 파일
<body>
    <p> 로그인을 실패했습니다.</p>
    <p><a href="./04.jsp"> 로그인가기</a></p>
</body>


 

2) 응답 HTTP 헤더 관련 메소드


응답 HTTP 헤더 관련 메소드는 서버가 웹 브라우저에 응답하는 정보에 헤더를 추가하는 기능을 제공
 ➡️ 헤더 정보에는 주로 서버에 대한 정보가 저장되어 있음

 

메소드 종류
메소드 반환 유형 설명
addCookie(Cookie cookie) void 쿠키를 추가
addDateHeader(String name, long date) void 설정한 헤더 이름 name에 날짜/시간을 추가
addHeader(String name, String value) void 설정한 헤더 이름 name에 value를 추가
addIntHeader(String name, int value) void 설정한 헤더 이름 name에 정수 값 value를 추가
setDateHeader(String name, long date) void 설정한 헤더 이름 name에 날짜/시간을 설정
setHeader(String name, String value) void 설정한 헤더 이름 name에 문자열 값 value를 설정
setIntHeader(String name, int value) void 설정한 헤더 이름 name에 정수 값 value를 설정
containsHeader(String name) boolean 설정한 헤더 이름 name이 HTTP 헤더에 포함되었는지 여부를 확인
getHeader(String name) String 설정한 헤더 이름 name 값을 가져옴

 

response 내장 객체로 5초마다 JSP 페이지 갱신하기 

 

   1) 5초마다 JSP 페이지가 갱신되도록 response 내장 객체의 setIntHeader() 메서드를 작성

   2) 5초마다 JSP 페이지가 갱신된 시간을 출력하도록 표현문 태그 작성

<body>
    <p>이 페이지는 5초마다 새로고침 됩니다.</p>

    <%
      response.setIntHeader("Refresh", 5);
    %>
    <p> <%=(new java.util.Date())%> </p>
</body>


3) 응답 콘텐츠 관련 메소드

 

response 내장 객체는 웹 브라우저로 응답하기 위해 MIME 유형, 문자 인코딩, 오류 메시지, 상태 코드 등을 설정하고 가져오는 응답 콘텐츠 관련 메소드를 제공

메소드 반환 유형 설명
setContentType(String type) void 웹 브라우저에 응답할 MIME 유형을 설정
getContentType() String 웹 브라우저에 응답할 MIME 유형을 가져옴
setCharacterEncoding(String charset) void 웹 브라우저에 응답할 문자 인코딩을 설정
getCharacterEncoding() String 웹 브라우저에 응답할 문자 인코딩을 가져옴
sendError(int status_code, String message) void 웹 브라우저에 응답할 오류(코드 및 오류 메시지)를 설정
setStatus(int statuscode) void 웹 브라우저에 응답할 HTTP 코드를 설정

 


2.  out 내장 객체의 기능과 사용법 

👩🏻‍💻  out 내장 객체는 웹 브라우저에 데이터를 전송하는 출력 스트림 객체

👩🏻‍💻  JSP 컨테이너는 JSP 페이지에 사용되는 모든 표현문 태그와 HTML 일반 텍스트 등을 out 내장 객체를 통해 웹 브라우저에 그대로 전달 

👩🏻‍💻  스크립틀릿 태그에 사용하여 단순히 값을 출력 하는 표현문 태그(<%= ...%>)와 같은 결과를 얻을 수 있음

 

메소드 반환 유형 설명
print(String str) void 설정된 str 값을 웹 브라우저에 출력
println(String str) void 설정된 str 값을 웹 브라우저에 출력. 이 때 줄 바꿈이 적용되지 않음.
newLine() void 줄바꿈을 출력
getBufferSize() int 현재 출력 버퍼의 크기를 가져옴
getRemaining() int 현재 남아 있는 출력 버퍼의 크기를 가져옴
clear() void 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비움. 만약 버퍼가 이미 플러시 되었다면 IOException이 발생.
clearBuffer() void 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비움. 만약 버퍼가 이미 플러시 되었다면 IOException이 발생하지 않음
flush() void 현재 출력 퍼버에 저장되어 있는 내용을 웹 브라우저에 전송하고 비움
isAutoFlush() boolean 출력 버퍼가 채워졌을 때의 처리를 결정. 자동으로 플러시 하는 경우 true를 반환하고, 그렇지 않은 경우 false를 반환

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


1. 내장 객체  implicit object

👩🏻‍💻  JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체

👩🏻‍💻  JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함

👩🏻‍💻  JSP 페이지에 별도로 import 문 없이 자유롭게 사용할 수 있음

        ➡️ 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용

 

내장 객체의 종류
내장객체 반환유형 설명
request  javax.servlet.http.HttpServletRequest 웹 브라우저의 HTTP 요청 정보를 저장
response javax.servlet.http.HttpServletResponse 웹 브라우저의 HTTP요청에 대한 응답 정보 저장
out  javax.servlet.jsp.jsp.jspWriter JSP 페이지에 출력 할 내용을 담고 있는 출력스트림
session  javax.servlet.http.HttpSession 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장
application javax.servlet.ServletContext 웹 애플리케이션의 콘텍스트 정보를 저장
pageContext  javax.servlet.jsp.PageContext JSP 페이지의 정보를 저장
page 
java.lang.Object JSP 페이지를 구현한 자바 클래스로 JSP 페이지 자체를 나타냄
config javax.servlet.ServletConfig JSP 페이지의 설정 정보를 저장
exception
java.lang.Throwable JSP 페이지의 예외 발생을 처리

 

  ⚡️  내장 객체는 서블릿 프로그램에서 모두 _jspService() 메소드 내부에 있음

  ⚡️  메소드 매개변수인 request, reponse를 비롯해 pageContext, session, application, config, out, page 등은 메소드 내에 서 참조할 수 있는 참조 변수 

  ⚡️ 모든 내장 객체는 JSP 컨테이너가 관리하는 객체로, 이 중 request, session, application, pageContext를 이용하여 속성을 관리 할 수 있음

  ⚡️  속성은 각각의 내장 객체가 존재하는 동안 JSP 페이지 사이에서 정보를 주고받거나 공유하는데 사용

 

메소드 반환 유형 설명
setAttribute(String name, Object value) void 해당 내장객체의 속성 이름이 name인 속성 값을 value로 저장
getAttribute(String name) Object 해당 내장객체의 속성 이름이name인 속성 값을 반환
removeAttribute(String name) void 해당 내장객체의 속성 이름이 name인 속성을 삭제
getAttributeNames() java.util.Enumeration 해당 내장객체의 모든 속성 이름을 가져옴

 


1)  request 내장 객체의 기능과 사용법 

 

출처 : https://download.oracle.com/

 

request 내장 객체는 JSP 페이지에서 가장 많이 사용되는 기본 내장 객체로, 웹 브라우저에서 서버의 JSP 페이지로 전달하는 정보를 저장. 즉 폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져옴. 

 

JSP 컨테이너는 웹 브라우저에서 서버로 전달되는 정보를 처리하기 위해 javax.servlet.http.HttpServletRequest 객체 타입의 request 내장 객체를 사용하여 사용자의 요구 사항을 얻어냄

 

요청 파라미터 관련 메소드 

 

  📍  요청 파라미터는 사용자가 폼 페이지에 데이터를 입력한 후 서버에 전송할 때 전달되는 폼 페이지의 입력된 정보 형태.

  📍  이러한 요청 파라미터는 <name=value> 형식으로 웹 브라우저에서 서버의 JSP 페이지로 전송

  📍  요청 파라미터는 폼 페이지에서 <input type="text" ...> 처럼 입력 양식이 텍스트 유형인 경우 값을 입력하지 않으면 서버로 빈 문자열이 전송. 하지만 체크 박스와 라디오 버튼 유형인 경우 선택하지 않고 전송하면 요청 파라미터 자체가 전달되지 않음.

 

메소드 반환 유형 설명
getParameter(String name) String 요청 파라미터 이름이 name인 값을 전달
요청 파라미터 값이 없으면 null을 반환
getParameterValues(String name) String[] 모든 요청 파라미터 이름이 name인 값을 배열 형태로 전달
요청 파라미터 값이 없으면 null을 반환
getParameterNames() java.util.Enumeration 모든 요청 파라미터의 이름과 값을 Enumeration 객체 타입으로 전달
getParameterMap() java.util.Map 모든 요청 파라미터의 이름과 값을 Map 객체타입으로 전달
Map 객체 타입은(요청 파라미터 이름,값) 형식으로 구성

 


요청 HTTP 헤더 관련 메소드 

 

  📍 웹 브라우저는 HTTP 헤더에 부가적인 정보를 담아 서버로 전송. request 내장 객체는 헤더 정보나 쿠키 관련 정보를 얻을 수 있는 메소드를 제공

메소드 반환 유형 설명
getHeader(String name) String 설정한 name의 헤더 값을 가져옴
getHeaders(String name) Enumeration 설정한 name의 헤더 목록 값을 가져옴
getHeaderNames() Enumeration 모든 헤더이름을 가져옴
getIntHeader(String name) int 설정한 name의 헤더 값을 정수로 가져옴
getDateHeader(String name) long 설정한 name의 헤더 값을 시간 값으로 가져옴
getCookies() javax.servlet.http.Cookie 모든 쿠키값을 가져옴

 

request 내장 객체로 모든 HTTP 헤더 정보 값 출력하기 

 

   1) 모든 헤더 이름을 가져오도록 request 내장 객체의 getHeaderNames() 메서드를 호출하고,

       이를 모두 저장하도록 Enumeration 객체 타입의 변수 en을 작성.

   2) Enumeration 객체 타입 변수 en의 hasMoreElements() 메서드를 통해 저장된 헤더 이름이 있을 때까지

       반복하도록 while문 작성.   

  3) 현재 헤더 이름을 가져오도록 Enumeration 객체 타입 변수 en의 nextElement() 메서드를 작성.

  4) 설정된 헤더 이름의 값을 가져오도록 request 내장 객체의 getHeader() 메소드를 작성.

        예) user-agent : 사용자의 브라우저 정보.

              referer : 현재페이지로 이동해오기 바로 전 페이지의 주소.

<body>
    <%
      Enumeration<String> en = request.getHeaderNames();
      while (en.hasMoreElements()) {
        String headerName = (String) en.nextElement();
        String headerValue = request.getHeader(headerName);
    %>
    <%=headerName%> : <%=headerValue%><br>
    <%
      }
    %>
</body>

웹 브라우저/서버 관련 메소드 

 

  📍 request 내장 객체는 웹 브라우저의 요청 및 서버 관련 정보를 얻을 수 있는 메소드를 제공

 

메소드 반환유형 설명
getRemoteAddr() String 웹브라우저의 IP 주소를 가져옴
getContentLength( ) long 웹 브라우저의 요청 파라미터 길이를 가져옴
getCharacterEncoding()  String 웹 브라우저의 문자 인코딩을 가져옴
getContentType()  String 웹 브라우저의 콘텐츠 유형을 가져옴
getProtocol() String 웹 브라우저의 요청 프로토콜 을 가져옴
getMethod() String 웹 브라우저의 HTTP 요청 메소드(GET, POST)를 가져 옴
getRequestURI() String 웹 브라우저가 요청한 URI 경로를 가져옴
getContextPath()  String 현재 JSP 페이지의 웹 애플리케이션 콘텍스트 경로를 가져 옴
getServerName()  String 서버 이름을 가져옴
getServerPort() int 실행 중인 서버 포트 번호를 가져옴
getQueryString()
String 웹 브라우저의 전체 요청 파라 미터 문자열[물음표(?) 다음 URL에 할당된 문자열]을 가져 옴

 

request 내장 객체로 모든 웹 브라우저 및 서버 정보 값 출력하기
<body>

    <%-- 웹 브라우저의 IP 주소 반환 --%>
    <p>클라이언트 IP : <%=request.getRemoteAddr()%>
        
    <%-- 웹 브라우저의 요청 정보 길이 반환 --%>
    <p>요청 정보 길이 : <%=request.getContentLength() %>

    <%-- 웹 브라우저의 요청 정보 인코딩 반환 --%>
    <p>요청 정보 인코딩 : <%=request.getCharacterEncoding() %>

    <%-- 웹 브라우저의 요청 정보 콘텐츠 유형 반환 --%>
    <p>요청 정보 콘텐트 유형 : <%=request.getContentType() %>

    <%-- 웹 브라우저의 요청 정보 프로토콜 반환 --%>
    <p>요청 정보 프로토콜 : <%=request.getProtocol() %>

    <%-- 웹 브라우저의 요청 정보 방식 (GET, POST)을 반환 --%>
    <p>요청 정보 전송방식 : <%=request.getMethod() %>

    <%-- 웹 브라우저에 요청한 URI 경로를 반환 --%>
    <p>요청 URI : <%=request.getRequestURI() %>

    <%-- 현재 JSP 페이지의 웹 애플리케이션 콘텍스트 경로를 반환 --%>
    <p>컨텍스트 경로 : <%=request.getContextPath() %>

    <%-- 서버 이름을 반환 --%>
    <p>서버 이름  : <%=request.getServerName() %>

    <%-- 실행 중인 서버 포트 반환 --%>
    <p>서버 포트  : <%=request.getServerPort() %>

    <%-- 웹 브라우저의 전체 요청 파라미터 문자열(쿼리문) 반환 --%>
    <p>쿼리문  : <%=request.getQueryString() %>

</body>

request 내장 객체로 폼 페이지에서 아이디와 비밀번호를 전송받아 출력하기

 

    1) 폼 페이지에서 입력한 한글을 처리하도록 request 내장 객체의 setCharacterEncoding() 메서드에

        문자 인코딩 유형을 utf-8로 작성 

    2) 입력된 아이디와 비밀번호를 폼 문으로부터 전송받도록 request 내장 객체의 getParameter() 메서드를 작성

<body>
    <form action="request01_process.jsp" method="post">
          <p> 아 이 디 : <input type="text" name="id">
          <p> 비밀번호 : <input type="password" name="passwd">
          <p> <input type="submit" value="전송" />
    </form>
</body>
// request01_process.jsp 파일
<body>

    <%
      request.setCharacterEncoding("utf-8");
      String userid = request.getParameter("id");
      String password = request.getParameter("passwd");
    %>
    <p> 아이디 : <%=userid%>
    <p> 비밀번호 : <%=password%>

</body>

 

 

 

[ 내용 참고 : IT 학원 강의 ]


1.  include 디렉티브 태그

👻  현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그
       ➡️  포함할 수 있는 외부 파일은 HTML, JSP, 텍스트 파일 등
👻  include 디렉티브 태그는 서블릿 프로그램으로 번역될 때 현재 JSP 페이지와 설정된 다른 외부 파일의내용이 병합되어 번역
👻  머리글과 바닥글 같은 공통된 부분을 별도의 JSP 파일로 만들어 웹 페이지를 모듈화 할 수 있다.
       ➡️ 코드를 재사용하고 중복된 코드를 줄임으로써 유지 보수 측면에서 매우 유용

 

 include 디렉티브 태그를 사용하는 이유


외부파일의 내용(예: header, footer)을 복사하여 현재 JSP 페이지에 붙여넣을 수 있지만 이는 좋은 방법이 아니다.
예를 들어 머리글과 바닥글에 해당하는 외부 파일 2개와 100개의 JSP페이지가 있는 경우 JSP 페이지 100개에 외부 파일 2개의 내용을 복사하여 붙여넣었을 때 이 외부 파일의 내용을 변경해야 한다면JSP 페이지 100개를 모두 수정 편집해야 한다.


하지만 include 디렉티브 태그를 사용하면 모든 외부 파일을 포함하므로 외부 파일의 내용을 변경할 때마다 특정 외부 파일만 수정 편집하면 된다.

예를 들어 하나의 프로젝트에서 다수의 JSP 페이지가 동일한 설정을 사용할 경우에 모든 페이지에 다 코딩을 할 수 있고 하나의 페이지에 설정 코드를 넣고 인클루드 해서 사용할 수 있다. 모든 페이지에 동일한 코드를 넣는 경우 특정 페이지의 오타 or 설정을 변경해야 하는 경우작업이 번거로워 진다. 하나의 페이지에 설정 코드를 넣고 인클루드 해서 사용하면 오타에 자유롭고 + 설정을 변경해야 하는 경우에 간편하다.

 

<body>
    <%@ include file="_header.jsp"%>
    <p>방문해 주셔서 감사합니다.</p>
    <%@ include file="_footer.jsp"%>
</body>
// _header.jsp 파일
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h4>헤더 페이지 영역입니다.</h4>
// _footer.jsp 파일
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<footer>Copyright .JSP</footer>

 


2. taglib 디렉티브 태그

👻  현재 JSP 페이지에 표현 언어, JSTL, 사용자 정의 태그 custom tag 등 태그 라이브러리를 설정하는 태그

<%@ taglib uri="경로" prefix="태그 식별자" %>


  ⚡️  uri 속성은 사용자가 정의한 태그의 설정 정보를 가진 경로 주소
  ⚡️  prefix 속성은 uri에 설정한, 사용자가 정의한 태그를 식별하기 의한 고유 이름
         ▶️ 해당 JSP 페이지 내에서 uri속성 값을 그대로 사용하면 복잡하므로 prefix 속성 값이 대신 식별할 수 있게 해주는 것

 

👻  taglib 디렉티브 태그가 서블릿 프로그램으로 번역될 때 uri 속성 값은 JSP컨테이너에 사용자가 정의한 태그 라이브러리의 위
치를 알려줌. prefix 속성 값은 사용자가 정의한 태그 라이브러리의 접두어 태그가 무엇인지 JSP 컨테이너에 알려주는 역할.

 

JSTL 태그 

 

유용한 JSP 태그의 모음인 JSTL은 자주 사용되는 핵심 기능을 제공. 반복문, 조건문과 같은 논리적 구조 작업, XML 문서 조작, 국제화 태그 조직, SQL 조작 수행을 위한 태그를 지원. JTSL을 사용하려면 WebContent/WEB-INF/lib 디렉터리의 위치에 jstl.jar 라이브러리 파일이 있어야 함. Apache Standard Taglib 페이지에서 다운로드 가능.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--taglib 디렉티브 태그에 태그 라이브러리로 JSTL을 설정하는 예--%>
    <c:forEach var="k" begin="1" end="10" step="1">
        <c:out value="${k}"/>
    </c:forEach>
</body>
</html>

 

[ 내용 참고 : IT 학원 강의 ]


1.  디렉티브 태그  Directive Tag

디렉티브 태그는 JSP 페이지를 어떻게 처리할 것인지를 설정하는 태그

 

JSP 페이지가 서블릿 프로그램에서 서블릿 클래스로 변환할 때 JSP 페이지와 관련된 정보를 JSP 컨테이너에 지시하는 메시지. 따라서 디렉티브 태그는 JSP 페이지를 수정하여 다시 컴파일하는 경우에만 역할을 수행하기 때문에 개별 HTML 응답에 특별한 영향을 미치지 않음

 

태그 형식 설명
page <%@ page ... %> JSP 페이지에 대한 정보를 설정
include <%@ include ... %> JSP 페이지의 특정 영역에 다른 문서를 포함
taglib <%@ taglib ... %> JSP 페이지에서 사용할 태그 라이브러리를 설정

 

 

1)  page 디렉티브 태그 

 

🚀  JSP 페이지가 생성할 콘텐츠 유형의 문서, 사용할 자바 클래스, 오류 페이지 설정, 세션 사용 여부, 출력 버퍼의 존재 유무 등과 같이 JSP 컨테이너가 JSP 페이지를 실행하는데 필요한 정보를 설정 

🚀  일반적으로 JSP 페이지의 최상단에 선언하는 것을 권장

🚀  <@ 사이에는 공백을 주지 말것 

 

page 디렉티브 태그의 속성
속성 설명 기본값
language  현재 JSP 페이지에서 사용할 프로그래밍 언어를 설정 java
contentType  현재JSP 페이지의 콘텐츠유형을 설정 text/html
pageEncoding  현재 JSP 페이지의 문자 인코딩 유형을 설정   ISO-8859-1
import 현재 JSP 페이지에서 사용할 자바 클래스를 설정  
session  현재 JSP 페이지의 HTTP 세션 사용 여부를 설정 true
buffer 현재 JSP 페이지의 출력 버퍼를 설정 8KB
autoFlush 자동으로 출력 버퍼를 비우는 것을 제어하는데 사용 true
isThreadSafe  현재 JSP 페이지에서 멀티스레드의 동작을 제어하는 데 사 true
info  현재 JSP 페이 지에 대한 설명 을 설정  
errorPage  현재 JSP 페이 지가 실행되는 동안 오류가 발 생하면 특정 오류 페이지로 이동하는 데 사용   
isErrorPage 현재 JSP 페이지가 오류 페이지인지 여부를 설정  
isELIgnored  현재 JSP 페이지의 표현 언어 Expression
Language 사용 여부를 설정
false
isScripting 스크립트 태그 (선언문, 스크립틀릿, 표현문) 사용 여부를 설정  

 

  📍  하나의 page 디렉티브 태그에 하나 또는 여러 개의 속성을 설정 또는 여러 개의 속성마다 개별적으로 page 디렉티브 태그를 선언할 수 있음. import 속성을 제외한 속성은 JSP 페이지에 한 번씩만 설정할 수 있음

 

 

A. language 속성 

<%@ page language="java" %> 

 

  👾  현재 JSP 페이지에서 사용할 프로그래밍 언어를 설정하는 데 사용, 생략 가능 


B. contentType 속성 

<%@ page contentType="text/html :charset=utf-8" %> 

 

  👾  현재 JSP 페이지의 콘텐츠 유형을 설정하는 데 사용 

  👾  text/html, text/xml, text/plain 등이 있고 기본 값은 text/html.

  👾  문자열 세트 charset 를 설정하여 JSP 페이지의 전체 문자열을 변경할 수 있음 

application/msword 로 설정
<%@ page contentType="application/msword" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--
    page 디렉티브 태그에 콘텐츠 유형을 마이크로 소프트 워드 문서(application/msword)로 설정하기.
    1) 콘텐츠 유형을 application/msword로 설정하도록 page 디렉티브 태그의 contentType 속성을 작성.
    --%>
    Today is: <%=new java.util.Date()%>
</body>
</html>

 

text/xml 로 설정
<%@ page contentType="text/xml;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>contentType 디렉티브 태그</h2>
    <h4>text/html : HTML 출력</h4>
    <h4>charset=utf-8 : 문자 인코딩</h4>
</body>
</html>


C. pageEncoding 속성 

<%@ pageEncoding="ISO-8859-1" %>
<%@ page contentType="text/html :charset=ISO-8859-1" %> 

 

  👾  현재 JSP 페이지의 문자 인코딩 유형을 설정하는 데 사용

  👾  문자 인코딩 유형의 기본값은 ISO-8859-1


D. import 속성 

<%@ page import="java.io.*, java.lang.*" %> 
<%@ page import="java.io.*" %> 
<%@ page import="java.lang.*" %> 

 

  👾  현재 JSP 페이지에서 사용할 자바 클래스를 설정하는 데 사용.

  👾  둘 이상의 자바 클래스를 포함하는 경우 쉼표(,)로 구분하여 연속해서 여러 개의 자바 클래스를 설정할 수 있음


E. session 속성 

<%@ page session="true" %> 

 

  👾  현재 JSP 페이지의 HTTP 세션 사용 여부를 설정하는 데 사용. 기본 값은 true. 

  👾  session 속성 값이 true이면 현재 JSP 페이지에서 내장 객체인 session 변수를 사용할 수 있음.


F. buffer 속성 

<%@ page buffer="none" %> 
<%@ page buffer="32KB" %>

 

  👾  현재 JSP 페이지의 출력 버퍼를 설정하는 데 사용

  👾  이 속성 값은 none과 '버퍼 크기'로 설정할 수 있음

     ⚡️ 속성 값을 none으로 설정하면 출력 버퍼를 채우지 않고 웹 브라우저로 직접 보냄

     ⚡️ '버퍼 크기'로 속성 값을 설정하면 출력 버퍼에 먼저 기록을 한 후 웹 브라우저로 전송

 

출력버퍼를 사용하는 이유 

 

  1) 작은 데이터를 여러 번 전송하는 것 보다 한번 큰 데이터를 전송함

        ▶️  큰 단위를 한번에 전송하는 것이 전송성능에 있어서 더 효율적

  2) 응답결과가 바로 전송되지 않기 때문에 JSP실행 도중 출력버퍼를 지우고 새로운 내용을 보여줄 수 있다. 

        ▶️ JSP가 응답 결과를 생성하는 도중 에러가 발생했을 시 출력버퍼를 비우고 에퍼레이지를 출력할 수 있도록 할 수 있다. 

  3) 버퍼가 다 차기 전까지는 헤더를 변경할 수 있다

       ▶️ 출력버퍼가 flush 되거나 꽉차서 자동으로 출력되기 이전까지는 얼마든지 헤더를 변경할 수 있다


 

G. autoFlush 속성 

<%@ page autoFlush="true" %>

 

  👾  자동으로 출력 버퍼를 비우는 것을 제어하는데 사용. 기본값은 true. 

  👾  출력 버퍼가 채워진 경우 자동으로 버퍼에 있는 데이터를 웹 브라우저로 보내고 버퍼를 비울지 또는 버퍼 오버플로의 예외를 나타낼지 등의 처리를 설정

  👾  false로 설정하면 출력 버퍼가 가득 채워질 때 버퍼 오버플로의 예외를 발생. 


H. isThreadSafe 속성 

<%@ page isThreadSafe="true" %> 

 

  👾  현재 JSP 페이지에서 멀티스레드의 동작을 제어하는 데 사용. 기본 값은 true. 

  👾  여러 요청이 동시에 수신되는 경우 JSP 페이지가 어떻게 동작해야 하는지를 JSP 컨테이너에 지시하여 응답할 수 있게 함. 

  👾 속성 값이 true이면 JSP 페이지에 대해 수신된 여러 요청이 동시에 처리되고 

                       false로 설정하면 요청이 순차적으로 처리


I. info 속성 

<%@ page info="Home Page JSP" %> 

 

  👾  현재 JSP 페이지에 대한 설명을 설정하는 데 사용. 주석과 같은 기능. 

 


J. errorPage 속성 

<%@ page errorPage="MyErrorPage.jsp" %> 

 

  👾  현재 JSP 페이지가 실행되는 동안 오류가 발생하면 특정 오류 페이지로 이동하는 데 사용.

  👾  웹 서버가 제공하는 기본 오류 페이지를 사용하지 않고 이동할 오류 페이지의 URL을 설정.


K. isErrorPage 속성 

<%@ page isErrorPage="true" %> 

 

  👾  현재 JSP 페이지가 오류 페이지인지 여부를 설정하는 데 사용

  👾  기본 값은 false이고 예외 처리를 위한 내장 객체인 exception 변수를 사용할 수 없음.

  👾 속성 값을 true로 설정하면 현재 JSP 페이지는 오류 페이지가 됨

  👾  만약 다른 JSP 페이지에서 오류가 발생하면, 호출되는 오류 페이지는 true가 설정된 JSP 페이지가 됨. 

 


L. isELIgnored 속성 

<%@ page isELIgnored="true" %>

 

  👾  재 JSP 페이지의 표현 언어 Expression Language 사용 여부를 설정

  👾  기본 값은 false이며 JSP 페이지에 표현 언어의 표현식 '${}'을 사용할 수 있음

  👾  true로 설정하면 JSP 페이지에 사용된 표현 언어의 표현식을 처리할 수 없기 때문에 정적 텍스트로 처리

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="true"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setAttribute("RequestAttribute", "request 내장 객체");
%>
${requestScope.RequestAttribute} <%-- 표현문처럼 특정값을 추출 --%>
<script>
    const str = '문자열';
    alert(`${str} 입니다.`);
</script>

</body>
</html>

true일 때

 

false 일 때


M. isScriptingEnabled 속성 

<%@ page isScriptingEnabled="false" %> 

 

  👾  스크립트 태그 (선언문, 스크립틀릿, 표현문) 사용 여부를 설정하는데 사용

  👾  속성 값이 true로 설정하면 기본 스크립트 태그를 사용할 수 있고,

        false로 설정하면 스크립트 태그를 제한하기 때문에 스크립트 태그를 사용하는 경우 번역시 오류가 발생

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

 

+ Recent posts