[JAVA]JSP

신동혁·2022년 8월 12일
0

JAVA

목록 보기
16/16

1.JSP란?

JSP(Java Server Page)는 브라우저에서 자바 데이터와 html, css, js코드와 혼용해서 개발 가능하게 하는 기술이다. Servlet을 이용한 기술로 JSP파일은 최초로 client가 요청할 시 servlet파일로 변화시켜(web container가 해줌) 컴파일해 실행시킨다. 또한 개발의 용이함을 위해 몇가지 내장객체를 미리 제공해준다.(HttpServletRequest : request, HttpServletResponse : response...)

jsp가 html파일과 가장 큰 차이점은 자바코드를 적용할 수 있다는 점이다. 그리고 jsp는 백엔드 언어, html은 프론트 언어로 jsp는 server에서 실행 후 결과만 문자열로 브라우저에 응답하고 html은 브라우저에서 실행 후 결과를 브라우저 상에 출력한다.

  • jsp태그

    • jsp scripting tag

      • page지시자 : jsp설정정보를 정의
        <%@ page @%>

      • 주석 : 도움말을 적기위한 주석처리, html주석()과 달리 client에게 넘어가지 않으므로 보안이 필요한 주석에 사용하면 된다.
        <%-- --%>

      • declaration tag : 멤버변수나 메서드를 정의
        <%! %>

      • scriptlet tag : service() doGet() doPost() 정의
        <% %>

      • expression tag : 브라우저상에서 출력
        @ $로 표현할 때 주의사항 @
        나는 $로 변수를 참조할 때 있는 그대로의 변수를 가져온다고 생각했다.

        // response에 setAttribute로 key가 "key1", value가 "value1"(String타입인 것임!!!)로 담겨 날아왔고, 이를 스크립팅태그로 받아서 써본다.
        console.log(${requestScope.key1});
        // 출력 결과는? --> 당연히 String타입 "value1"이 나오지 않나?

        이때, 출력화면이 무조건 String타입 value1이 나오지는 않는다. 만약 value1이 "1"이었다면 number타입 1로 출력이 되고, value1이 "[1,2,3]"이었다면 Object타입(Array) [1,2,3]으로 출력된다. 그리고 value1이 String타입 "안녕"이었다면? 이때는 출력되지 않고 에러가 발생한다. 그 이유가 무엇일까?

        이는 아마 $를 이용해 변수를 참조할 때 양 옆의 큰따움표(")를 제거한채로 해석해서 그런 것 같다.(정확하지는 않아서 이에 대한 공부가 더 필요하다.)

        // < 이해를 위해 실험해본 예제들 >
        // 1.response 보내는 문서 안
        request.setAttribute("practice1", 1); // 1)숫자
        			request.setAttribute("practice2", "1"); // 2)문자열(안에 숫자로만이루어짐)
        String[] arr = {"1","2","3"};
        			request.setAttribute("practice3", arr); // 3)배열
        			request.setAttribute("practice4", "안녕"); //4)문자열
        
        // 2.request 받는 문서 안
        console.log(${requestScope.practice1}); // 1) 양끝 큰따움표(") 제거 : (원래없었으므로) 1 출력, 타입은 number
        console.log(${requestScope.practice2}); // 2) 양끝 큰따움표(") 제거 : 1 출력, 타입은 number
        console.log(${requestScope.practice3}); // 3) 양끝 큰따움표(") 제거 : (원래없었으므로) {"1","2","3"} 출력, 타입은 Object(array) 
        console.log(${requestScope.practice4}); // 4) 양끝 큰따움표(") 제거 : 안녕 출력해야 하지만, 문자열은 큰따움표없이 출력할 수 없음.
                                                                            //안녕 은 문자열 취급이아니라 변수 취급이다.
                                                                            //즉,변수 안녕을 불러와 출력한다.(안녕변수가 없으면 에러 발생)
    <%=  %>
- jsp action tag
    - RequestDispatcher
        - forward : 요청, 응답 객체가 이동되는 servlet에서 유지         
        <jsp:forward page="이동할주소"/>
        - include : 요청, 응답 객체가 이동되는 servlet에서 유지         
        <jsp:include page="이동할주소">
- EL tag
    - 비교연산 : ${ 비교연산식 }   
    - requestScope, sessionScope
- jstl tag
    - 별도의 library설정이 필요하다
    - <c:if>,<c:forEach begin="" end="" step="" var="">, <c:choose><c:when><c:otherwise> 등등이 존재한다.
profile
개발취준생

0개의 댓글