0906 | 사용자입력 - 쿼리스트링 & 키 전달법 / jsp개념 / jsp 코드블록
✅ 클라이언트의 요청시 키 전달하는 방법 익히기
<h2>주관식 - 인삿말을 몇번 듣고 싶으세요</h2>
<form action="index" method="post">
<label>갯수입력</label><input type="text" name="s">
<input type="submit" value="요청">
</form>
✔ action은 클라이언트 입장에서의 주소. 클라이언트 입장에서는 root(/)를 기준으로 index.html 이나 index나 동일하므로 action="/index"로 표기하든 action="index"로 표기하든 동일하다.
✔ name은 키값. 키값을 넣지 않으면 서버로 전달되지 않는다.
👉 여기까지만 설정하면 쿼리스트링으로 전송되는걸 볼 수있다. form태그는 사용자 입력값을 가지고 쿼리스트링을 자동생성해준다.
<!--컨트롤단에서 s는 횟수, t는 타입 (주관식/객관식)을 받는다-->
<h2>객관식 - 인사말을 몇번 듣고 싶으세요</h2>
<a href="/index?s=1&t=1">1번</a> <!--기본값 같이 전달. 그대로 노출됨-->
<a href="/index?s=10&t=1">10번</a>
<a href="/index?s=20&t=2">20번</a>
<hr>
<h2>주관식 - 인사말을 몇번 듣고 싶으세요</h2>
<!--action은 클라이언트 입장에서의 주소, name은 키값-->
<form action="index">
<label>개수입력</label>
<input type="text" name="s" value="0"> <!--사용자 입력 전달하기-->
<input type="hidden" name="t" value="2"> <!--hidden 설정으로 기본 전달 타입을 숨길 수 있다-->
<input type="submit" value="요청">
</form>
<!--사용자가 선택가능한 링크 만들기-->
<a href="?t=1">객관식 링크</a> <!--같은 브라우저라 index표기없이 쿼리부터 전달 가능-->
<br>
<a href="?t=2">주관식 링크</a>
✅ JSP 만들기
#️⃣ JSP 개념
: html 파일을 주면 out.write()출력코드로 만들어주는 알바생, Jasper. 톰캣 안에 거주하고 있다.
구조적으로 JSP는 Java 서블릿 의 상위 수준 추상화 로 볼 수 있습니다 . JSP는 런타임 시 서블릿 으로 변환되므로 JSP는 서블릿입니다. 각 JSP 서블릿은 캐시되어 원본 JSP가 수정될 때까지 재사용됩니다. Jakarta Server Pages는 독립적으로 사용하거나 서버 측 모델-뷰-컨트롤러 설계 의 뷰 구성 요소로 사용할 수 있습니다 . 일반적으로 JavaBeans를 모델로, Java 서블릿(또는 Apache Struts 와 같은 프레임워크 )을 컨트롤러로 사용합니다. 이는 모델 2 아키텍처 의 한 유형입니다 . |
👉 톰캣이 jsp 확장자 파일을 받으면 jasper가 그제서야 자바파일을 만들고 컴파일을 한다.
없던 루틴이 생겼으므로 속도가 느리다. 그러나 두세번째 요청이 왔을땐 컴파일된 파일을 사용하므로 처음에만 느림.
#️⃣ JSP화면 생성원리
: html 코드를 out.write() 자바코드를 통해서 화면으로 출력한다.
▼ 기존에는 컨트롤러에서 값을 반환해줬지만 (결과창이 새 창에서 따로 나옴) 기존의 창에 그대로 출력하고 싶다면 컨트롤러에 동일한 태그를 붙여주면 된다. out.write()를 사용해서 그대로 붙일 수 있다.
👉 컨트롤러에 type을 선언하고 어떤 html태그가 뜰지 조건을 정해주면, 주소창에 쿼리스트링을 어느것을 입력하느냐에 따라서 주관식/객관식 화면을 다르게 출력해볼 수 있다. (*이때는 클라이언트로부터 전송받지 않고 컨트롤러로만 테스트함)
#️⃣ Jasper의 작업물 찾아보기
✔ jasper가 만든 객체==내장객체 == built in object
👉 jasper에게 일을 시킨다는것 == 문서를 만드는 서블릿은 직접 만들 필요가없다는 것. (jsp자체가 서블릿은 아니지만 컴파일되면서 서블릿이 되는 것!)
Q. jsp파일에 html코드와 자바코드를 혼용해서 쓰고싶다면?
A. <%코드블럭%>을 사용해서 jasper가 자바 코드로 인식하도록 만든다.
#️⃣JSP의 코드블록
- 일반 코드블록
- 값을 출력하는 코드블록
- 멤버에 포함하는 코드블록
- 페이지 지시자
👉 변수를 출력하기 위해서는 <%out.print(y)%>를 써야 하는데, 변수를 자주 출력하기엔 불편함 ▶ out.print를 인식하는 equal(=)를 사용한다
//index.jsp
<%int size = 4;%> <!--자바코드를 인식하는 코드블럭-->
<body>
<%=size%> <!--변수의 값을 출력하는 코드블럭-->
<h2>객관식 - 인사말을 몇번 듣고 싶으세요</h2>
<a href="/index?s=1&t=1">1번</a>
<a href="/index?s=10&t=1">10번</a>
<a href="/index?s=20&t=2">20번</a>
지시자를 인식하지 못할경우, setContentType에 의해 텍스트임은 인지하지만 인코딩이 객체보다 늦게 세팅되므로 설정이 무의미하다. 이 response.setCharacterEncoding & response.setContent문장을 객체보다 더 상위로 올릴 방법이 없으므로 설정할 때 지시용 코드블록을 사용한다