본문 바로가기

develop/JSP

내장 객체 - request,response,out

jsp에서 주석은 <% %>

<%= 간단하게 하나만 출력할 떄%>

 

 

1. 사용자가 웹브라우저 주소 입력 => 서버 동작 원리 이해

사용자, 클라이언트, 유저 웹브라우저 주소 입력 => 서버에 test.html 보고싶다고 요청

 

앞잡이 http가 신호를 들고 localhost : 8080 도착

서버 test.html 찾아서 사용자 응답 http가 응답 정보를 들고 사용자에게 도착

 

 

 

 

사용자 => 웹서버(아파치) => 웹애플리케이션서버(WAS, 톰캣, 웹컨테이너, 컨테이너)

사용자,클라이언트,유저가 웹브라우저 주소를 입력한다. => 서버에다가 a.jsp가 보고싶다고 요청 

앞잡이 http가 신호를 들고 서버 localhost : 8080 도착

 

서버 a2.jsp 찾아서 사용자에게 갖다주려고 보니  브라우저가 바로 실행할 수 없는 파일인 것을 알게됨.

그래서 브라우저가 바로 실행할 수 있는 파일로 변경하는 웹애플리케이션(톰캣)의 도움을 받는다. 

 

 

 

--------------------------------

 

 

request

사용자가 request.jsp를 보고 싶다고 요청하면 http가 사용자 정보, 서버 정보, 태그(파라미터)정보, 세션 정보,

쿠키 정보를 들고 서버로 간다. 

서버에 요청 정보를 저장할 request 내장객체가 생성되면서 http가 들고갈 정보를 저장한다!

모든 정보는 request 안에 있다.

 

 

 

1) http가 들고온 요청 정보를 request내장객체에 저장한다. 그리고 손쉽게 확인할 수 있도록

변수에 저장한다 (아래 코드처럼)

 

ex) 아이디, 좋아하는 숫자를 입력해 전송한 값

  요청정보를 저장, response 내장객체생성 응답정보(처리결과)를 저장 (request, response는  jsp의 내장객체다.)

 

 

String sid = request.getParameter("id");
String snum = request.getParameter("num");

 

 

\request.getParameter

그리고 화면에는 <%=sid%> 코드를 통해 어떤 값이 전달되었는지 확인할 수 있다. 

 

 

2) http의 전송방식이 post인 경우 requeset에서 값을 가져오기 전에 한글 처리해준다.

 

request.setCharacterEncoding("utf-8");

 

 

3) 취미 항목의 경우 여러개를 선택해야 하는 checkbox다.

이럴 때는 

String[] hobby = request.getParameterValues("hobby");

requeset.gerParameterValues를 사용한다!

그리고 String 이 아니라 배열 스트링형이기 때문에 String[]로 해줘야 오류가 발생하지 않는다. 

 

 

 

 

-문자열을 정수형으로 변경

나이를 입력했는데 문자열이라 사칙연산이 안될 때 정수형으로 바꿔줘야한다.

 

int a = Integer.parseInt(age)

나이 + 100 : <%=age+100%>

 

 

-변수는 사용하기 전에 선언 한 후에 사용!

 

<%
String s = msg + "안녕";
out.println(s);
%>

 

 

URL 주소 정보 : <%=request.getRequestURL() %><br>

URI 주소 정보 : <%=request.getRequestURI() %><br>

서버 이름 : <%=request.getServerName() %><br>

서버 포트 : <%=request.getServerPort() %><br>

프로토콜 : <%=request.getProtocol() %><br>

전송방식 : <%=request.getMethod() %><br>

프로젝트 경로 : <%=request.getContextPath() %><br>

사용자 IP 주소 : <%=request.getRemoteAddr() %><br>

물리적인 경로 : <%=request.getRealPath("/") %><br>

세션 정보 : <%=request.getSession() %><br>

쿠키 정보 : <%=request.getCookies() %><br>

http헤더정보(타입정보) : <%=request.getHeader("accept") %><br>

http헤더정보(한글정보) : <%=request.getHeader("accept-language") %><br>

http헤더정보(브라우저 한글정보) : <%=request.getHeader("user-agent") %><br>

http헤더정보(연결정보) : <%=request.getHeader("connection") %><br>

 

 

 

 

response

 

사용자가 원하는 정보를 서버에 요청한다. 그럼 요청을 WAS 서버가

request 내장객체를 생성해서 요청정보를 저장한다.

response 내장객체 생성 : 서블릿 처리결과와 응답정보 저장

response 내장객체 : 서버에서 클라이언트에게 설정값을 변경하라고 명령하는 정보가 담김.

 

 

http에 있는 header값을 변경시키고자 할 때

response.setHeader("헤드이름","변경할값");

 

서버에서 클라이언트에게 보낼 때 내용 타입을 변경해서 보내게끔 할 때

response.setContentType("text/html; charset=UTF-8");

 

서버에서 쿠키를 만들어서 사용자 컴퓨터에 저장

response.addCookie("쿠키값");

 

서버에서 응답을 보내면서 for.jsp 바로 이동해라

response,sendRedirect("for.jsp");

 

 

 

 

사용자가 form에 정보를 입력하고 결과를 보고싶다고 요청한다. 그럼 http가 value값을 주섬주섬 들고 웹서버에 간다

웹서버 파일 찾아서 처리가 필요하고 WAS처리를 함.

http가 들고온 요청정보를 request 내장객체 생성하고 저장한다. 

그리고 그 처리결과를 저장할 response 내장객체를 생성하고 처리 담당자가 서블릿 스레드 생성처리 작업한다 (?) 하 어렵

 

 

 

 

 

예제)

 

 

이름, 성별, 취미 값을 보내는 폼 생성.

 

<%
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String[] hobby = request.getParameterValues("hobby") 
// 여러개를 선택하는 체크박스일 경우 Values를 덧붙혀줌. 

%>

이름 <%=name%>
성별 <%=gender%>
취미 <%=hobby%>
//취미를 선택한 갯수를 나타내려면 <%=hobby.length%>

<%
if(hobby != null){
	for(int i =0;i<hobby.length;i++){
    %><%=hobby[i]%><%
    }
  }  %>

 

 

 

out

 

출력 정보를 저장하는 내장객체

 

출력정보를 기억하는 기억장소 크기 : <%=out.getBufferSize() %>
사용하고 남은 기억장소 크기 : <%=out.getRemaining() %>

<%
출력 종료 : out.println();
종료 후 동작하지 않음 : out.close();
%>