티스토리 뷰

기본적으로 다음과 같은 구조의 html이 있다고 생각해보자. 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action=Cal method="post">
<div>
<label>x: </label>
<input type="text" name="x"/>
</div>
<div>
<label>y: </label>
<input type="text" name="y"/>
</div>
<div>
<input type="submit" value="덧셈">
</div>
</form>
</body>
</html>

여기서 봐야할 부분은 action 부분과 

"x" "y"가 name으로 지정 됐다는 점인데.

Servlet 클래스를 활용해서 request(클라이언트로부터 전송받은 내용)은 name으로만 전송받는다

 

즉 *html로부터 Servlet에 데이터를 전송하려면 id가 아닌 name으로 지정해야 된다는것을 기억하자 

기본 뼈대같은 경우에는 두개의 데이터를 전송시키기 위한 입력칸을 두개 만들고 

덧셈버튼을 누르면 연산 결과로 이어지게 만든 틀이라고 보면 될것같다. 

 

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;

/**
 * Servlet implementation class Cal
 */
@WebServlet("/Cal")
public class Cal extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Cal() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String x_=request.getParameter("x");
		String y_=request.getParameter("y");
		int x=0;
		int y=0;
		if(!(x_.equals(null))) {
			x=Integer.parseInt(x_);	
		}
		if(!(y_.equals(null))) {
			y=Integer.parseInt(y_);	
		}
		PrintWriter out = response.getWriter();
		out.print("result"+(x+y));
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */

}

 

 

 이제 본격적으로 코드를 살펴보면서 Servlet이 어떻게 사용되는지 알아보자. 

일단 Servlet은 만들때부터 @WebServlet("/Cal") 이라는 구문이 있는데 

xml파일을 사용할경우에는 이부분도 지정을 해줘야하지만 기본적으로는 이렇게 처음부터 내가 html에서 호출할 서블렛 구조를 만들어준다. 그래서 html에 form의 action부분에 /Cal을 넣게되면 내가만든 Cal이라는 서블렛이 호출된다

그래서 @WebServlet이부분이 우리가 호출할 부분의 이름을 정해준다고 생각하면 될것같다. 이름을 자유롭게 지을 수 있으니 구애받지 않고 자신이 생각하는 기능을 이름에 넣을 것 

그리고 나머지 부분같은 경우에는 자동으로 생성되니 굳이 신경쓸필요없다 

하나 신경써야하는 부분은 

 

이렇게 서블렛을 만들때 내가 필요한 기능만 직접 정해줄 수 있다. 

간단한 연산만 수행하는 서블릿을 만들어서 위의 서블렛에서는 service만 사용했다.

구체적인 기능같은 경우에는 아직 정리하지 못해 궁금하다면 찾아봐야할것같다.

service안에 입력값을 보면 

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

이런 구절이있는데 httpservletRequest 즉 http를 사용하는 클라이언트로부터 데이터를 전송받는 곳이고 

HttpServletResponse는 이와 반대로 클라이언트에게 데이터를 전송해주는 값이라고 생각하면 될 것 같다. 

String x_=request.getParameter("x");
String y_=request.getParameter("y");

*키포인트 requset되는 값들은 자동으로 문자열로 전송받기 때문에 변수를 지정할때 항상 스트링으로 받아줘야한다. 

 request.getParameter(); > 클라이언트로 부터 입력받은 값을 이곳으로 가져온다. "x"는 우리가 html에서 첫번째로 입력받는 값의 이름이다 그래서 x값을 가져오게 되면 우리가 입력한 숫자를 알 수 있다. y도 마찬가지

	if(!(x_.equals(null))) {
			x=Integer.parseInt(x_);	
		}
		if(!(y_.equals(null))) {
			y=Integer.parseInt(y_);	
		}

이 부분에서 if문을 사용하는 이유는 값을 아무것도 입력하지 않았을때 int x=0으로 지정해서 null이 아닌 int의 0을 받기 위한 부분인데 전부 입력을 해준다면 문제가 없기 떄문에, 어렵게 생각하지 말고 

Integer.parseInt(x_);부분만 입력줘도 된다. parseInt를 활용해 입력받은 숫자값을 int값으로 변경해주면 연산이 

문제 없이 된다. (string 타입은 더할경우 문자열의 합으로 1+2= 12가 나오기 때문! 그래서 숫자형으로 바꿔줌)

그래서 밑에서 

	PrintWriter out = response.getWriter();
		out.print("result"+(x+y));
	}

를 추가해주면 더하기가 문제없이 실행된다. 

PrintWriter out이 생소할텐데 일단 뒤에 response.getWriter(); 부분을 보면 알겠지만 클라이언트한테 데이터를 전송하기위해 출력부분을 만들었다고 생각하면 될 것같다. 

그래서 out이라는 변수는 html파일에 데이터를 전송하기위한 변수다 라고만 생각하면 될것같다! 

마지막으로 out.print를 사용해 더한 값을 사이트로 전송했다. 

여기까지 이해했다면 위에 html 파일만 가지고 프로그램을 작성해보는걸 추천한다.

밑에는 실제 실행화면입니다. 

정상적으로 출력이 된다면, 이제 곱하기 뺄셈 등등 여러가지 기능을 추가해보면 좋을 것 같다. 

 

'웹 프로그래밍 > JSP' 카테고리의 다른 글

에러페이지 처리  (0) 2021.03.08
한글 깨짐처리 GET & POST  (0) 2021.03.08
Servlet 팁: name값 배열로 받기  (0) 2021.03.07
Cookie의 이해  (0) 2021.03.06
Servlet의 이해  (0) 2021.03.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함