Web/Java+Spring

Request, Response

WakaraNai 2021. 5. 6. 15:28
728x90
반응형

요청(클라이언트->서버)과 응답(서버->클라이언트)

  • 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장
    • http 프로토콜의 request 정보를 survlet에 전달하기 위한 목적으로 사용
    • 헤더 정보, 매개변수, 쿠키, URL, 언어 등의 정보를 읽는 메소드를 보유
      • 헤더 정보: header값을 읽어 브라우저 화면에 출력
    • body의 Stream을 읽는 메소드를 보유
  • 웹 브라우저에 응답 보낼 때 사용하는 HttpServletResponse 객체 생성
    • WAS는 어떤 클라이언트가 요청했는지 알고 있고, 해당 클라이언트에게 응답하기 위한 객체를 생성하여 survlet에 전달
    • survlet은 해당 객체를 이용하여 content type, 응답코드, 응답 메세지 등을 전송
  • 생성한 두 객체를 survlet에 전달

 

 

요청 시 들어온....

헤더 정보를 화면에 띄우기

1. firstweb 프로젝트의 example 패키지에 HeaderServlet 클래스를 생성한다. url-mapping은 간단하게 /header로 지정.

2. deGet() 메소드 안의 내용을 다음 코드로 적어둔다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html");
		PrintWriter out = response.getWriter(); // 응답 보낼 통로 설정
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		// 헤더 이름 일기
		Enumeration<String> headerNames = request.getHeaderNames();
		while(headerNames.hasMoreElements()) {
			String headerName = headerNames.nextElement();
			String headerValue = request.getHeader(headerName); // 헤드의 정보를 하나씩 가져옴
			out.println(headerName + " : " + headerValue + " <br> ");
		}		
		
		out.println("</body>");
		out.println("</html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
		// doPost()에 doGet을 적으면 어떤 요청이든 doGet()에 적은 내용이 실행됨
	}

3. Run on Server

host = 

 

 

파라미터를 화면에 띄우기

파라미터: url에서 ? 뒤에 있는 조건문

1. firstweb 프로젝트의 example 패키지에 ParameterServlet 클래스 생성. url-mapping은 간단하게 /param로 지정.

2. deGet() 메소드 안의 내용을 다음 코드로 적어둔다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 응답으로 보내야할 것은 response에 모두 저장해야 함
		// 요청으로 들어온 것은 request에 모두 저장되어 있음
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		String name = request.getParameter("name");
		String age = request.getParameter("age");
		//모든 것이 문자열로 넘어오기에 숫자이더라도 문자열로 저장
		
		out.println("name : " + name + "<br>");
		out.println("age : " +age + "<br>");
		
		out.println("</body>");
		out.println("</html>");
	}

3. Run on Server

 

파라미터들은 반드시 URL로 넘어오는 것으 아니며

HTML form 태그, input 태그도 파라미터로 넘어오게 함.

 

 

 

그 외의 요청 정보 출력 (URL, Path, Remote host 등)

1. firstweb 프로젝트, example 패키지에 InfoServlet 클래스 생성. url-mapping은  /info.

2. deGet() 메소드 안의 내용을 다음 코드로 적어둔다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>info</title></head>");
		out.println("<body>");

		String uri = request.getRequestURI();
		StringBuffer url = request.getRequestURL();
		String contentPath = request.getContextPath();
		String remoteAddr = request.getRemoteAddr();
		
		
		out.println("uri : " + uri + "<br>");
		out.println("url : " + url + "<br>");
		out.println("contentPath : " + contentPath + "<br>");
		out.println("remoteAddr : " + remoteAddr + "<br>");
		
		out.println("</body>");
		out.println("</html>");
	}

3. Run on Server

url은 요청 주소 전체, uri는 호스트 제외한 주소

contentPath로 프로젝트 이름이 출력됨. url-mapping처럼 바꿀 수 있음.

Remote address 클라이언트의 주소(ip)값. 댓글 단 사람들 ip 추적 가능.

0:0: 으로 나온 이유는 로컬 컴퓨터에서 접속했기 때문. IPv6이어서 이렇게 뜸.

원격 컴퓨터로 접속 했다면 크 컴퓨터의 IP가 출력됨.

728x90
반응형

'Web > Java+Spring' 카테고리의 다른 글

Redirect & Forward  (0) 2021.05.10
JSP  (0) 2021.05.08
Servlet의 Life Cycle  (0) 2021.05.05
Servlet  (0) 2021.05.05
JAVA 웹 어플리케이션 (HttpServlet) 컴파일 및 실행  (0) 2021.05.05