1. url맵핑을 하는순간 톰캣이 @webServlet을 찾는다. 
  2. public class Calc extends HttpServlet{ }을 메모리에 올린다.
  3. "/calc" url요청에 맞게 Calc클래스를 수행한다.

 

어노테이션을 이용한 URL 매핑

Nana를 실행하려면 사용자에게 요청할 url를 주면서 그 url과 Nana를 맵핑해야한다.

맵핑을 위해 web.xml파일을 사용했었다.

사용자가 주소창에 ?c=10를 쳐서 보이도록했었다.

<input type="text" name="x">+<input type="text" name="y">

구분자 &

구분자 : &

사용자가 입력한값을 전달받아서 계산할 서버프로그램 : Calc 클래스 생성하기

직접입력하지말고 불러올것

ctrl + space하면 ->se치면 ->선택 ->오버라이딩된다.

web.xml을 url맵핑을 해줘야한다

metadata-complete="false">

맵핑정보 설정시 xml과 어노테이션으로 할 수있다.

metadata를 true로 하게되면 모든 메타데이터가 web.xml에 있는것으로 된다.( 정보를 xml에서 찾게된다)

false로 하면 어노테이션한부분을 찾게해준다

 

url은 항상 소문자로 

자바코드가 달라지면 재시작할것

@webServlet("/calc")

 

webSevlet 추가 , 이름도 add로바꿈

 

좌 : 자기페이지를 요청한다. / 우 : html이 빠진 calc에게 x,y값을 보낸다

   <form action="/add">

<form> 태그의 action 속성은  데이터(form data)를 서버로 보낼 때 해당 데이터가 도착할 URL을 명시합니다.

 

html페이지는 값을 받거나 계산하는 능력이없다. -> 정적인 페이지

<form action="서버코드 url">

 

서버를 재실행하고 3,4를 입력후 덧셈버튼을 누르면 404 오류가 발생한다.

좌: JSPPrj이 들어가있다. 우 : 로컬호스트에서 바로 add를 찾고있다

1.프로젝트명을 같이 붙여주거나 2. 내 프로젝이 콘텐트명이 없도록해야한다.(바람직)

가운데에서 -> 오른쪽으로 사용될수있게 해야한다

 

프로젝트명떼고 루트를 쓸 수 있게바꾸자

프로젝트가 서버에 있는 자원을 요청할때 항상 이 프로젝트명이 들어가는 문제가 발생한다.(계산기페이지에서 프로젝트명이 url에있음)

프로젝트명이 매번들어가는것은 바람직하지않다.

 

1 . 해당프로젝트 선택 -> 속성 Properities -> web project settings -> JSPPrj지우고 - > /넣어서 루트로 바꿔준다.-> apply and close

 

2. 오른쪽 서버탭에서 기존 서버를 지워야한다. delete -> ok

3. 서버를 재실행한다 

프로젝트명없이 나온다.

x와 y값을 받아서 사용자화면에 더한 값을 출력해보자 

콘솔창반응

입출력은 다문자열만가능하다

세번째 : 사용자가 덧셈을 누를때마다 calc이라고 서버에 출력된다

사용자가 3,4를 입력하면 3,4라는 문자열이 저장된것

String x_ = req.getParameter("x"); 사용자가 입력한값을 받아서 x에 넣는다.

문자열출력은 resp.getWriter().println(x+y);


Q. resp.getWriter().println(x+y);

PrintWriter out=response.getWriter();

URL창에 출력결과가 나와 클라이언트가 볼 수 있다.

 

먼저 위의 response는 서버가 클라이언트에게 '응답'한다는 의미를 가진 객체입니다.

서버가 클라이언트에게 '응답'하려면 무조건 response라는 객체를 통해 작업을 해야합니다.

여기서 getWriter()는 '쓰기'를 통해 응답하겠다는 메서드입니다. 데이터타입은 PrintWriter입니다.

html페이지에 원하는 결과를 출력

 

out.print("Hello Servlet");  브라우저에 Hello Servelt이 뜬다.

Q. 웹프로그램과 콘솔프로그램의 차이 ?

  1. 입/출력 도구가 추가되었다.
  2. 실행을 직접할 수 없다. 톰캣에 의해서 실행되도록 한다.
  3. 톰캣이 실행될 수있도록 서블릿코드를 만들고 url을 맵핑시켜서 톰캣이 내것을 실행
  4. 자바와 비슷하다.

Q. 스트림버퍼를 통해 읽어오는것은 모두 문자열이다.

콘솔입력이든 , 파일입력이든, 네트웍 입력이든 모두 버퍼를 쓴다.

문자열 코드를 읽어오는것.

 

Q.톰캣에 메모리가 언제 올라가는지 ?

요청을 받을때 먼저 메모리에 올라가있는 지 확인, 없으면 메모리에올린다.

자주사용하는 url같은경우 (ex. index) timeout이있다.

처음요청할땐 서블릿이 로드해야하므로 살짝느리다.

 

Q.request:입력도구 , response:출력도구 는 WAS에만 있나?

입력은 요청하면서 같이온다. 사용자가 요청하면서 가져온데이터를 알려준다.(쿠키 등) WAS는 자바에서 주로 쓰임

어플리케이션실행을 도와줌, 웹서버는 입력 도구가 필요없다.

서버쪽에서 프로그램을 동작시킬 수있는 환경을 갖고있으면 입출력도구를 제공한다

 


 

11

+ Recent posts