記錄

스크립트릿 본문

Web/JSP

스크립트릿

surhommejk 2017. 12. 1. 12:29


바로 지난 강의에서 나왔듯이 jsp는 servlet(~.java) -> ~.class -> html의 과정을 거쳐 궁극적으로는 html로 반응하게 되므로 소스보기를 하면 자바 코드는 나오지 않고 저렇게 html만 남게 된다





개행이 뭔가 이상해서 여러가지의 경우로 실험을 해보았다





세 가지의 경우로 실행을 했다

1) 일반적인 java 코드로 개행을 의도

2) java 코드의 println(개행)과 함께 html의 <br/>까지 같이 사용

3) java코드의 println에서 ln은 빼버리고 html의 <br/>만 사용


결과는 아래와 같다




일반적인 java 코드로 개행을 의도






java 코드의 println(개행)과 함께 html의 <br/>까지 같이 사용






java코드의 println에서 ln은 빼버리고 html의 <br/>만 사용






결과적으로 두 가지를 알게 되었다

1) jsp내의 java코드에서 ln은 작동하지 않거나 무시됨

2) jsp에서 개행을 하려면 반드시 <br/>을 출력해야함


2번의 이유는 추측컨데 jsp가 결국 html이기에 (html인데 거기에 java를 넣는 것이니까) 개행을 하려면 html에서 개행을 담당하는 <br/>을 출력해줘야 하는 인 듯 하다.


즉, <%    %> 내에서 java가 작동하면서 out.print과 같은 출력문으로 찍어내는 것은 html코드인것이다. 이런 관점에서 jsp는 결국 html코드를 작성하는 것이고 이 과정에 java의 기능을 이용하고자 java코드를 삽입하는 것이라고 볼 수 있다.


그렇기 때문에 html에서 <br/>을 해줘야만 개행이 된다는 원칙이 여기도 적용이 되어서 println을 하든 print를 하든 <br/>을 출력하지 않는 이상 개행은 절대 되지 않는 것이다. 따라서 println과 print사이에서 고민할 필요도 없고, 개행을 하고 싶다면 <br/>을 출력해주어야 한다. 결론적으로 한 가지만 기억하면 될 것 같다. jsp내에서 java코드의 기능은 원래 java코드의 기능과 동일하고 출력은 html 코드를 입력하는 것이라고 생각하면 될 것 같다.


그리고 부가적으로 System.out.println과 out.println의 java에서 흔히 쓰던 System.out.println 에서 System과 out에 대한 API를 찾아볼 필요성을 느꼈다. out.println만 쓰는 것이 이상해서 System.out.println으로 해보았더니 웹페이지에는 나오지 않고 콘솔창에 html코드가 찍혔다. 일단 너무 파고들면 진도가 안나가니까 여기까지만 정리를 하려고 한다.

>> 추후 알게된 점은 out이 jsp의 내부객체라서 out.println이 가능하다는 점이다




<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>

<%
    int i = 0;
    while (true) {
        i++;
        out.print("2 * " + i + " = " + 2 * i + "<br/>");
        out.print("=============" + "<br/>");
        if (i == 9)
            break;
    }
%>

</body>
</html>


Comments