BACK END/SERVLET

Servlet 1 (서블릿 구현절차, life cycle)

jenn lee 2020. 11. 25. 20:49

<JSP pdf 파일>

- 서블릿 p.166~193

- web.xml파일 p.31

- 서블릿 맵핑 p.172~173

- 서블릿 구현 절차 p.183~185

- 입력양식(서블릿) p.186

- 페이지 이동하기 : p.126

 

 

<web.xml 파일>

- 이클립스에서 Dynamic Project 생성,

체크박스 체크하여 web.xml 파일인 WEB-INF에 생성

---> servlet폴더 > InputForm.jsp 작성 > web.xml

 

 

 

 


<사용할 파일과 설명>

- inputForm.jsp : 다양한 입력양식을 이용해 파라미터로 전송해주는 jsp

- FormServlet.java : 해당 파라미터를 넘겨받아 처리해주는 서블릿 파일

- url pattern : /hohoho  (WEP-INF > web.xml)

- 도착지 : destination

 

 

<서블릿 구현 절차>

* pdf p.184

 

1. 서블릿구현을 위한 폼 양식 파일을 생성합니다.(InputForm.jsp)

* Myweb > WebContent > servlet > InputForm.jsp & destination.jsp 생성

   <form action="<%=request.getContextPath()%>/hohoho" method="post"> 
   성별 :  
   <input type="radio" name="gender" value="남자" checked="checked">남자 
   <input type="radio" name="gender" value="여자">여자 
   <br><br><br> 
   <input type="submit" value="전송"> 
   </form>

 

 

1-1. 서블릿 맵핑 작업을 합니다.(web.xml)

* Myweb > WebContent > WEB-INF > web.xml
* mapping(맵핑) : 추상적 경로를 구체적으로 하는 것

   <servlet> 
   <servlet-name>xxx</servlet-name> 
   <servlet-class>mypkg.FormServlet</servlet-class> 
   </servlet> 
   
   <servlet-mapping> 
   <servlet-name>xxx</servlet-name> 
   <url-pattern>/hohoho</url-pattern> 
   </servlet-mapping>

 

 

2. 사용자 정의 클래스 구현(mypkg.FormServlet)

* Myweb > JaVa Resources > src > mypkg > FormServlet

HttpServlet 상속 받습니다.

(Servlet/GenericServlet/HttpServlet 중에서 하나를 상속 받음)

 

 

2-1. 서비스 메소드 구현(mypkg.FormServlet)

* Myweb > JaVa Resources > src > mypkg > FormServlet

doPost()를 오버라이딩합니다.

 

 

 

 


 

<서블릿 구현 문제 p.187>

- 좋아하는 가수 

 

<사용할 파일과 설명>

- Caller.jsp : 다양한 입력양식을 이용해 파라미터로 전송해주는 jsp

- CallerServlet.java : 해당 파라미터를 넘겨받아 처리해주는 서블릿파일

- url pattern : /aaa.do  (WEP-INF > web.xml)

- 도착지 : Collee

 


<사용할 파일과 설명>

- singForm.jsp : 다양한 입력양식을 이용해 파라미터로 전송해주는 jsp

- TestServlet.java : 해당 파라미터를 넘겨받아 처리해주는 서블릿파일

- url pattern : /qwert (WEP-INF > web.xml)

- 도착지 : singProc.jsp

 

1. singFrom.jsp 

- 목적 : 서블릿 구현을 위한 폼 양식

- 내용 : <table> 작성

- 코드 : 

<form action="<%=request.getContextPath()%>"/qwert method="post">

- 설명 :

/qwert가 가리키는 것은 TestSevlet.java 파일인데,

파일의 보안성(파일경로,파일명)을 위해 /qwert로 작성하였음.

 

 

2. web.xml

- 목적 : 서블릿 맵핑 작업

- 내용 : 파라미터와 초기화 파라미터 작성

- 코드 : 

<servlet>
<servlet-name>abcd</servlet-name>
<servlet-class>mypkg.TestServlet</servlet-class>
<init-param>
<param-name>id</param-name>
<param-value>abc1234</param-value>
 </param-name>
</servlet>

<servlet-mapping>
<servlet-name>abcd</servlet-name>
<url-pattern>/qwert</url-pattren>
</servlet-mapping>

 

- 설명 : 

추상적 경로인 /qwert와 구체적 경로인 mypkg.TestServlet을 같은 abcd로 묶어서 서블릿 맵핑 작업을 하였음.

그리고 초기화 파라미터는 특정 서블릿이 생성될 때,

특정 경로 및 아이디 정보 등 초기에 필요한 데이터들이고, web.xml에 기술함.

서블릿 파일에는 ServletConfig 클래스를 이용해서 접근하거나 직접 기술하는 방법도 있음.

 

 

3. TestServlet.java

- 목적 : 사용자 정의 클래스, 서비스 메소드 구현

- 내용 : HttpServlet 클래스를 상속받고, 메소드를 오버라이딩함.

 

- 코드 : 

①-@override

@override

publicpublic void init(ServletConfig config) throws ServletException {

this.id = config.getInitParameter("id");

this.password = configInitParameter("password");

}

 

②-@Override

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

request.setCharacterEncoding("UTF-8");

String method = request.getMethod();

if (method.equalsIgnoreCase("get")) { this.doGet(request, response); }

else { this.doPost(request, response); } 
}

 

③-@Override

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
request.setCharacterEncoding("UTF-8"); 
int _title = Integer.parseInt(request.getParameter("title")); 
String title = ""; 
if (_title == 1) { title = "애원"; }

else if(_title == 2) { title = "노바디"; }

else if(_title == 3) { title = "사랑"; }

String singer = request.getParameter("singer");

//id와 password는 인스턴스변수로 사용하기 위해 맨위에서 미리 선언함.

request.setAttribute("id", this.id);

request.setAttribute("password", this.password);

request.setAttribute("title", title);

request.setAttribute("singer", singer);

String gotopage = "/sevlet/singProc.jsp";

RequestDispatcher dispatcher = request.getRequestDispatcher(gotopage);

dispatcher.forward(request, response); }

 

- 설명 : 

↓① init() : 초기화 파라미터를 불러오는 메소드

↓② service() : Http의 요청방식을 결정함(Get/Post 방식)

  service메소드는 요청 받을 때 마다 서비스를 수행하는 메소드로

  singForm.jsp의 method인 Post를 읽어와서 결정함

↓③ doPost() or doGet() : 모든 파라미터 이름과 데이터 값을 request에 담고,

   dispatcher가 이것들을 forward하여 gotopage(singProc.jsp)로 보냄

↓④ destroy() : 소멸

 

 

4. singProc.jsp

- 목적 : 도착지

- 내용 : 넘겨받은 데이터들을 출력 처리

- 코드 : 

좋아하는 노래 : ${requestScope.title}
좋아하는 가수 : ${requestScope.singer}
아이디 : ${requestScope.id}
패스워드 : ${requestScope.password}

- 설명 :

TestServlet.java로부터 데이터를 넘겨 받아 EL(${})을 사용하여 출력 처리,
이전의 과정에서 모든 데이터들을 request 영역에 저장했기 때문에,

<requestScope.파라미터> 와 같이 기술함

 

 

 

 


<서블릿의 Life Cycle>

* pdf p.168

- 지속적 서비스를 하다가 소멸됨

- 객체 생성 > 메소드 init() 메모리에 올림 > service() 요청이 들어올때 마다 수행 > destory(소스코드 변경시 소멸)

 

 

 


 

프로젝트 생성
마지막 단계에서 체크 > WEB-INF > lib > web.xml파일 생성됨

web.xml파일 : 웹 서비스 구동시 처음으로 읽어 들이는 xml 설정 파일

자바에서 오버라이딩 시 @ <---annotation(오버라이딩됨을 알려주는 주석)

 


초보자를 위한 서블릿 파일 생성

 

프로젝트 > 서블릿 > url을 /hahaha로 변경(url mappings) 
> company, 네이버, 어쩌구저쩌구 add (Init parameters)
> address, 성남시 판교 add (Init parameters)

 

 

 

 

 


<request.setAttribute 개념>

- request.setAttribute로 파라미터 전달하기
- 이전까진 input으로 데이터를 넘겨주었다면, 이번에는 다이렉트로 데이터값을 전달하려고 한다.
여기서 attribute 개념이 나오고, 서버가 집어넣는 데이터와 같다.
- 우리가 전달해 주는 정보. 즉, request에 '서버야, 데이터 전달좀해줘.' 라고 명령하면 된다.
request.Attribute 안에 파라미터 이름과 데이터값을 넣으면 끝.
request.setAttribute("name", "지은"); 

ㄴ"지은"이라는 이름을 "name"으로 부름

ㄴ서버를 통해 "지은" 이란 이름을 전달해주는데 거기건 name으로 부를수있단 뜻.

<% String name = (String) request.getAttribute("userName"); %> <%=name%>