뉴렉처 JSP [10 ~ 20]

김상복·2022년 4월 3일
0

뉴렉처JSP

목록 보기
1/5

10강(web.xml servlet / mappingg 입력)

web.xml의 셋팅으로 1번과 2번의 셋팅 값에 따라서 바뀐다

[servlet]
servlet-name : 말그대대로 servlet-class에 임의의 이름을 붙여준다
servlet-class : 해당 패키지의 클래스에 servlet-name의 임의의 이름을 붙여준다

[servlet-mapping]
servlet-name : 위의 servlet의 임의의 이름을 입력 받아 해당 데이터를 가져온다
url-pattnern : /hello로 끝나는 url요청에 해당 클래스를 출력시킨다

12강(@WebServlet 사용법)

@WebServlet("url mapping 값") 을 입력 하게 된다, 해당 url로 데이터를 response한다

단, 위의 @WebServlet 방식을 쓰기 위해서는 web.xml에서의 옵션을 변경이 필요하다

metadata-complete="true / false" 라는 설정이 있는데

true : 다른 metadata(어노테이션 등)이 없으므로 xml.web의 셋팅값만 참조하라 라는 의미
false : 다른 metadata가 있으므로 어노테이션을 찾아서 참조하라 라는 의미

로 사용 된다

13강(Servlet 출력 형식의 이해)

코드
PrintWriter out = resp.getWriter();
for(int i = 0; i < 100; i++)
{
out.println((i+1) +"번 Hello World!!@@");
}

평범한 WebPage

chrome

변경 코드
PrintWriter out = resp.getWriter();
for(int i = 0; i < 100; i++)
{
out.println((i+1) +"번 Hello World!!@@ <br
>");
}

평번한 WebPage

chrome

위와 같이 브라우저에 따라 코드를 이해하는 방식이 다르다는 점을 참고하자
정상적인 구동은 평범한 WebPage로써 html 코드인 br태그가 잘 적용이 되는 것이 정상적인 코드이다

14. 한글 인코딩 방법

원래 웹 브라우저로 데이터를 전송할 때 1 byte로 전송하지만
한글의 경우 2 byte로 전송을 해야만 인식이 된다

위의 13번 강의 사진에 보면 [1번]이 [1?]로 출력된 것을 볼 수 있다

해결 하기 위해서는 해당 코드에

response.setCharacterEncoding("인코딩 설정");
코드로 변경이 가능하다

하지만 이렇게 인코딩을 변경해 줘도 사용자의 브라우저에서 어떠한 인코딩으로 읽을지를 정해주지 않으면 결국 인코딩이 깨진 상태로 볼 가능성이 있다

response.setContentType("text/html; charset=UTF-8");
코드로 해당 UTF-8로 읽으라고 알려주는 코드 이다.

[요약]
response.setCharacterEncoding으로 인코딩을 변환시키고
response.setContentType으로 해당 인코딩으로 변환 됬다는 사실을 사용자에게 알린다

15. Get 요청과 파라미터(쿼리스트링).1

Get요청은 말 그대로 홈페이지에서 해당 url에 맞는 페이지를 요청하는 것 이다

http://localhost/hello → /hello 라는 url에 맞는 페이지를 요청함
http://localhost/hello?cnt=3
위의 url에서 ? cnt = 3 이라는 문구가 추가 되었는데
? = 파라미터 시작 표시
cnt = 변수 이름
의 의미로 cnt에 3이라는 값이 있는 페이지를 불러온다는 의미이다

[사용법]

int cnt = Integer.parseInt(request.getParameter("cnt")) → cnt = 3 이 입력된다

[주의점] = Java 코드에서 받아 올 변수명과 url에서 보내주는 변수명이 동일 해야 한다

16. Get 요청과 파라미터(쿼리스트링).2

위의 코드는 오류가 발생 할 수 있다

[오류란??] : cnt 값이 Null이거나 String일 경우 ""(빈 공간)이 아니여야한다 즉, 어떠한 데이터가 담겨져있어야한다는 의미이다

[해결법]

	int cnt = 1; // 기본값 설정
	String temp = request.getParameter("cnt");
    if(temp != null && !temp.equals(""))
	cnt = Integer.parseInt(temp);
	
	for(int i = 0; i < cnt; i++)
	{
	out.println((i+1) +"번 Hello World!!@@ <br>");
	}

temp != null : cnt가 Null이 아닐 때
!temp.equals("") : cnt가 ""(빈 공간)이 아닐 때
cnt에서 받아온 파라미터 temp를 다시 cnt로 넣어준다
즉, 한 번 확인 작업을 거쳐서 변수를 입력해준다는 의미이다

18. POST 요청.1

Get과 Post
간단하게 이야기하자면
GET : 요청하는 것, 가져오는 것
POST : 보내는 것

위 사진의 빨간 박스, form의 method의 기능을 사용하면 post 기능이 사용가능하다

코드 : form action = "notice-reg"

코드 : form action = "notice-reg" method="post"

보다 시피 method ="post" 를 사용하면 값은 전달이 되지만 파라미터(쿼드스트링)에는 값이 들어가지 않는다. 정보 보안이 가능해지기에 회원가입 등의 정보를 보안해야되면 반드시 post 방식을 사용해야만 한다

19. POST 요청.2(Post방식 한글 깨짐)

톰캣으로 Post를 보내게 되면 웹 서버에서는 ISO-8859-1 의 방식으로 읽어서 1 Byte씩 읽게 되기에
2 Byte로 읽어야 정확하게 읽어지는 한글이 깨지게 된다.
그렇기에 UTF-8 방식으로 인코딩을 받을 필요가 있고
request.setCharacterEncoding("UTF-8")의 설정이 필요하다

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
둘의 차이점
request는 웹 서버에서 post로 받은 파일을 java 파일에서 사용할 때 인코딩
response는 웹 서버로 java파일에서 데이터를 보낼 때 사용하는 인코딩

20. Servlet Filter

수 많은 Servlet의 인코딩을 한 꺼번에 하는 필터

웹서버 ↔ WAS ↔(request, response) →(filter) Servlet

[코드]

위와 같이 Filter 인터페이스를 상속 받으면 doFilter라는 메소드를 오버라이딩 해와야한다.
doFilter의 매개변수인 FilterChain을 사용하여, doFilter 메소드를 불러오고 매개변수에는 request, response를 입력해준다.
해당 메소드 위는 WEB에서 받아오기전(request), 뒤에 적으면 후(response) 의 역활을 하고 우리는 해당 페이지에서 받아와야하기에 앞에 적어 인코딩을 진행한다

[적용 방법]

첫 번째 방법 : web.xml 적용 / url-pattern의 [/*]은 모든 페이지에 적용한다는 의미, 는 전체

두 번째 방법 : 어노테이션 사용(Filter 클래스를 상속 받은 클래스에 적용시킨다)
**

profile
초보 개발자

0개의 댓글