jsp (2)

기혁·2023년 3월 15일

JSP 학습

목록 보기
2/19

day02

📌 jsp (1)

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 출력됨

📌 jsp (2)

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 출력

📌 jsp (3)

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 입력

📌 jsp (4)

📢 GET방식

  • 서블릿에 데이터를 전송할 때 데이터가 URL 뒤에
    name=value 형태로 전송
  • 보안에 취약
  • 전송 가능 데이터 최대 255자
  • 기본 전송 방식으로 사용이 쉬움
  • 웹 브라우저에서 직접 입력하여 전송 가능
  • 여러 개의 데이터를 전송할 때 '&'로 구분해서
    전송

📢 POST 방식

  • 서블릿에 데이터를 전송할때 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 클래스가 없으면 한글 입력시 깨져서 나온다.

💡 Servlet Filter

출력값 한글이 안깨지게 하는법
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");
	}

}

📌 jsp (5)

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>

결과값

덧셈 버튼 클릭시

뺄셈 버튼 클릭시

📌 jsp (6)

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

더한 값 출력

📌 jsp (7) - 계산기

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 결과값 출력

profile
⭐️내가만든쿠키⭐️

0개의 댓글