SeSAC 36일차(2023-09-05)
Web Application Programming, Form 태그를 이용한 서블릿 개발, JSP 표준 action
Web Application Programming
- 서블릿(Servlet)
- 서블릿을 Server Side Applet이라 한다.
- 서블릿은 서버에서 운영된다.
- javax.servlet.Servlet 인터페이스를 구현하는 객체이다.
- 서블릿 기본 개념도
- Browser —(request)→ Web Server - DB
- Browser ←(response)— Web Server - DB
- 서블릿의 API 구조도(HttpServlet)
- Servlet interface
- destroy()
- init()
- service()
- getServletInfo()
- getServletConfig()
- GenericServlet implements Servlet
- getInitParameter()
- getInitParameterNames()
- getServletContext()
- getServletName()
- HttpServletExtends Generic Servlet
- doGet()
- doPost()
- doDelete()
- deOptions
- doPut()
- doTrace()
- Servlet interface
- Servlet & http package list
- HttpServlet은 http에 쓰기 편리하도록 만든 GenericServlet을 상속 받은 클래스이다.
- 서블릿의 Life Cycle
- Servlet Loading
- init() (자원할당)
- DB 커넥션을 연다.
- 파일을 오픈한다.
- 로그 파일에 로딩된 Servlet 이름을 추가한다.
- ServletConfig 형의 객체를 받아서 디폴트 설정 값을 저장한다.
- service() (클라이언트 요청 처리)
- 한번의 클라이언트 요구마다 하나의 스레드가 생겨서 service() 메소드를 이용
- service(ServletRequest req, ServletResponse res)
- destroy() (서비스 중지)
- 자원 반납(DB 커넥션, 파일 등)
- ServletRequest API
- 클라이언트의 요청 정보를 가지고 있는 인터페이스
- 클라이언트의 요청 정보를 얻을 수 있는 메소드 제공
- 서블릿 엔진은 클라이언트의 요청을 ServletRequest의 객체로 변환해서 서블릿의 service() 메소드의 매개변수로 전달한다. 그리고 ServletRequest 인터페이스를 상속받은 HttpServletRequest 인터페이스는 HTTP 프로토콜을 사용한 클라이언트 요청 정보를 위해 사용된다.
- ServletRequest 객체에 속성을 저장하고 얻어 오기 위한 메소드
- void setAttribute(String name, Object o)
- 이름과 값의 형태로 ServletRequest 객체 내의 속성을 저장
- Object getAttribute(String name)
- 주어진 이름의 속성을 객체로 되돌려 준다. 없으면 null 리턴
- Enumeration getAttributeNames()
- ServletRequest 객체에 등록된 모든 attribute 들의 이름을 가지고 있는 Enumeration 객체 리턴
- void removeAttribute(String name)
- 주어진 이름의 속성을 삭제
- void setAttribute(String name, Object o)
- ServletRequest 객체에서 클라이언트의 요청 정보를 얻을 수 있는 메소드
- int getContentLenth()
- String getContentType()
- String getParameter(String name)
- Enumeration getParameterNames()
- String[] getParameter getInputStream()
- BufferReader getReader()
- 클라이언트와 서버에 관련된 메소드
- String getProtocol()
- String getServerName()
- int getServerPort()
- String getRemoteAddr()
- String getRemoteHost()
- ServletResponse API
- 서블릿이 클라이언트의 요청을 처리하고 응답을 보내기 위한 인터페이스
- 출력 스트림 객체 이용 서블릿 실행 결과 response
- 클라이언트의 요청에 응답하기 위한 메소드 제공
- 서블릿 엔진은 자동적으로 ServletResponse 인터페이스를 implements 한 객체를 서블릿의 service() 메소드의 매개변수로 제공한다. 그리고 ServletResponse 인터페이스를 상속 받은 HttpServletResponse 인터페이스는 HTTP 프로토콜을 사용하여 클라이언트의 요청에 응답할 때 사용된다.
- ServletResponse의 주요 메소드
- void flushBuffer()
- 버퍼에 있는 내용을 클라이언트에 전송
- int getBufferSize()
- 전송할 문자들을 담을 버퍼의 크기 리턴
- String getCharacterEncoding()
- 전송할 문자들의 encoding을 리턴
- ServletOutputStream getOutputStream()
- Servlet 응답 데이터를 binary 타입으로 보내기 위한 ServletOutputStream 객체가 리턴
- PrintWriter getWriter()
- 응답 데이터를 문자로 보내기 위한 PrintWriter 객체가 리턴
- 그 외 메소드
- boolean isCommitted()
- 버퍼에 있는 응답 데이터들이 전송되었으면 true 리턴
- void reset()
- 버퍼에 있는 데이터들을 제거
- void setBufferSize()
- 버퍼의 크기를 size로 지정
- void setContentLength(int len)
- 클라이언트로 전달되는 내용의 크기를 len으로 설정
- void setContentType(String type)
- 클라이언트로 전송되는 내용의 MINE 타입을 설정
- boolean isCommitted()
<HTML><!-- login.html --> <HEAD><TITLE>로그인</TITLE></HEAD> <BODY> <FORM METHOD=“GET” ACTION=“/test/servlet/ParamTest”> 이름 <INPUT TYPE=“text” NAME=“name”><BR> 암호 <INPUT TYPE=“text” NAME=“password”><BR> <INPUT TYPE=“submit” VALUE=“로그인”> <INPUT TYPE=“reset” VALUE=“취소”> </FORM> </BODY> </HTML> /* 홍길동, 111 입력 후 전송시 <http://127.0.0.1:8080/test/servlet/ParamTest?name=홍> 길동&password=111 URL을 통해 넘어온 파라미터 들의 값을 얻기 위하여 ServletRequest에 정의되어 있는 getParameter(String name) 메소드 사용 public void service(ServletRequest req, ServletResponse res) { … String name = req.getParameter(“name”); int passwd = Integer.parseInt(req.getParameter(“password”)); … }
- void flushBuffer()
- HttpServlet API
- HttpServlet
- HTTP 서블릿을 생성할 수 있도록 기능을 제공해주는 추상 클래스
- ex) class HelloHttpServlet extends HttpServlet{}
- HttpServlet은 일반적으로 웹 클라이언트로부터 온 요청을 받아서 처리하고, 그 결과를 다시 웹 클라이언트에게 되돌려 주는 작업 수행
- HTTP 서블릿을 생성할 수 있도록 기능을 제공해주는 추상 클래스
- HttpServlet 메소드
- HttpServlet 클래스를 상속하는 하위클래스를 작성할 때는 아래의 메소드 중 하나를 반드시 재정의 해줘야 한다.
- doGet
- 서블릿이 HTTP GET 요청을 처리하기 위해 재정의한다.
- doPost
- 서블릿이 HTTP POST 요청을 처리하기 위해 재정의 한다.
- doPut
- 서블릿이 HTTP PUT 요청을 처리하기 위해 재정의한다.
- doDelete
- 서블릿이 HTTP DELETE 요청을 처리하기 위해 재정의한다.
- HttpServlet
Form 태그를 이용한 서블릿 개발
- Form 태그
- Form 태그의 정의
- 사용자로부터 정보를 얻기 위한 데이터를 받아 들이는 폼을 구성
- 폼으로 입력된 데이터는 서블릿 또는 CGI 프로그램에서 처리
- Form의 기능
- 웹 어플리케이션의 작성의 기초가 되는 부분이며 사용자 인터페이스 제공
- 사용자로부터 텍스트 데이터를 입력받는다.
- 몇 개의 선택 사항 중 하나의 선택을 요구
- 다수개의 정보 항목들을 동시에 수집 가능
- 사용자가 입력할 수 있는 정보를 제한 가능
- Form 태그의 정의
- Form 태그 문법
- <form>~</form>
- ACTION
- 폼을 이용하여 사용자가 입력한 데이터를 처리할 서블릿 프로그램(JSP or cgi)을 지정
- METHOD
- 서블릿 프로그램에 데이터를 보내는 방법을 지정(get or post)
- NAME
- 한 페이지 내에 폼이 여러 개일 경우 각 폼마다 이름을 지정
<HTML> <BODY> <H1>회원입력정보</H1> <FORM ACTION="servlet/MemberRegister" METHOD="post"> 이름: <INPUT TYPE="text" NAME="name"> <BR> <INPUT TYPE="submit" value="입력"> <INPUT TYPE="reset" value="취소"> </FORM> </BODY> </HTML>
- Form 관련 Input 태그
- <input> 태그를 이용하여 다양한 입력 사항 결정 가능
- 태그의 type 속성 지정 가능
- TEXT
- 한 줄로 된 텍스트 필드
- SUBMIT
- 폼에 채워진 내용을 서버에게 전송
- RESET
- 폼의 입력 내용을 디폴트 설정 값으로 채우기
- PASSWORD
- 텍스트 박스에 사용자가 입력한 내용이 *로 표시
- RADIO
- 라디오 버튼
- CHECKBOX
- 체크 박스
- HIDDEN
- 화면에 표시되지 않는다. 다음 실행 프로그램에 데이터를 넘겨주기 위해 사용
- IMAGE
- 이미지 전송에 쓰인다.
- TEXT
- <input> 문법
- type
- 이 속성에 값으로 지정될 수 있는 타입은 위의 타입이 와야한다.
- name
- 입력된 데이터 구분하기 위한 이름으로써 폼데이터 서블릿 전송 http request에서 데이터 구분
- value
- 페이지가 제일 처음 브라우저에 호출될 때 기본적으로 설정하고 있는 데이터 지정
<input TYPE="gui component type" NAME="폼파라미터 이름" VALUE="디폴트 값"> </input> // ex <FORM ACTION="servlet\\MemberRegister" METHOD="POST"> 이름 : <INPUT TYPE="TEXT" NAME="name" VALUE="이름 입력“> </FORM>
- text
- 한 줄의 사용자 정보를 입력받을 수 있는 컴포넌트 표시
- submit
- 사용자가 입력한 데이터를 서블릿 프로그래밍으로 전송
- reset
- 페이지가 처음 로딩될 때의 기본 설정 값으로 되돌린다.
<HTML> <BODY> <H3>회원입력정보</H3> <FORM ACTION="servlet\\MemberRegister" METHOD="POST"> 이름: <INPUT TYPE="TEXT" NAME="name" VALUE="이름 입력"><BR> 나이: <INPUT TYPE="TEXT" NAME="age" VALUE="0"><BR> 주소: <INPUT TYPE="TEXT" NAME="address" VALUE="서울시"><BR> <INPUT TYPE="submit" value=입력> <INPUT TYPE="reset" value=취소> </FORM> </BODY> </HTML>
- type
실습
- loginForm
- loginAction
- request.getParameter(”id”, “pwd”)
- new Board(id, pwd), new BoardDAO()
- db.select(board)
- result = 3번의 리턴
- viewLogin.jsp ← /jsp:forward
- login 완료 (id: ybyb@mt.co.kr, pwd: 1111)
JSP 표준 action
JSP에서 자바 소스 코드를 삽입하기 위하여 스크립트 태그 이용
스크립트 태그 종류는 <% %>, <%! %>, <%= %>, <%@ %>이 있다.
- jsp:useBean
- Bean 객체를 생성하는 기능 제공
- 형태
<jsp:useBean id="name" scope="page|request|session|application" class="className" type="typeName"/>
- type 속성은 class 타입의 객체를 만든 후 다른 형태로 형 변환하고자 할 때 사용할 수 있다. type 값으로는 부모 클래스가 구현하고 있는 인터페이스면 가능
- ex) Employee emp = new SalesManager(); ⇒ <jsp:useBean id=“emp” scope=“page class=“SalesManager” type=“Employee”/>
- jsp:setPropertyjsp:getProperty
- Bean 객체의 set 또는 get 메소드를 호출하는 기능 제공
- 형태
<jsp:setProperty name="beanName" property="propertName" param="paramName" value="paramValueTestTest"/> <jsp:getProperty name="beanName" property="propertyName"/>
- jsp Bean 만드는 법
- 클래스 내의 멤버필드는 소문자로 시작
- public String name=””;
- 멤버필드에 값을 set하거나 get하는 메소드는 public
- public void setName(…);
- 값을 set하는 메소드의 이름은 set+대문자로 시작하는 멤버필드이름
- public void setName(…);
- 값을 get하는 메소드의 이름은 get+대문자로 시작하는 멤버필드이름
- public String getName();
- 인자가 없는 생성자 메소드를 가지고 있어야 한다. (default 생성자)
- 클래스 내의 멤버필드는 소문자로 시작
- jsp:param
- 애플릿등의 코드가 실행 시에 참조할 인자들의 이름과 값을 설정하기 위하여 쓰인다.
- 형태
<jsp:param name="paramName" value="paramValueTestTest"/> // ex) <jsp:params> <jsp:param name="paramval" value="Hello!! jsp:param" /> </jsp:params>
- jsp:forword
- 클라이언트에게서 받은 요청 정보를 다른 jsp에게 넘겨준다.
- 형태
<jsp:forword page="path"/> // ex) <jsp:forword page="path"> {<jsp:param.../>} </jsp:forword>
- jsp:include
- 다른 jsp의 실행 결과를 포함한다.
- 형태
<jsp:include page="path" flush="true"/> // ex) <jsp:include page="path" flush="true"> { <jsp:param name="name" value="value"/> } </jsp:include>
- jsp:include - 다른 자원 포함
- <%@ include file=”top.html”%>
- include 지시자는 해당 파일의 내용을 그대로 삽입한다.
- 반복적으로 나타내려는 문자들을 간단하게 삽입하려 할 때 사용한다.
- <jsp:include page=”check.jsp”/>
- <jsp: include/> action은 해당 자원의 실행 결과를 가져온다.
- <%@ include file=”top.html”%>
오늘의 실습 코드
https://github.com/yubin-im/SeSAC/tree/d8077de746641dfad220bd9ab85f971175c97a3a/20230905
728x90
'교육 (Today I Learned) > SeSAC' 카테고리의 다른 글
SeSAC 38일차 / Connection Pool, DAO, DTO (0) | 2023.09.12 |
---|---|
SeSAC 37일차 / 자바빈 (0) | 2023.09.07 |
SeSAC 35일차 / Web Application Technology (0) | 2023.09.05 |
SeSAC 34일차 / Java Script, JSP 표준 Action (0) | 2023.09.02 |
SeSAC 33일차 / Java Script (0) | 2023.09.01 |