Servlet
서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바(JAVA)로 작성된 프로그램을 말한다.
하단의 코드는 이클립스 JSP의 서블릿 Class이다.
하나씩 따져보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.koreait.web.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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("/hello")
public class MyServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html charset=UTF-8");
PrintWriter out = arg1.getWriter();
String title = arg0.getParameter("title");
String content = arg0.getParameter("content");
out.println(title);
out.println(content);
}
}
|
cs |
@WebServlet
1
|
@WebServlet("/hello")
|
cs |
WebServlet이라는 어노테이션이다. 어노테이션은 @Override처럼 문법 에러를 체크할 수도 있지만, 실행시 특정 기능을 실행하도록 정보를 제공하게 하는 기능도 있다.
그래서 JAVA는 어노테이션을 활용하여 해당 어노테이션안에 경로를 입력하면 클라이언트에서 해당 경로를 입력할 때 알아서 톰캣서버가 찾아서 알아서 실행해 줄 수있도록 개발되었다.
UTF-8변경
1
2
3
4
|
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html charset=UTF-8");
|
cs |
arg0은 클라이언트의 요청을 받는 값이고 arg1은 클라이언트의 요청에 답하는 값이다.
그래서 요청이 오고 가는 부분에 모두 UTF-8을 설정해주어야한다.
- SetCharacterEncoding: 한글이 나타나게 인코딩
- setContentType: 한글이 깨지지않게 내용의 type을 설정
만약 SetCharacterEncoding만 했다면 단순 ??으로 나왔던 Text가 한글인 "뒘뀃"정도로 나올 수 있다. 한글은 나왔지만 한글이 깨지는 것이다. 이를 밑의 setContentType으로 type을 설정을 해야만 정상적으로 한글 출력이 가능하다.
웹으로 데이터 출력
1
|
PrintWriter out = arg1.getWriter();
|
cs |
자바에서 웹으로 데이터를 출력하기 위해 PrintWriter를 사용한다. 원하는 내용을 출력하기 위한 코드이다. new로 초기화 하지않아도 바로 사용 가능하다.
Servlet Filter
어플리케이션의 HTTP요청 및 응답을 가로채는데 사용되는 개체이다.
예를들어 회원가입을 할 때 회원정보가 틀렸을 경우 백엔드까지 갈 필요없이 필터영역에서 클라이언트에서 회원정보가 틀렸다고 알림정도만 줄 때 사용될 수 있으며 각 상황에 맞추어 여러 방면으로 수행된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.koreait.web.servlet.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html charset=UTF-8");
arg2.doFilter(arg0, arg1);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
|
cs |
(*/)
모든 요청에 대하여 공통적인 처리를 해줄 때는 어노테이션안에 /를 입력해준다. 단, /를 적용하였는데 CSS가 깨지는 경우가 발생할 때가 있는데 이 땐 웹필터에 url을 넣어 조정해준다.
doFilter
doFilter( ) 메소드는 필터링 설정한 서블릿을 실행할 때 마다 호출되는 메소드로서 실제 필터링 기능을 구현하는 메소드이다.
Server를 사용한 예시(계산기)
덧셈 Submit 1개
*Calc.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="add" method="post">
<div>
<lable>x: </lable>
<input type="text" name="x">
</div>
<div>
<lable>y: </lable>
<input type="text" name="y">
</div>
<input type="submit">
</form>
</body>
</html>
|
cs |
*ServletAdd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package com.koreait.web.servlet.filter;
import java.io.IOException;
import java.io.PrintWriter;
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("/add")
public class ServletAdd extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException { String xStr = arg0.getParameter("x");
String yStr = arg0.getParameter("y");
int x = 0, y = 0;
if(xStr != null && !xStr.equals("")) {
x = Integer.parseInt(xStr);
}
if(yStr != null && !yStr.equals("")) {
y = Integer.parseInt(yStr);
}
int result = x+y;
arg1.getWriter().println("result is " + result);
}
}
|
cs |
*덧샘과 뺄샘 Submit 2개
*clac.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc" method="post">
<div>
<lable>x: </lable>
<input type="text" name="x">
</div>
<div>
<lable>y: </lable>
<input type="text" name="y">
</div>
<input type="submit" value ="덧셈" name = "operator">
<input type="submit" value ="뺄샘" name = "operator">
</form>
</body>
</html>
|
cs |
*ServletCalc.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@WebServlet("/clac")
public class ServletCalc extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException { String xStr = arg0.getParameter("x");
String yStr = arg0.getParameter("y");
String op = arg0.getParameter("operator");
int x = 0, y = 0, result = 0;
if( xStr != null && !xStr.equals("")) {
x = Integer.parseInt(xStr);
}
if( yStr != null && !yStr.equals("")) {
y = Integer.parseInt(yStr);
}
if(op.equals("sum")) {
result = x + y;
} else {
result = x - y;
}
arg1.getWriter().println("result is " + result);
}
}
|
cs |
'국비필기노트 > jsp' 카테고리의 다른 글
jsp_MVC패턴 (0) | 2022.06.03 |
---|---|
jsp_jsp태그 (0) | 2022.06.01 |
jsp_attribute scope (0) | 2022.06.01 |
jsp_액션태그, 디렉티브태그,forward,redirect (0) | 2022.06.01 |
Application, Cookie, Session 저장공간 (0) | 2022.05.27 |