본문 바로가기

Servlet&JSP

(24)
026 - Application 객체와 그것을 사용한 상태 값 저장 Application 저장소 : 서블릿 컨텍스트(Context) 지난 번 작성한 코드를 이용. html에서는 입력받는 칸을 하나만 사용하니 value라는 의미로 이름이 v인 입력창을 생성. java에서는 ServletContext를 코드 시작하자마자 만들 수 있도록 해주고, 입력으로 '='이 아닌 다른 operation이 들어온다면 들어온 값들(v, op)을 서블릿 컨텍스트에 저장, 입력으로 '='이 들어온다면 이전에 저장된 값들과 새로 들어온 값들을 이용하여 계산 후 출력하는 코드를 생성. 문제점 +나 - 버튼을 눌렀을 때 화면이 하얗게 변해서 계속 실행하기 위해선 뒤로 가기로 이동해야 함. 다음 시간에 쿠키와 세션을 이용할 예정.
025 - 상태 유지를 필요로 하는 경우와 구현의 어려움 사용자로부터 두 개의 값을 한번에 입력 받는 형식 calc?x=2&y=15 사용자로부터 두 개의 값을 하나씩 개별적으로 입력 받는 형식 calc?x= calc?x=15 calc?x=2 상태 유지를 위한 5가지 방법 application session cookie ============= (오늘은 위의 세가지만) hidden input querystring
024 - 입력 데이터 배열로 받기 023에서 이어짐 입력값이 2개라 name을 각각 x, y로 했었는데 만약 입력할 값이 그 이상이라면 새로운 name을 계속 추가해줘야 할까? => NO! 같은 name을 여러개 써도 OK -> 이 경우 배열이 됨.
023 - 여러 개의 Submit 버튼 사용하기 덧셈 버튼을 누르면 덧셈이, 뺄셈 버튼을 누르면 뺄셈이 되어야 함. 021~022강에서 만든 파일의 변형. F12 -> Network -> calc -> Form Data 을 보면 기존 파일을 실행했을 때, x와 y값만 존재했음. calc.html과 Calc.java 파일을 만들고 calc.html 의 input 태그에 name을 추가함. -> 버튼을 눌렀을 때 누른 버튼의 value가 쿼리스트링으로 전달됨. -> 전달된 value값으로 덧셈을 할 지, 뺄셈을 할 지 정한다.
021~022 - 학습과제(사용자 입력을 통한 계산 요청) 추후에 다시 해보기
020 - 서블릿 필터 수문장같은 역할. (인증과 권한 같은 걸 할 때 사용 가능) 모든 서블릿이 갖고 있는 기본적인 설정을 여기서 한 번만 설정하면 어차피 거쳐가기에 여기(서블릿 필터)서 설정한 것이 다 (서블릿에) 영향을 줄 수 있음. 서블릿보다 먼저 실행되기도 하지만, 실행된 결과를 반환하는 과정에서도 실행될 수 있음. 코드를 입력한 후 실행하면 localhost:8080/notice-reg 창에선 아무것도 뜨는 게 없고, 해당 사이트를 새로고침하면 프로그램 콘솔창에서 "hello filter" 가 뜨는 걸 볼 수 있음. 왜 필터는 출력이 되는데 NoticeReg는 실행되지 않는 걸까. 필터가 실행된 후 이 요청을 서블릿 실행하는 쪽으로 전이를 할까말까는 FilterChain 에서 결정. chain.doFilter(req..
019 - 한글 입력 문제 한글이 전달되는 것을 서버에서 받지 못하는 문제 1. 서버쪽에서 문서를 만들면서 한글이 깨진 것인지 2. 전달한 내용에서 한글이 깨져서 전달된 것인지 1은 지난번에 해결했으니 아마 문제가 발생한 것은 2의 경우라 판단. 멀티 바이트 문자 전송문제 : 사용자로부터 값 입력 받아서 전송하기 UTF-8은 기본적으로 멀티 바이트 문자. 영문자는 문자 1개당 1바이트. 한글은 문자 1개당 2바이트. 톰캣은 Encoding된 문자를 UTF-8로 인식하는 것이 아닌, ISO-8859-1의 인코딩 방식으로 인식함. 즉, 읽어들이는 과정에서 UTF-8로 읽으라고 요청을 해야 함. 방법1 서버 설정에 손댈 수 없는 경우 Servlet => request.setCharacterEncoding("UTF-8"); //입력도구에..
018 - 입력할 내용이 많은 경우는 POST 요청 요청과 제출, 두 단계로 나누어서 일을 처리하려고 할 때의 두 가지 요청 문제점1 URL 길이에 제한이 있기에, 작성한 내용을 전부 URL에 붙인다는 것은 문제임. 문제점2 장문의 내용을 쿼리스트링으로 보내는 것은 바람직하지 않음. 해결 방법 method="post"