내장객체
REQUEST, RESPONSE 내장되어 있어서 선언 없이도 사용이 가능하다.
파라미터
- client 가 서버로 요청하면서 보낸 문자열
- 예시
로그인시 : 사용자 id, password
글 작성시 : 글 제목, 글 내용
-
조회시 필요한 값들 ( 게시판 구분, 게시판 페이지 번호(페이징 처리 - 페이지 , 페이지사이즈 라는 바인드 변수가 필요))
-
클라이언트가 어떤 웹브라우저(chrome, safari 등등 )로 접속했는지 알려면 그때마다
User-Agent header 를 검색해야 함 → 언제든 변경 가능성 있다.
-
파라미터를 보내는 방법 : http method 에 따라 두가지로 분리
- Get 방식 : 파라미터를 url 에 붙여서 전송
=> 파라미터가 웹브라우저 주소줄에 노출(보안 취약 )
- Post 방식 : http body영역에 기록하여 전송
=> 웹브라우저 주소줄에 노출되지 않음
개발자 도구를 이용하면 보는것이 가능하다.
HTTP프로토콜에서 데이터를 주고받는 방식
HTTP (Request/Response)MESSAGE 라는 정해진 포멧으로 전송한다.
-
Request Line : 요청 메소드(get, post), url(get 방식일 경우 파라미터가 이곳에 표기 ) , http 버전
-
Request Header : 헤더 정보(브라우저, os 정보, locale, content-type... )
-
Request body : 파라미터 기록(Get 방식은 파라미터가 body 에 담기지 않음 )
- form tag 를 이용하여 파라미터와 같이 서버로 요청을 보낼시 주의 사항
- <form> 태그 기술, 전송을 통해 보낼 파라미터들을 form 태그 하위의 input 태그를 기술
(name 속성이 반드시 존재 해야함)
name 속성이 파라미터 이름이 된다.
value 속성이 해당 파라미터의 값이 된다.
- form 태그의 action 속성을 지정해야 한다.
(action : 요청 보낼 서버의 자원(서블릿, jsp))
- form 태그의 method 속성
전송할 HTTP method 방식
form 태그를 이용하여 전송시 GET, POST 두가지 방식만 가능
명시하지 않을 경우 기본 값인 GET 메소드가 적용된다.
Tip. Jquery 에서 제공하는 serialize() 함수를 통해 전송될 파라미터를 미리 알 수가 있다.
loginController 생성(kr.or.ddit.login.web.LoginController.java)
jsp 로 엑셀파일 만들기.
- jsp 포 엑셀 파일만들어내는 형태(xls 포멧만 가능, xlsx 는 안됨)
- 라이브러리 활용 * apache -poi 라이브러리 : 엑셀파일을 조회, 생성 ) ⇒ 손이 많이 가는 형태 → 나중에 할것.
-엑셀에 대한 content 타입 설정 :
jsp 파일을 생성하고 : header 부분 설정 :
<%@ page language="java" contentType="application/vnd.ms-excel; charset=UTF-8" pageEncoding="UTF-8"%>
-요청과 응답 주체 비교
요청접수 요청 생성 : 비고
servlet : response.sendRedirect
servlet jsp : Model2 request.getRequestDispatcher().forward()
jsp : Model 1
-우리 프로젝트때 : model 2
model2 로 실행하면
jsp 를 바로 실행되면 오류 : servlet 에서 데이터요청을 받지 않은채로 jsp 로 넘어가면 오류 → servlet 으로 경로를 설정해주어야 한다. servlet → jsp
request dispatch / redirect : →
client 클라이언트 최초 요청 —> UserListServlet → Request Dispatch 서버내에서 요청 위임 → userList.jsp
—> 다시 클라이언트 입장에서는 최초 요청에 대한 응답
다시 f5 를 누르면 UserListServlet 으로감 ( 비록 데이터보여준건 userList.jsp 였지만 )
Request Dispatch redirect
요청이 두번간다
클라이언트 —-→ 클라이언트 최초 요청
클라이언트 ←—- redirect 클라이언트에게 다른주소로 재 요청 하라고 응답
클라이언트 -—> 정보를 바탕으로 재요청
←—- redirect 된 리소스에서 응답생성
redirect
요청한 리소스의 주소가 변경 되었음을 클라이언트에게 알려줌
서버의 상태가 변경됨
** redirect : 요청한 리소스가 다른 주소로 이동했으니까 이동된 주소로 다시 요청을 해라
F5 눌렀을때 중복 요청으로 인해 발생하는 문제를 막기 위해 사용
예시 : 게시글 작성
: 게시글을 작성 → 게시글작성하고 리스트로 감
만약 f5 를 누르면 → 다시 게시글이 작성됨...? 문제.
그래서 redirect 사용해서 → redirect 클라이언트에게 다른 주소로 재요청하라고 응답 하는 부분이 생성. → 다시 게시글이 작성되지 않도록 함
서버변경 or 데이터에 변환되는 작업 → 보통 redirect 로 생성
HttpServletResponse
서버가 클라이언트로 보내는 응답에 포함되는 정보를 캡슐화(은닉화) 하여 보관하는 객체
client 에게 요청 처리를 전달하는 객체
참고
**서버가 기동이 된 상태에서 새로운 서블릿을 생성 할 경우 해당 서블릿을 인식을 하지 못함 -> 재기동을 반드시 해야한다.
서버 기동시 로딩된 서블릿의 경우 수정을 하면 서버가 수정 내역을 리로드 하면서 바로 반영됨 => 재기동 필요없음
web.xml 혹은 server 설정정보를 수정한 경우 수정 내역을 반영하기 위해 ==> 재기동이 반드시 필요함
request 객체에서 제공하는 파라미터 관련 메소드
-
getParameter(String parameterName) : 파라미터이름에 해당하는 파라미터 값을 조회
단, 파라미터 값이 여러개가 존재할 경우 가장 첫번째 값을 반환
-
String[] getParameterValues(String parameterName) : 파라미터이름에 해당하는 모든 파라미터 값을 문자열 배열로 반환
-
Enumeration<String> getParameterNames() : 해당 요청에 포함되어 있는 파라미터 이름을 조회
-
Map<String , String[]> getParameterMap() : 요청 파라미터가 담긴 앱을 반환
request 객체를 통해 parameter를 받는 방법
-
하나의 파라미터로 여러개의 값이 전송 될 수 있음
-
java servlet 표준 스펙에서는 파라미터를 맵객체를 통해 관리
Map<String, String[]>
파라미터 이름이 map의 key가 되고 파라미터의 값들이 map 의 value 가 된다.
- request 객체를 통해 파라미터를 조회할 수는 있지만,
신규로 추가하거나 변경 할 는 없다. => wrapper 클래스를 이용하여 비슷한 효과를 만들어 낼 수 는 있음
댓글
댓글 쓰기