웹 서버 <---> WAS <--> (필터) Servlet Container
request.setCharacterEncoding("UTF-8")
package com.newlecture.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@WebFilter("/*") // Annotation
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("before Filter");
request.setCharacterEncoding("UTF-8");
// chain.doFilter() 이전에 실행할 것이 위치하는 부분
chain.doFilter(request, response); // 흐름을 관할하는 함수
// chain.doFilter() 이후에 실행할 것이 위치하는 부분
System.out.println("after Filter");
}
}
<input type="submit" name="operator" value=" 덧셈" />
<input type="submit" name="operator" value=" 뺄셈" />
<input name="num" type="text" />
<input name="num" type="text" />
<input name="num" type="text" />
<input name="num" type="text" />
String[] num_ = request.getParameterValues("num");
Servlet 코드에는 위와 같이 request.getParameterValues()함수를 사용하면 배열로 입력받을 수 있다.
package com.newlecture.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calc2")
public class Calc2 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
ServletContext application = request.getServletContext();
// ServletContext() 변수지정
PrintWriter out = response.getWriter();
String v_ = request.getParameter("v");
String op = request.getParameter("operator");
int v = 0;
if (!v_.equals(""))
v = Integer.parseInt(v_);
// =이 전달되기 전까지는 context에 저장
if (op.equals("=")) {
int x = (Integer) application.getAttribute("value");
int y = v;
String operator = (String) application.getAttribute("op");
int result = 0;
if (operator.equals("+"))
result = x + y;
else
result = x - y;
out.printf("result is %d\n", result);
} else {
/*Context에 저장*/
application.setAttribute("value", v);
application.setAttribute("op", op);
}
}
}
오늘의 함수
- ServletContext application = request.getServletContext();
: ServletContext 객체 생성- application.setAttribute("value", v);
: (key, value) 쌍으로 이뤄져있고 값을 Context에 저장- application.getAttribute("value");
: key에 대한 값을 불러옴
20~26장까지