요르딩딩
Servlet&JSP 프로그래밍 (15강 ~ 25강) 본문
728x90
반응형
[15. GET요청과 쿼리 스트링]
1. http://localhost/hello?cnt=3 : 쿼리 스트링 (GET) -> 문자열로 넘어간다.
int cnt = Integer.parseInt(request.getParameter("cnt"));
2. 대신 위의 코드의 경우 cnt값이 없으면, 오류가 발생한다.
[16. 기본값 사용하기]
- /hello?cnt=3 ---> "3"
- /hello?cnt= ---> ""
- /hello? ---> null
- /hello ---> null
String temp = request.getParameter("cnt"); int cnt = 0; if (temp != null && !temp.equals("")){ // Null과 빈문자열 모두 체크해줘야한다!!! ... }
1. index.html에 <a href="hi?cnt=3"> 인사하기 </a> 하면 버튼만 클릭하여 쿼리스트링을 보낼 수 도 있다.
[17. 사용자 입력을 통한 GET 요청]
<form action ="hi">
<div>
<label> 안녕하세요. </label>
</div>
<div>
<input type ="text" name ="cnt" />
<input type="submit" value="3"/>
</div>
</form>
# GET : http://localhost:8080/hi?cnt=3 이 호출됨.
[18. 입력할 내용이 많은 경우는 POST 요청]
<form action ="notice-reg">
<div>
<label> 안녕하세요. </label> <input name = "title" type = "text">
</div>
<div>
<label> 내용 </label> <input name = "content" type = "text">
<input type="submit" value="등록"/>
</div>
</form>
# (기본)GET호출 : http://localhost:8080/notice-reg?title=hi&content=abcde > 길이가 제한문제, 보안문제
# POST 호출 : <form action ="notice-reg" method="post">로 변경
- 파라미터가 body로 전달됨.
# 파라미터 사용
request.getParameter("title");
request.getParameter("cotent");
[19. 한글입력 문제]
- 브라우저에서 서버로 한글이 전달되지 못할때
- 영문자는 1바이트, 그외는 2바이트
- UTF-8 (2바이트로 전달) -> URL Encoding -> ISO-8859-1 (1바이트로 인식)이기때문에 오류
그래서 서블릿 코드에 request.setCharacterEncoding("UTF-8"); 작성해줘야함.
그러나 톰캣서버의 값을 잘 바꾸지는 않음.
[20. Servlet Filter]
# 웹서버 > was > (Filter) > servlet Container (서블릿 여러개 존재)
# 서블릿마다 공통된 기능을 넣는것은 비효율. 그렇다고 톰캣의 설정인 server.xml에서 바꾸는것도 무리
# Fillter는 서블릿 컨테이너로 들어갈떄/나올때 둘다 작동 가능
# 필터 추가하기
* (방법 1)
1. Class생성 > interfaces add > Filter 선택 > 완료
2. 자동으로 impolements Filter와 doFilter메소드가 생성됨.
- chain.doFilter(reqeust, response); : 요청이 오면 흐름을 넘기는거
public class CharacterEncofingFilter implements Filter { @Override public void doFilter (ServletReqeust request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("before filter"); request.setCharacterEncoding("UTF-8");// 인코딩 chain.doFilter(request, response); // 흐름넘기기 System.out.println("after filter"); }
3. filter 클래서 설정
- web.xml 설정
<filter> <filter-name>characterEncofingFilter</filter-name> <filter-class>com.newlec.web.filter.CharcterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1. 어노테이션 설정
* (방법 2)
@WebFilter("/*") // 어노테이션으로 설정하기 public class CharacterEncofingFilter implements Filter { @Override public void doFilter (ServletReqeust request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("before filter"); request.setCharacterEncoding("UTF-8");// 인코딩 chain.doFilter(request, response); // 흐름넘기기 System.out.println("after filter"); }
# 톰캣을 가동하면 1번 실행, 그 이후로 요청때마다 실행됨.
[21. 학습과제]
[22. 과제풀이]
[23. 여러개의 submit 버튼 사용하기]
HTML의 input태크에 name값이 있다면 값이 전달된다.
type에 따라 다른데, type="submit"인 경우는 클릭된 것에 한해서만 값이 전달된다.
# 개발자도구 : Form Data
x=2&y=3&operator=%EB%8D%~~~ => 한글일 url인코딩 된것입니다.
... <body> <form action = "calc"> <input type="text" name="x" /> <input type="text" name="y" /> .. <input type="submit" name="operator" value="덧셈"> <input type="submit" name="operator" value="뺄셈"> ...
@WebServlet("/calc") public class Calc extend HttpServlet { protected void service(HttpServletRequest request, ~){ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String x = request.getParameter("x"); String y = request.getParameter("y"); String operator = request.getParameter("operator"); ... } }
[24. 입력 데이터 배열로 보내기]
데이터를 배열로 보내고 싶을때는 태그의 name를 동일한 값으로 넣어주면 된다.
값을 전달받는 컨트롤러는 getParameterValues로 받아야 한다.
# 개발자도구 : Form Data
num=1&num=2&num=3&num=4
... <body> <form action = "add2"> <input type="text" name="num" /> <input type="text" name="num" /> <input type="text" name="num" /> <input type="text" name="num" /> .. <input type="submit" name="operator" value="덧셈"> <input type="submit" name="operator" value="뺄셈"> ...
@WebServlet("/add2") public class Calc extend HttpServlet { protected void service(HttpServletRequest request, ~){ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String[] num = request.getParameterValues("num"); ... } }
[25. 상태를 유지의 필요성]
# 사용자로부터 두 개의 값을 하나씩 개별적으로 입력 받는 방식
# 상태 유지를 위한 5가지 방법 : application, session, cookie, hidden input,.querystring
... <body> <form action = "calc2"> <input type="text" name="v" /> .. <input type="submit" name="operator" value="+"> <input type="submit" name="operator" value="-"> <input type="submit" name="operator" value="="> ...
@WebServlet("/calc2") public class Calc extend HttpServlet { protected void service(HttpServletRequest request, ~){ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); String[] num = request.getParameterValues("num"); ... } }
자세한 내용은 26강에...
728x90
반응형
'[강의] > [서블릿 JSP 강의] (뉴렉처)' 카테고리의 다른 글
Servlet&JSP 프로그래밍 (57강 ~ 67강) (0) | 2024.09.30 |
---|---|
Servlet&JSP 프로그래밍 (46강 ~ 55강) (0) | 2024.09.11 |
Servlet&JSP 프로그래밍 (36강 ~ 45강) (0) | 2024.08.21 |
Servlet&JSP 프로그래밍 (26강 ~ 35강) (0) | 2024.08.09 |
Servlet&JSP 프로그래밍 (04강 ~ 14강) (0) | 2024.06.05 |
Comments