본문 바로가기

IT일반과목/JSP

20180829 집공부9

첫번째 시작

웹서버 : 클라이언트의 요청에 의해 정보를 제공해 주는 서버 (Aphach, IIS).

별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청.

웹브라우저 : 웹서버에 정보를 요청하고, 웹서로부터 정보를 받는 매개체. 이때 HTTP 프로토콜을 사용함.

 

 

JAVA : JAVA웹어플리케이션을 구현하기 위한 선행 학습 필요

HTML : 웹어플리케이션을 구현하기 위한 기본 언어

JavaScript : 클라이언트 기능을 구현하기 위한 언어

Jquery : JavaScript의 대표적인 라이브러리로써, 클라이언트 사이드 스크립트 언어를 단순화 할 수 있다.

CSS : 웹어플리케이션의 레이아웃 및 스타일을 지정하는 언어

 

=============================================================================================

 

두번째 시작 - JSP 맛보기

 

JSP특징

- 동적 웹어플리케이션 컴포넌트.

- .jsp 확장자.

- 클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용.

- jsp는 서블릿으로 변환되어 실행

- MVC패턴에서 View로 이용됨.

 

=============================================================================================

 

세번째시작 - servlet 맛보기

 

Servlet특징

- 동적 웹어플리케이션 컴포넌트.

- .java 확장자.

- 클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용.

- java thread이용하여 동작.

- MVC패턴에서 Controller로 이용됨.

 

 

 

web.xml에 서블릿 맵핑

기존경로 : 기존 경로 : http://localhost:8181/helloworld/servlet/com.javalec.ex.HelloWorld

URL맵핑 경로 : URL맵핑 경로 : http://localhost:8181/helloworld/HWorld

 

하는방법1

web.xml에서

</web-app>앞에 이 코드 삽입하기

 

<servlet>

<servlet-name>프로젝트이름</servlet-name>

<servlet-class>com.javalec.ex.HelloWorld</servlet-class)

</servlet>

<servlet-mapping>

<servlet-name>helloworld</servlet-name>

<url-pattern>/hw</url-pattern>

</servlet-mapping>

 

<servlet-name>

: 임의의 이름을 만들어 줍니다.

 

<servlet-class>

: 매핑할 클래스 파일명을 패키지명을 포함하여 정확하게 입력 합니다.

 

<url-pattern>

: servlet-class의 클래스를 매핑할 임의의 이름을 입력 합니다. 주위할 점은 ‘/’로 시작해야 합니다.

 

 

 

하는방법2

어노테이션을 이용한 서블릿 맵핑

@WebServlet(“HWorld)

: 맵핑명(HWorld)java소스에 직접 입력 합니다.

 

=============================================================================================

 

다섯번째시작 - servlet 본격적으로 살펴보기 첫번째

 

 

ServletJAVA언어를 사용하여 웹프로그램을 제작하는 것 입니다. 간단한 Servlet 프로젝트를 만들어 보면서 전체적인 구조(흐름)를 살펴보도록 합니다.

-> 서블릿을 만들면 자동으로 만들어지는 소스이다.

 

Servlet 클래스는 HttpServlet 클래스를 상속 받는다.

 

Servlet라는 인터페이스가 있다.

그밑에 추상클래스인 GenericServlet가 있다.

HttpServlet은 상속을 다 받는다.

---------------------------------------------------------------------------------------------

package com.javalec.ex;

 

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 HelloWorld

*/

@WebServlet("/HelloWorld")

public class HelloWorld extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public HelloWorld() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

System.out.println("HelloWorld~~");

response.setContentType("text/html; charset=euc-kr");

PrintWriter writer = response.getWriter();

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>");

writer.println("<h1>HelloWorld~~~</h1>");

writer.println("</body>");

writer.println("</html>");

writer.close();

}

 

/**

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

*/

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

// TODO Auto-generated method stub

}

 

}

 

}

 

}

----------------------------------------------------------------------------------------------

 

 

 

웹브라우저가 있고 이게 클라이언트가 있고 옆에 웹 서버가 있다.

웹서버는 WAS이다.

client 가 웹서버로 요청 -> Request

웹서버가 client로 주는 것 -> Response

 

WAS에서는 responserequest가 자동으로 생성된다.

요청을 하는 객체는 어느홈페이지의 로그인을 입력한다 하면 로그인 이면 되고 아니면 회원가입이나 안되는거절당하는데

우리가 기억한 아이디랑 패스워드는 request에 실어져서 was인 웹서버로 request객체에 담겨져서 이동한다.

 

웹서버에서는 DB가 있을것이고 검색을 하고 자료를 갖고온다면 client한테 응답을 해줘야 한다.회원이면 로그인되고 아니면 가입시키도록 하는 걸 response객체에 실어서 보낸다. 이뜻으로 이해하면 편하다.

 

 

response.setContentType(“text/html”)가 뭐냐면 응답을 처리해주는데 처리해주는 형태를 html로 처리해주겠다는 것이다.

JSP나 서블릿이나 응답을 해줄테는 html파일형식으로 응답을 해준다.

그 응답을 할 때 컨텐트 타입을 html로 해준다는 것이다.

 

서블릿같은경우는 자바 파일 이므로 html코드가 없다.

PrintWriter이라는 String을 만들어 준다. 이 스트링도 응답객체에서 get으로 갖고왔다.

ex) PrintWriter writer = response.getWriter();

 

그후에 html코드를 찍는 것이다.

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>"); -> 실질적으로 출력되는 부분이다.

writer.println("<h1>HelloWorld~~~</h1>"); -> 폰트의 굵기 이걸로 할래

writer.println("</body>");

writer.println("</html>");

 

 

그후 Stringclose로 닫는 것이다.

writer.close();

 

 

-------------------------------------------------------------------------------

그 후 doGet방식과 doPost방식을 보겠다.

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

System.out.println("HelloWorld~~");

response.setContentType("text/html; charset=euc-kr");

PrintWriter writer = response.getWriter();

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>");

writer.println("<h1>HelloWorld~~~</h1>");

writer.println("</body>");

writer.println("</html>");

writer.close();

}

 

/**

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

*/

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

// TODO Auto-generated method stub

}

 

------------------------------------------------------------------------------

클라이언트가 있고 WAS서버가 있다.(web application server)

클라이언트가 서버한테 request하고 서버가 클라이언트한테 reponse한다.

 

요청을 하는 방식이 2가지가 있다.

get

post

 

html코드를 보면 전송을 할 때 태그가 있는데 태그의 방식에 따라 나눠지는 것이다.

어떻게 get으로 할지 post으로 할지는 html코드안에서 고르면 된다.

 

메소드에 get방식으로 하면

Form태그 method 속성값 = get -> html에서 쓰는 것이다.

GET 방식 :

URL값으로 정보가 전송되어 보안에 약함.

ex) 네이버에 검색을 할 경우 주소창에 그게 뜬다.

 

 

메소드에 post방식으로 하면

Form태그 method 속성값 = post -> html에서 쓰는 것이다.

POST 방식 :

header를 이용해 정보가 전송되어 보안에 강함.

 

-------------------------------------------------------------------------

doGet()

-> htmlform 태그의 method 속성이 get일 경우 호출된다.

-> 웹브라우저의 주소창을 이용하여 servlet을 요청한 경우에도 호출됩니다.

 

doGet메소드는 매개변수로 HttpServletRequestHttpServletResponse를 받습니다.

 

 

-------------------------------------------------------------------------

HttpServletResponse 객체의 setContentType() 메소드 호출하여 응답방식 결정 합니다.

 


 

 

-------------------------------------------------------------------------

HttpServletResponse 객체의 getWriter() 메소드를 이용하여 출력 스트림을 얻습니다.

 


 

 

 

-------------------------------------------------------------------------

doGet()

출력스트림의 println() 메소드를 이용하여 출력하면 웹브라우저에 출력된다.

 

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>");

writer.println("<h1>HelloWorld~~~</h1>");

writer.println("</body>");

writer.println("</html>");

 

서블릿에 이렇게 써주는데 이때도 html코드를 써줘야 한다.

-------------------------------------------------------------------------

=========================================================================

실습 한번 해보겠다.

dynamic web project로 만들기

servlet로 만들기 설정할꺼 해주고 next눌러서 URL mappings해주기

 



그후 소스 작성하기 doGet방식으로 해보겠다.

package com.javalec.ex;

 

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 HelloWorld

*/

@WebServlet("/HW")

public class HelloWorld extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public HelloWorld() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

System.out.println("doGet");

response.setContentType("text/html; charset=euc-kr");

PrintWriter writer = response.getWriter();

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>");

writer.println("<h1>안녕종규야!!</h1>");

writer.println("</body>");

writer.println("</html>");

writer.close();

}

 

/**

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

*/

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

// TODO Auto-generated method stub

System.out.println("doPost");

}

 

}

 

-------------------------------------------------------------------

4. 출력화면 표시



이거인 경우 인터넷창에는 html소스를 썼기 때문에 안녕 종규야 라고 표시가 되며 아래에는 System.out.println으로 표시를 해줬기 때문에 Console창에 문구가 뜨는 것이다.그리고 주소를 보면 URL맵핑을 했기 때문에 뒤에 /HW라고 뜨는걸 볼 수 있다.

 

 

 

=========================================================================

-------------------------------------------------------------------------

doPost()방식 알아 보겠다.

-> htmlform 태그의 method 속성이 post일 경우 호출된다.

 


html에서

 

 


  servletdoPost로연결되어 호출이 된다.

-------------------------------------------------------------------------

html소스를 보면 form 태그가 있고 submit를 클릭하면 PostMethod를 찾아가는데 이게 어디있냐면

서블릿으로 PostMethod.java로작성된게 있다.

-------------------------------------------------------------------------

package com.javalec.ex;

 

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 PostMethod

*/

@WebServlet("/PostMethod")

public class PostMethod extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public PostMethod() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

System.out.println("doGet");

}

 

/**

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

*/

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

// TODO Auto-generated method stub

System.out.println("doPost");

response.setContentType("text/html; charset=euc-kr");

PrintWriter writer = response.getWriter();

writer.println("<html>");

writer.println("<head>");

writer.println("</head>");

writer.println("<body>");

writer.println("<h1>POST 방식 입니다. 따라서 doPost 메소드 호출 되었습니다.</h1>");

writer.println("</body>");

writer.println("</html>");

}

 

}

-------------------------------------------------------------------------

 

이렇게 뜬다. 여기서 보자면 현재 doPost방식으로 설정되어있고 실행을 해보면

 

-------------------------------------------------------------------------


 

이런식으로 post라는 걸 클릭하면 이땐 action타입이기 때문에 넘어간다.

그럼 PostMethod가 뜨는 것이다.

 

 

 

-------------------------------------------------------------------------

컨텍스트 패스(Context Path)

-> Was(Web Application Server)에서 웹어플리케이션을 구분하기 위한 path이다.

-> 이클립스에서 프로젝트를 생성하면, 자동으로 server.xml에 추가 됩니다.


 


 

이렇게 마지막을 볼 경우 Context path라고 만들어 놓았다.

이거일 경우 이클립스에서자동으로 해주니 걱정 할 필요가 없다.

 

===================================================================================

여섯번째시작 서블릿 본격적으로 살펴보기2

 

Servlet 작동 순서

-> 클라이언트에서 servlet 요청이 들어오면 서버에서는 servlet컨테이너를 만들고, 요청이 있을 때마다 스레드가 생성된다.

-> 웹브라우저를 통해서 클라이언트가 요청을 하는데 어디로? 웹서버로 요청을 한다. 그럼 어디로 들어오냐면 WAS 웹어플리케이션 서버로 요청을 보낸다. 그럼 WAS에서 Servlet컨테이너로 가서 스레드생성과 servlet객체를 생성한다.

 

-> 서버가 있다면 거기로 request가 들어온다. 그럼 그 request를 처리할 객체가 있고 그 로직이 있을 것이다.

-> 만약 request가 많이 들어와서 객체가 계속 생성된다면 과부하가 걸릴 것이다.

 

하지만 우리가 학습하고 있는 서블릿 같은 경우 요청이 들어오면 이서버안에 JVM이라는게 있는데 멀티스레드를 지원한다. 스레드 하나를 생성해서 방금 온걸 스레드 일로 보낸다. 그럼 스레드 또하나가 생성이 된다. 요청 들어올때마다 스레드를 계속 만들어서 요청을 처리한다. 다른 CGI에 비해서 부하가 적게 걸려 속도가 빠르고 효율적이다.

서블릿 컨테이너에서 스레드 생성은 요청 들어온걸 받아주기 위해서 하고 servlet객체도 생성한다.

 

-------------------------------------------------------------------------

Servlet 라이프사이클(생명주기)

-> Servlet의 사용도가 높은 이유는 빠른 응답 속도 때문이다.

-> Servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존의 객체를 재활용하게 된다. 따라서 동작 속도가 빠르다.

 

최초 한번은 Servlet객체를 생성하고 두 번째 부터는 최초생성된 객체를 계속 재활용을 한다.

그러므로 응답속도가 빠르다. Servlet 객체생성과 init()호출은 최초 한번만 생성이 되고 그 후에

service(), doGet(), doPost()는 요청시 매번 생성이 된다. 그후 중단될때는 destroy() 호출이 된다.

 

서블릿도 인간의 생명주기라고 생각해라. 태어났을 때 최초 한일이 Init()이고

죽기전에 하는게 destroy이고 살아생전에 하는게 service, doget, dopost이다.

 

=========================================================================

-------------------------------------------------------------------------

실습)

servlet 만들기


 

URL mappings 해주기


 

 

 

 

 

만든 프로젝트 목록


 

 

-------------------------------------------------------------------------

 

 




 

 

 

-------------------------------------------------------------------------

 

 

 

package com.javalec.ex;

 

import java.io.IOException;

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 LifeCycleEx

*/

@WebServlet("/LC")

public class LifeCycleEx extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public LifeCycleEx() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//response.getWriter().append("Served at: ").append(request.getContextPath());

System.out.println("doGet");

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//doGet(request, response);

System.out.println("doPost");

}

 

@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("init");

}

@Override

public void destroy() {

// TODO Auto-generated method stub

System.out.println("destory");

}

}

 

-------------------------------------------------------------------------

여기서 보자면 init가 최초 실행된 후 그다음 새로고침을 눌렀을 경우 계속 doGet가 실행되는걸 볼 수 있다.

그 후 destory가 서버를 종료했을 때 실행이되면서 문구가 뜬다.

 

-------------------------------------------------------------------------

Servlet 선처리, 후처리

Servlet의 라이프 사이클중 init()destroy()메소드와 관련하여 선처리(init())와 후처리(destroy()) 작업이 가능 합니다.

 

Servlet 객체생성이 되고 init가 호출하고 이건 아까 한번씩만 한다 했는데 이때 init() 메소드가 호출되기 전에

선처리 : @PostConstruct”를 선언하면 먼저 실행이 되고 destroy역시 뒤에 후처리 : @PreDestroy”를 해주면 된다.

 

메소드명은 임의로 하되 앞에 @PostConstruct @PreDestroy만 붙여주면 된다.

 



 

 

 

 

-------------------------------------------------------------------------------

 

 

 

package com.javalec.ex;

 

import java.io.IOException;

 

import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

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 LifeCycleEx

*/

@WebServlet("/LC")

public class LifeCycleEx extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public LifeCycleEx() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//response.getWriter().append("Served at: ").append(request.getContextPath());

System.out.println("doGet");

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//doGet(request, response);

System.out.println("doPost");

}

 

@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("init");

}

@Override

public void destroy() {

// TODO Auto-generated method stub

System.out.println("destory");

}

@PostConstruct

public void initPostConstruct() {

System.out.println("PostConstruct");

}

@PreDestroy

public void destroyPreDestroy() {

System.out.println("PreDestroy");

}

}

 

 

-------------------------------------------------------------------------------

이거인 경우 아래에 postconstructpredestroy를 추가함으로써 시작하기전에 그리고 종료하기전에 미리 실행될 구문을 넣어서 실행을 시킨 것이다.

 

 

-------------------------------------------------------------------------------

일곱번째시작 서블릿 본격적으로 살펴보기 3

 

HTML form태그

-> Htmlform태그는 서버쪽으로 정보를 전달할 때 사용하는 태그입니다.

-> Html의 모든 태그를 학습할 필요는 없다.

 

------------------------------------------------------------

input

-> 태그의 종류를 지정 합니다.

 

속성(type, name, value)

- type : 태그 종류 지정(ex.text, password, submit, checkbox, radio, reset)

- name : input태그 이름

- value : name에 해당하는 값(ex.name = value)

//submit는 클라이언트에서서버로전송할떄 필요한것

------------------------------------------------------------

type=text

-> 일반적인 데이터를 입력하기 위해 사용합니다.

<input type=“text” name=“name” size=“10”>

------------------------------------------------------------

type=password

-> 로그인, 회원가입 페이지 등에서 비밀번호 입력하기 위해 사용합니다.

<input type=“password” name=“name” size=“10”>

------------------------------------------------------------

type=submit

-> form내의 데이터를 전송할 때 사용합니다.

<input type=“submit” value=“전송”>

------------------------------------------------------------

type=reset

-> Form내의 데이터를 초기화 할 때 사용합니다.

<input type=“reset” value=“초기화”>

------------------------------------------------------------

type=checkbox

-> 데이터를 여러 개 전송해야 할 때 사용합니다.

<input type="checkbox" name="hobby" value="read">독서

<input type="checkbox" name="hobby" value="cook">요리

<input type="checkbox" name="hobby" value="run">조깅

<input type="checkbox" name="hobby" value="swim">수영

<input type="checkbox" name="hobby" value="sleep">취침

------------------------------------------------------------

type=radio

-> checkbox와 달리 여러 개의 데이터 값 중 한 개의 값만을 전송할 때 사용합니다.

<input type="radio" name="major" value="kor">국어

<input type="radio" name="major" value="eng" checked="checked">영어

<input type="radio" name="major" value="mat" >수학

<input type="radio" name="major" value="des" >디자인

------------------------------------------------------------

select

-> 리스트형태의 데이터를 사용합니다.

<select name="protocol">

<option value="http">http</option>

<option value="ftp" selected="selected">ftp</option>

<option value="smtp">smtp</option>

<option value="pop">pop</option>

</select>

 

------------------------------------------------------------

------------------------------------------------------------

위에있는 걸 다 묶어서 form태그라고 묶는다.

 

 

<form action="FormEx" method="post">

 

위에가 형태인데 form은 형태를 의미하는 것이며

actionsubmit이 있었는데 어느 데이터로 보낼것인지 선택하는 것이다. FormEx은 매핑할 서플릿 찾아갈 것이다.

왜냐면 뒤에 확장자가 없으므로 매핑할 곳을 찾아가는 것이다. 즉 여기엔 찾아갈 파일을 쓰는 것이다.

methodpost로 호출할것인지 get로 호출할 것인지 그걸 정하는 것이다.

 

GET방식일 경우

Get : http://IP주소:port번호/컨텍스트/path/MemberJoin?id=“abcdefg”&name=“김종규

POST방식일 경우

Post : http://IP주소:port번호/컨텍스트/path/MemberJoin

 

-------------------------------------------------------------------------------------------

예제

 

 

 

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

 

<form action="FormEx" method="post">

 

이름 : <input type ="text" name="name" size="10"><br/>

아이디 : <input type ="text" name="id" size="10"><br/>

비밀번호 : <input type ="password" name="password" size="10"><br/>

취미(다중선택) :

<input type="checkbox" name="hobby" value="read">독서

<input type="checkbox" name="hobby" value="cook">요리

<input type="checkbox" name="hobby" value="run">조깅

<input type="checkbox" name="hobby" value="swim">수영

<input type="checkbox" name="hobby" value="sleep">취침<br/>

과목 :

<input type="radio" name="major" value="kor">국어

<input type="radio" name="major" value="eng" checked="checked">영어

<input type="radio" name="major" value="mat" >수학

<input type="radio" name="major" value="des" >디자인<br/>

<select name="protocol">

 

<option value="http">http</option>

<option value="ftp" selected="selected">ftp</option>

<option value="smtp">smtp</option>

<option value="pop">pop</option>

 

</select><br/>

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

<input type="reset" value="초기화">

 

</form>

 

 

 

</body>

</html>

 

 

---------------------------------------------------------------------------


 

 

---------------------------------------------------------------------------

Servlet Parameter

-> Form태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면, 해당파일(Servlet)에서는 HttpServletRequest객체를 이용하여 Parameter 값을 얻을 수 있다.

-> 이게 무슨말이냐면 아ᄁᆞ 위에 form태그를 작성후 전송을 누를 경우 그 페이지로 갈텐데 거기서 받을수있을 만한게 HttpServletRequest이다.

 

에제로 보자면

HTML에서 아까 작성한것중 이름 부분을 보면 이름 : <input type ="text" name="name" size="10"><br/>

이렇게 적었는데 이걸 받는Servlet파일 쪽에서는

String name=request.getParameter(“name”);

로받아주면 된다.

 

받는쪽의 Servlet파일에서는 HttpServletRequest객체를 이용하여, Parameter값을 얻는데

관련 메소드로는

getParameter(name) -> 이름에 해당하는 value값 받는것

getParameterValues(name) -> 값이 여러개 있을때이다.

getParameterNames() -> 이름들을 갖고와서 배열형식으로 만들어 주는 것이다.

가 있다.

 

 

--------------------------------------------------------------------------------

실습 해보기

html에서 서블릿으로 데이터를 보내고 그걸로 인해 서블릿에서 출력하기

 


 

 

 

-------------------------------------------------------------------------------

 

 

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

 

<form action="FormEx" method="post">

 

이름 : <input type ="text" name="name" size="10"><br/>

아이디 : <input type ="text" name="id" size="10"><br/>

비밀번호 : <input type ="password" name="password" size="10"><br/>

취미(다중선택) :

<input type="checkbox" name="hobby" value="read">독서

<input type="checkbox" name="hobby" value="cook">요리

<input type="checkbox" name="hobby" value="run">조깅

<input type="checkbox" name="hobby" value="swim">수영

<input type="checkbox" name="hobby" value="sleep">취침<br/>

과목 :

<input type="radio" name="major" value="kor">국어

<input type="radio" name="major" value="eng" checked="checked">영어

<input type="radio" name="major" value="mat" >수학

<input type="radio" name="major" value="des" >디자인<br/>

<select name="protocol">

 

<option value="http">http</option>

<option value="ftp" selected="selected">ftp</option>

<option value="smtp">smtp</option>

<option value="pop">pop</option>

 

</select><br/>

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

<input type="reset" value="초기화">

 

</form>

 

 

 

</body>

</html>

 

 

-------------------------------------------------------------------------------

 

 

 

package com.javalec.ex;

 

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;

 

import org.apache.catalina.tribes.util.Arrays;

 

/**

* Servlet implementation class FormEx

*/

@WebServlet("/FormEx")

public class FormEx extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public FormEx() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//response.getWriter().append("Served at: ").append(request.getContextPath());

System.out.println("doGet");

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//doGet(request, response);

System.out.println("doPost");

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

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

String [] hobbys=request.getParameterValues("hobby");

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

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

response.setContentType("text/html; charset=EUC-KR");

PrintWriter writer = response.getWriter();

writer.println("<html><head></head><body>");

writer.println("아이디 : "+id+"<br/>");

writer.println("비밀번호 : "+pw+"<br/>");

writer.println("취미 : "+Arrays.toString(hobbys)+"<br/>");

writer.println("전공 : "+major+"<br/>");

writer.println("프로토콜 : "+protocol);

writer.println("</body></html>");

writer.close();

}

 

}

 

------------------------------------------------------------------------------------


 


 

-------------------------------------------------------------------------

정리를 하자면 html에있는 Form태그로 인한 내가 만든 값들이 실행을 하면 먼저 실행된후 그후에 서블릿쪽으로 값을 넘겨주면 서블릿에서는 request.getParameter 등을 통해 받아 처리를 한다.




-------------------------------------------------------------------------

-----------------------------------------------------------------------

8번째 시작 서블릿 본격적으로 살펴보기

 

서블릿 초기화 파라미터 : ServletConfig

-> 특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있다. 예를들어 특정 경로 및 아이디 정보 등이다.

이러한 데이터들을 초기화 파라미터라 하고, web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용해서 접근한다.

 

Servlet클래스 제작 -> web.xml파일에 초기화 파라미터 기술을 한다. -> ServletConfig 메소드 이용해서 데이터 불러오기

 

-----------------------------------------------------------------------

실습 해보기

값에 초기값을 xml에서 설정할 수 있다.

 

서블릿을 만들었다.



 

매핑을 하였다.


 


 

-----------------------------------------------------------------------

InitParam 소스

 

 

package com.javalec.ex;

 

import java.io.IOException;

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 InitParam

*/

@WebServlet("/InitP")

public class InitParam extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public InitParam() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//response.getWriter().append("Served at: ").append(request.getContextPath());

String id = getInitParameter("id");

String pw = getInitParameter("pw");

System.out.println("id = "+id);

System.out.println("pw = "+pw);

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//doGet(request, response);

}

 

}

 

 

-----------------------------------------------------------------------

web.xml 소스

 

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>jsp_8_1_ex1_initparamex</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<servlet>

<servlet-name>InitParam</servlet-name>

<servlet-class>com.javalec.ex.InitParam</servlet-class>

<init-param>

<param-name>id</param-name>

<param-value>abcde</param-value>

</init-param>

<init-param>

<param-name>pw</param-name>

<param-value>12345</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>InitParam</servlet-name>

<url-pattern>/IP</url-pattern>

</servlet-mapping>

</web-app>

 

 

 


-----------------------------------------------------------------------

정리하자면 ServletInitParam을 지정한후 서블릿 맵핑을 하고 그거안에 init-param이란 태그를 넣어서 해본 것이다.

그리고 값을 미리 설정을 해준 것이다.

 

 

 

-----------------------------------------------------------------------

서블릿 초기화 파라미터 : ServletConfig

-> Servlet 클래스 제작 -> @WebInitParam에 초기화 파라미터 기술 -> ServletConfig 메소드 이용해서 데이터 불러오기

 

이거역시 초기화 파라미터값을 주기위해서 하는 것이다.

 

-----------------------------------------------------------------------

실습

 

 

 

package com.javalec.ex;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebInitParam;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

* Servlet implementation class InitParam

*/

@WebServlet(urlPatterns= {"/InitP"},initParams= {@WebInitParam(name="id", value="aaaaa"),

@WebInitParam(name="pw", value="999999")})

public class InitParam extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public InitParam() {

super();

// TODO Auto-generated constructor stub

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//response.getWriter().append("Served at: ").append(request.getContextPath());

String id = getInitParameter("id");

String pw = getInitParameter("pw");

PrintWriter writer = response.getWriter();

writer.println("<html><head></head><body>");

writer.println("아이디 : " + id + "<br />");

writer.println("비밀번호 : " + pw + "<br />");

System.out.println("id = "+id);

System.out.println("pw = "+pw);

writer.println("</body></html>");

writer.close();

}

 

/**

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

*/

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

// TODO Auto-generated method stub

//doGet(request, response);

}

 

}

 

 

 

--------------------------------------------------------------------------------------

web.xml 소스

 

 

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>jsp_8_1_ex1_initparamex</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

</web-app>

 

 


 

'IT일반과목 > JSP' 카테고리의 다른 글

20180831 집공부11  (0) 2018.08.31
20180831 집공부10  (0) 2018.08.31
20180827 집공부7 문제풀기  (0) 2018.08.27
20180826 집공부6 <액션,객체,리다이렉트>  (0) 2018.08.26
20180826 집공부5 <지시어2>  (0) 2018.08.26