White Whale Studio

JSP & Servlet [2] Servlet의 기초 [2011.11.14] 본문

IT Engineering/JSP & Servlet

JSP & Servlet [2] Servlet의 기초 [2011.11.14]

glorymind 2011. 11. 14. 12:41
반응형

우선적으로 JSP 뿐만 아니라 Servlet 또한 이클립스를 이용하여 강의를 해둔 자료가 없기 때문에
단순히 경험에 의거하여 포스팅을 한다..
[망헐 GAE  -ㅅ-]

서블릿이란? (What is Servlet?) : 자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술

서블릿 클래스를 작성하는데에 있어서 3가지의 기본적인 조건이 있다.
첫째, 서블릿 클래스는 javax.servlet 패키지에 속하는 Servlet 인터페이스를 구현하도록 만들어야 한다.
둘째, doGet이나 doPost라는 메서드를 선언하고 그 안에 서블릿 클래스가 호출되었을 떄 해야할 일을 코딩한다.
셋째, 동적 HTML문서를 생성하기 위해서는 doGet, doPost 메서드의 두 번째 파라미터를 이용해야 한다.

세부적인 내용은 포스팅을 진행하면서 자세히 살펴보도록 하자.

이클립스에서는 다행히도 메모장에서의 수고를 덜어주기 위해서 단순히 생성만 하면 3가지 조건을 만족하는데에 도움을 주기위해 자동적으로 코드를 넣어준다.
이 얼마나 편리한가!?[가끔 나오는 에러는 빡치지만..]

아무튼...

먼저 지난 포스팅때 사용하였던 코드를 그대로 사용하여 진행해보았다.

생성된 프로젝트에 Servlet 파일을 추가한다. 확장자명은 .java로 되어있다.


 


testservlet이라는 이름으로 생성을 했는데..

 

화면에서 처럼 web - servlet을 선택해서 이름을 입력하고 진행하면 생성된다.

 


doGet 문안의 코드는 본인이 타이핑 한 내용이고 java 파일이 생성이 되면 자동적으로 상속문, import문, doGet, doPost가 포함된 기본틀이 준비되어 나온다.

doGet 문안에 적당히 코딩을 하고 실행을 시킨다. 실행방법은 좌측의 Project Explorer에서 코딩한 자바파일을 선택하고 지난 포스팅 때와 동일하게 실행하면 된다.

지난 포스팅때의 jsp파일을  선택하고 실행하면 jsp파일의 HTML문이 실행되고, java 파일을 선택해야 방금 코딩한 내용을 볼수가 있다.


다음으로는 서블릿 파일과 jsp 파일을 코딩하여 각 페이지간의 데이터 이동을 통한 가산기를
구현해보자.

프로젝트는 방금 구현한 파일에서 코드만 수정하여 구성하였다.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>덧셈 프로그램 - 입력 화면</title>
</head>
<body>
 <form action =testservlet>
 첫번째 수:<input type = text name = num1><BR>
 두번째 수:<input type = text name = num2><BR>
 <input type = submit value='더하기'>
 </form>
</body>
</html>

먼저 newfiles.jsp 인데 가장 초기화면으로 보면 된다. 여기서 사용자에게 입력값을 받은 뒤 servlet 파일로 넘기는데, servlet 파일의 결과값은 항상 다르기 때문에 jsp가 아닌 servlet으로 구성이 된다.
적색으로 표시된 부분이 있는데, 이 부분이 폼에서도 submit 버튼을 클릭했을때 연결이 될 서블릿 주소를 뜻한다. 주소를 제대로 입력하지 않으면 연결되지 않으므로 유의해서 코딩할것.
경로주소를 타이핑하면 된다. /brain/adder 와 같은 방식으로..



servlet의 코드는 다음과 같다.

package testservlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class testservlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    public testservlet() {
        super();   
    }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
  String str1 = request.getParameter("num1");
  String str2 = request.getParameter("num2");
  int num1 = Integer.parseInt(str1);
  int num2 = Integer.parseInt(str2);
  
  int sum = num1+num2;
  
  response.setContentType("text/html;charset=euc-kr");
  PrintWriter out = response.getWriter();
  out.println("<HTML>");
  out.println("<HEAD><TITLE>덧셈 프로그램 - 결과화면 </TITLE></HEAD>");
  out.println("<BODY>");
  out.printf("%d + %d = %d", num1, num2, sum);
  out.println("</BODY>");
  out.println("</HTML>");
 }
 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }
}

doPost쪽은 건드릴것이 없고 doGet부분만 보자. 먼저 response로 부터 받아온 변수 num1, num2 를 서블릿파일에서의 str1, 2로 받아서 집어넣고 int타입으로 변환 후 연산을 수행한다.
int 타입으로 파싱을 하는 이유는 해당 메서드가 리턴하는 값이 문자열 타입이라서 어쩔수 없이 바꾸어 줘야한다.
필요에 따라 int 나 double로 파싱하면 된다.

원래 따로 web-inf의 하위에 web.xml에 서블릿 클래스를 등록해야되지만 이클립스를 사용하게 되면 자동으로 형성해 주기 때문에 걱정할 필요는 없다.

결과화면은 다음과 같다.

 

                 ↑ 입력 화면 ↑ 

 

                                                      ↑ 출력 화면 ↑

그런데 결과 화면의 주소창을 보면 다음과 같이 출력된다.

localhost:8090/jsp_all/testservlet?num1=10&num2=5


입력화면에서 받은 값을 url의 뒤에 붙여서 전송을 하게 되는데 이때에는 url의 길이에 한계가 있기 때문에 다른 방법을 써야된다.

이 때 사용되는 것이 바로 Post 메서드이다.

계속 같이 쓰려니 혼돈이 와서 jsp파일과 java파일을 새로 만들었다.
BBSInput.jsp
bbs-post.java


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>게시판 글쓰기 - 입력화면</title>
</head>
<body>
<h2> 글쓰기 </h2>
<form action=bbs_post method =post>
이름 : <input type=text name=name><br>
제목 : <input type=text name=title><br>
<textarea cols=50 rows=5 name=content></textarea><br>
<input type = submit value='저장'>
<input type = reset value='취소'>
</form>
</body>
</html>

위의 코드가 jsp파일 사용자로부터 입력받는 화면이라고 보면된다.

package testservlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class bbs_post extends HttpServlet {
 private static final long serialVersionUID = 1L;
      
    public bbs_post() {
        super();
    }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 }
 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  request.setCharacterEncoding("euc-kr");
  String name = request.getParameter("name");
  String title = request.getParameter("title");
  String content = request.getParameter("content");
  response.setContentType("text/html;charset=euc-kr");
  PrintWriter out = response.getWriter();
  
  out.println("<HTML>");
  out.println("<HEAD><TITLE>게시판 글쓰기 - 출력 게시판</TITLE></HEAD>");
  out.println("<BODY>");
  out.printf("이름 : %s <BR>",name);
  out.printf("제목 : %s <BR>",title);
  out.println("---------------------<BR>");
  out.printf("<Pre>%s</Pre>", content);
  out.println("---------------------<BR>");
  out.println("</BODY>");  
  out.println("</HTML>");
 }

}
위의 화면은 입력받은 데이터를 전달받아 doPost로 받은 뒤 출력하는 서블릿 파일이다.
request.setCharacterEncoding("euc-kr");
위의 코드는 한글로 변환시켜주는 코드인데 변환하지 않는 경우 문자가 깨진 화면이 출력된다.
input type에 보면 reset이 있는데 이 버튼의 경우 textbox와 contentbox의 내용들은 한번에 리셋시켜주는 역할을 수행한다.

오늘은 여기까지..

반응형

'IT Engineering > JSP & Servlet' 카테고리의 다른 글

JSP & Servlet [4] JSP의 기초 2탄  (0) 2011.12.02
JSP & Servlet [3] JSP의 기초  (0) 2011.11.16
JSP & Servlet 시작 2011.11.11  (0) 2011.11.11
Comments