day02
MyServlet.java
package com.codingbox.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") // hello라는 페이지 요청 했을때 HttpServlet에서 처리
public class MyServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, // service 컨트롤+스페이스 하면 나옴
HttpServletResponse arg1) throws ServletException, IOException {
arg1.setCharacterEncoding("UTF-8"); // 한글번역 안쓰면 깨짐
arg1.setContentType("text/html; charset=UTF-8");
PrintWriter out = arg1.getWriter();
for(int i=0; i<100; i++) { // 100번까지 : 안녕 servlet<br> 출력
out.println((i + 1) + " : 안녕 servlet<br>");
}
}
}
결과값
1~100 까지 안녕 servlet 출력됨
MyServlet2.java
package com.codingbox.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("/cnt") // hello라는 페이지 요청 했을때 HttpServlet에서 처리
public class MyServlet2 extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, // service 컨트롤+스페이스 하면 나옴
HttpServletResponse arg1) throws ServletException, IOException {
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html; charset=UTF-8");
int count = 100;
String paramCnt = arg0.getParameter("count");
if (paramCnt != null && !paramCnt.equals("")) {
count = Integer.parseInt(paramCnt);
}
// int count = Integer.parseInt(arg0.getParameter("count"));
// System.out.println(count);
PrintWriter out = arg1.getWriter();
for(int i=0; i<count; i++) { // 100번까지 : 안녕 servlet<br> 출력
out.println((i + 1) + " : 안녕 servlet<br>");
}
}
}
결과값
1~100 안녕 servlet 출력
1~10 안녕 servlet 출력
Myservlet3.java
package com.codingbox.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("/usercount")
public class MyServlet3 extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0,
HttpServletResponse arg1) throws ServletException, IOException {
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html; charset=UTF-8");
String paramCnt = arg0.getParameter("cnt");
int cnt = 10;
if(paramCnt != null && !paramCnt.equals("")) {
cnt = Integer.parseInt(paramCnt);
}
PrintWriter out = arg1.getWriter();
for(int i=0; i<cnt; i++) { // hello.html 에서 칸 입력만큼 안녕하세요 출력
out.println((i + 1) + " 안녕하세요<br>");
}
}
}
hello.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- get 방식 : ..../url?parm1=value -->
<form action="usercount"> // /usercount?count=???
<div>
<label>"안녕하세요"를 몇번 듣고 싶으세요?</label>
</div>
<div>
<input type="text" name="cnt"> // cnt에 숫자를 넣으면 숫자 넣은만큼 안녕하세요 출력
<input type="submit" value="출력">
</div>
</form>
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
환영합니다!. <br>
<a href="cnt">인사하기</a>
<a href="cnt?count=3">인사하기 3번하기</a>
</body>
</html>
결과값
첫 스타트
5 입력
- 서블릿에 데이터를 전송할 때 데이터가 URL 뒤에
name=value 형태로 전송- 보안에 취약
- 전송 가능 데이터 최대 255자
- 기본 전송 방식으로 사용이 쉬움
- 웹 브라우저에서 직접 입력하여 전송 가능
- 여러 개의 데이터를 전송할 때 '&'로 구분해서
전송
- 서블릿에 데이터를 전송할때 TCP/IP프로토콜
데이터의 HEAD 영역에 숨겨진 채 전송- 보안에 유리
- 전송 데이터 용량 무제한
- 전송 시 서블릿에서 또 다시 가져오는 작업이
필요하므로 GET방식보다 처리 속도가 느림- doPost()
MyServlet4.java
package com.codingbox.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("/regit")
public class Myservlet4 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");
String title = arg0.getParameter("title"); // name = title
String content = arg0.getParameter("content"); // name = content
PrintWriter out = arg1.getWriter();
out.println(title);
out.println(content);
}
}
reg.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="regit" method="post">
<div>
<label>제목 : </label>
<input type="text" name="title"/>
</div>
<div>
<label>내용 : </label>
<textarea name="content"></textarea>
</div>
<div>
<input type="submit" value="출력">
</div>
</form>
</body>
</html>
결과값
아래 CharacterEncodingFilter.java 클래스가 없으면 한글 입력시 깨져서 나온다.
출력값 한글이 안깨지게 하는법
CharacterEncodingFilter.java
package com.condingbox.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;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*") // 전체요청
public class CharacterEncodingFilter implements Filter{
@Override
public void doFilter(ServletRequest arg0,
ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
//System.out.println("hello filter");
// filgerChain으로 다음 작업 진행 여부를 정한다.
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html; charset=UTF-8");
arg2.doFilter(arg0, arg1);
// System.out.println("after filter");
}
}
MyServlet5.java
package com.codingbox.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("/add")
public class MyServlet5 extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0,
HttpServletResponse arg1) throws ServletException, IOException {
int x = Integer.parseInt(arg0.getParameter("x"));
int y = Integer.parseInt(arg0.getParameter("y"));
String op = arg0.getParameter("operator");
int result = 0;
if( op.equals("덧셈")) {
result = x + y;
} else {
result = x - y;
}
arg1.getWriter().println("result is " + result);
}
}
calc.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="add" method="post">
<div>
<label>x : </label>
<input type="text" name="x">
</div>
<div>
<label>y : </label>
<input type="text" name="y">
</div>
<input type="submit" name="operator" value="덧셈">
<input type="submit" name="operator" value="뺄셈">
<div>
결과 : 0
</div>
</form>
</body>
</html>
결과값
덧셈 버튼 클릭시
뺄셈 버튼 클릭시
MyServlet6.java
package com.codingbox.servlet;
import java.io.IOException;
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 MyServlet6 extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
arg0.getParameter(getServletInfo());
String[] numStr = arg0.getParameterValues("num");
int result = 0;
for (int i = 0; i<numStr.length; i++) {
int num = Integer.parseInt(numStr[i]);
result += num;
}
arg1.getWriter().printf("result is %d", result);
}
}
Calc2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc2" method="post">
<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="덧셈">
</form>
</body>
</html>
결과값
1 + 31 + 5 + 15 = 52
더한 값 출력
MyServlet7.java
package com.codingbox.servlet;
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("/calc3")
public class MyServlet7 extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0,
HttpServletResponse arg1) throws ServletException, IOException {
// application 저장소 선언
ServletContext application
= arg0.getServletContext();
String value_ = arg0.getParameter("value");
String op = arg0.getParameter("operator");
PrintWriter out = arg1.getWriter();
int value = 0;
if(!value_.equals("")) {
value = Integer.parseInt(value_);
}
if( op.equals("=") ) {
// 계산
int x = (Integer)application.getAttribute("value");
int y = value;
String operator = (String)application.getAttribute("op");
int result = 0;
if(operator.equals("+")) {
result = x + y;
} else {
result = x - y;
}
out.printf("결과값 : %d", result);
} else {
// application 값 저장
application.setAttribute("value", value);
application.setAttribute("op", op);
}
}
}
calc3.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc3" method="post">
<div>
<label>입력 : </label>
<input type="text" name="value">
</div>
<div>
<input type="submit" name="operator" value="+">
<input type="submit" name="operator" value="-">
<input type="submit" name="operator" value="=">
</div>
</form>
</body>
</html>
결과값
5 입력
application에 저장된 상태이다. 뒤로가기 눌러준다.
15 입력하고 = 버튼 클릭
5 + 15 결과값 출력