😵 ~23.11.10

0906 | 사용자입력 - 쿼리스트링 & 키 전달법 / jsp개념 / jsp 코드블록

unikue 2023. 9. 6. 14:35

✅ 클라이언트의 요청시 키 전달하는 방법 익히기

<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()를 사용해서 그대로 붙일 수 있다.

 

 

if로 타입에 따라 선택되는 태그를 나눠줌

👉 컨트롤러에 type을 선언하고 어떤 html태그가 뜰지 조건을 정해주면, 주소창에 쿼리스트링을 어느것을 입력하느냐에 따라서 주관식/객관식 화면을 다르게 출력해볼 수 있다. (*이때는 클라이언트로부터 전송받지 않고 컨트롤러로만 테스트함)

 

 


 

 

#️⃣ Jasper의 작업물 찾아보기

 

하위폴더에서 컴파일된 파일 확인 가능 (jasper의 작업물)
pageContext: 내장객체

 

✔ 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문장을 객체보다 더 상위로 올릴 방법이 없으므로  설정할 때 지시용 코드블록을 사용한다