index.jsp 에 submit 버튼을 만들어줍니다.

<form action="http://localhost:8080/wps/hello" method="get">

<input type="submit" value="전송">

</form>

전송버튼을 누르면 HelloWorld 가 찍힌 페이지가 나옴을 알 수 있음.


윈도우, 컨트롤 4

윈도우, 컨트롤 5


여기서 method 를 post 로 바꾸어보자. (전송방식을 바꾸어 보자는것)

<form action="http://localhost:8080/wps/hello" method="post">

<input type="submit" value="전송">

</form>


아무것도 안나온다.


윈도우, 컨트롤 7


전송을 눌렀을때 요청되는 주소가"http://localhost:8080/wps/hello" 이고

이것을 받은 서버는 Hello World 를 찍게끔 되어있따.



왜 post 방식으로는 아무것도 안나오는가?


servlet 에서 service 메소드는 http 전송방식에 따라서 doGet , doPost 를 호출하게 되는데

method =  post 라고 하면

doPost 를 호출하게 된다... 그런데 servlet 에서 doPost 메소드에 아무것도 지정하지 않았으므로

찍어줄것이 없는것


package hello;

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

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

public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public HelloServlet() {
        super();
        System.out.println("생성자 호출");
    }

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init() 호출");
	}

	public void destroy() {
		System.out.println("destroy() 호출");
	}

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service() 호출");
		super.service(request, response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet() 호출");
		PrintWriter pw =  response.getWriter();
		pw.write("

Hello World

"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost() 호출"); } }
package hello;

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

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

public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public HelloServlet() {
        super();
        System.out.println("생성자 호출");
    }

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init() 호출");
	}

	public void destroy() {
		System.out.println("destroy() 호출");
	}

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service() 호출");
		super.service(request, response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet() 호출");
		PrintWriter pw =  response.getWriter();
		pw.write("

Hello World

"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost() 호출"); } }

콘솔창에서 출력되는 내용을 보아도 알 수 있다.

get 방식은 사용자가 직접적으로 주소를 쳐넣어서 처리하거나 form 에서 method="get" 이라고 했을때

post 방식은 주소창에 직접 쳐넣어서는 처리 되지 않는것.... form에서 method="post" 라고 했을때만 임


사용자 지정 1


그러면... 서블릿을 하나 더 만들어 봅시다.

web.xml (배치기술서 - deployment descriptor) 를 열어서 내용을 추가해 줍니다.


servlet 은 서비스를 하는 놈! service 메소드가 먼저 호출되는것을 알 수 있다.


<servlet>

    <servlet-name>okay</servlet-name>

    <servlet-class>hello.OkayServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>okay</servlet-name>

    <url-pattern>/ok</url-pattern>

</servlet-mapping>


<servlet></servlet> 안에서 hello 페키지에 OkayServlet 이라는놈의 이름(별칭)을 okay 라고 하겠다

라고 잡아주고,

<servlet-mapping></servlet-mapping> 안에서는

okay 라고 하는 놈의 url-pattern 늘 /ok 라고 하겠다

라고 정해주는것이다.

그러면 url 요청이 들어왔을때 요놈을 바탕으로

/ok 라고 들어왔으니 okay 라는 놈의 실체인 hello 페키지에 있는 OkayServlet 이라는 녀석을

찿아가 응답을 주는 것임

(url-pattern은 여러개 설정할 수 있음)


자... 이제 실체를 만들러 갑니다.


사용자 지정 2

사용자 지정 5

사용자 지정 6


doGet 메소드 만들어 줍니다.

doGet 메소드 안에  gogogo~ 를 누르면

HelloServlet 의 내용인 Hello World 가 찍히도록 링크를 걸어줍니다.


package hello;

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 OkayServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		PrintWriter pw = response.getWriter();
		pw.write("

Okay!!!

"); pw.write(" gogogo~"); } }

실행해보면...


사용자 지정 7


사용자 지정 8


OkayServlet 의 doGet 메소드 안쪽의 내용을 보자면...

response 에서 getWriter 를 하면.... PrintWriter 가 생김

PrintWriter = pw 는

클라이언트의 웹브라우져와 직접 연결되어져있는 IO 객체이다.

pw.Write 하면.... 사용자의 웹브라우져에 메시지가 착착~ 뿌려지는 것이다.

페이지 소스를 보면 우리가 OkayServlet 에서 pw.Write 한 내용만 나온는 것을 알 수 있다.

사용자 지정 9


클라이언트에서 요청을 하고 서버에서 응답을 한다.... 이것을 풀어 써 보자면...

(1) http://localhost8080/wps/ok 라고 클라이언트에서 호출을 하면

(2) 톰캣이 받아들인다.

    /wps -> 아항~ 프로젝트 파악완료~

    /ok -> web.xml 을 참조해서 OkayServlet 을 실행하자~

(3) 톰캣이 OkayServlet 의 service() 메소드를 호출

(4) 메소드 방식이 어라? 주소창에 써서 호출했네? 이건 get 방식이여~

    ---> doGet 메소드 호출

(5) doGet 메소드 안에 내용을 실행하고 끈남 ( 응답 완료~) 클라이언트 브라우져에서 화면이 보여요~


(6) 5의 내용중에 <a href='hello'> 를 누르면 (/hello 가 아닌 hello 이므로)

    현재경로(http:localhost:8080/wps/) + hello  주소를 호출

(7) 톰캣이 요 주소를 받아들이고~ 2~4 프로세스처럼 처리한다.




service 메소드는 모든요청에 대해 다 처리하도록 되어있음

즉... service 메소드는 메소드 방식을 파악해서 어디로보낼지를 결정함

어떤 요청이 들어와도 service 메소드가 먼저 호출되고 해당 메소드로 넘어감

그런데.... 일반적으로 우리가 만드는 어플리케이션에서

doGet, doPost 방식만을 사용하는데....

다른 방식을 사용할때엔 해킹의 위험성이 아주 많이 높아짐

더불어 service 메소드를 직접 다루는것도 권고 사항이 아니다.

그러므로... httpservlet 을 상속받아 만드는 서블릿에서는

doGet, doPost 만을.... 경우에 따라서는 init, destroy 까지만 건드린다.

04 15, 2009 22:08 04 15, 2009 22:08
iamback 이 작성.

Trackback URL : http://pippen80.cafe24.com/trackback/158

Trackback RSS : http://pippen80.cafe24.com/rss/trackback/158

Trackback ATOM : http://pippen80.cafe24.com/atom/trackback/158


« Prev : 1 : ... 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : ... 251 : Next »