본문 바로가기

웹 구축/Jsp & Servlet

Servlet 3

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action= "Ex02"  >

<input type="color" name = "color">
<input type = "submit">

</form>
</body>
</html>
package com.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("/Ex02")
public class Ex02 extends HttpServlet {


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String color = request.getParameter("color");
		System.out.println(color);
		response.setContentType("text/html; charset=euc-kr");
		PrintWriter out = response.getWriter();
		
		out.print("<html>");
		out.print("<head>");
		
		out.print("<style>");
		out.print("body{ background-color:"+color+";}");
		out.print("</style>");
		out.print("</head>");
		out.print("<body>");
		out.print("</body>");
		out.print("</html>");
	}

}

 

받은 color 속성에 따라서 보여줄 페이지의 배경색상을 적용하는 코드이다.

속성 color 는 사용자가 선택한 색상의 컬러코드를 출력한다.

Style 태그에 body태그를 입력받은 값 color로 출력하여 사용하였다.

 

 

 

 

 

 

 

 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>

<style>
input{
width : 50px;
}

</style>
</head>
<body>
<form action="Ex03"> 
	구구단을 외자 <input type="text" name="num2">단<input type="text" name="num1"> 어디까지?
	<input type="submit" value="SEND">
</form>

</body>
</html>
package com.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("/Ex03")
public class Ex03 extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		response.setContentType("text/html; charset=euc-kr");
		PrintWriter out = response.getWriter();
		
		out.print("<html>");
		out.print("<head>");
		out.print("<style>");
		out.print("p{ font-weight : bold; font-size: 35px; color: red;}");
		out.print("</style>");
		out.print("</head>");
		
		out.print("<body>");
		out.print("<table border = '1'>");
		
		for(int i=1; i<=num1; i++) {
		out.print("<tr>");
		for (int j =1; j<=num2; j++) {
		out.print("<td>"+j+"x"+i+"="+j*i+"</td>");}
		out.print("</tr>");
		}
		out.print("</table>");
		out.print("<p>생성완료");
		out.print("</body>");
		out.print("</html>");
	}

}

구구단 코드이다.

사용자에게 원하는 값 2개를 입력받아 그것을

서블릿에서 표시할 열과 행 ( 단수와 곱할 수 ) 로 받아

사용자에게 보여준다.

 

 

 

 

이런 getparameter를 이용한 Get 방식(Query String) 의 경우 값을 넘겨주기 때문에 URL에 입력값이 드러나게 된다.

따라서 로그인 같은 방법에는 보안이 매우 취약하다고 할 수 있다.

따라서 우리는 Post  방식을 사용할 수 있다.

 

 

GET - URL로 데이터 전송, 전송하는 데이터의 길이에 한계(1024Byte), 보안상 문제가 있음.

POST 방식보다 상대적으로 속도가 빠르다.

 

 

POST - Packet(패킷)의 Body 부분에 담아서 전송 (패킷교환), 전송하는 데이터의 길이에 제한이 없으며 보안에 강함.

GET 방식보다 상대적으로 속도가 느리다, 객체도 전송 가능함.

 

 

다음과 같이 메서드를 post를 지정하게 되면 get이 아닌 post방식으로 보내진다.

 

이를 확인할 수 있다.

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="Ex06" method="post" >

이름: <input type=text name="name"><br>
<input type="submit" value="보내기">

</form>
</body>
</html>
package com.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;

/**
 * Servlet implementation class Ex06
 */
@WebServlet("/Ex06")
public class Ex06 extends HttpServlet {


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		String name = request.getParameter("name");
		System.out.println("get"+name);
			
		
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//post 방식에서 euc-kr 로 인코딩을 명시하기 위해 request. 하여줌
		request.setCharacterEncoding("euc-kr");
		
		String name = request.getParameter("name");
		System.out.println("post"+name);
		
		//doGet(request, response);
	}

}

 

doget, dopost는 post혹은 get방식으로 받은 값은 인지하여 응답하는 방식이다.

이 경우 get으로 값을 보낼경우 doGet 메서드가 작동하며, post로 값을 보낼 경우 doPost 메서드가 작동한다.

post 방식에서 인코딩이 무너질수도 있는데

request의 setCharacterEncoding 메서드를 통해서 원하는 인코딩 형식을 설정 할 수 있다.

 

 

 

그리고 Servers - Tomcat - server.xml 에서

커넥터 문장에 URIEncoding = "EUC-KR" 혹은 "UTF-8" 등 자신의 인코딩 타입에 맞게 추가하여 준다.

 

 

 

 

 

'웹 구축 > Jsp & Servlet' 카테고리의 다른 글

JSP 3 쿠키, 세션  (0) 2021.01.28
JSP 2 - 지시자.  (0) 2021.01.28
JSP 1  (0) 2021.01.27
Servlet 2  (0) 2021.01.26
Servlet  (0) 2021.01.26