😀form 창의 정보들은 모두 String으로 저장됨
😀 enc - workspace 등 UTF-8로 변환
😀 widow - web browser : chrome
😀서버만들기 :
1. file- new- other - server - tomcat9.0 - browse(tomcat파일)
2. server.xml - 63번줄 - port번호 8787로 변경 (db port번호도 8080으로 같아서 톰캣을 변경해주는거
😀프로젝트 만들기
1. dynamic web project만들기
2. 바로 finish로 만들지 말고 next 눌러서 해당 체크박스 체크하기 (web.xml을 이용해서 여러개를 동시에 mapping하려고)
# 웹 프로그래밍
- 웹 프로그래밍이란? ==> 웹 애플리케이션을 만드는 행위.
- 웹 애플리케이션이란? ==> 웹을 기반으로 동작하는 프로그램을 말함.
즉, 클라이언트는 자신이 사용하는 클라이언트
프로그램을 직접 설치하는 것이 아니라, 사용자
컴퓨터의 웹 브라우저를 통하여 화면에 해당되는
HTML 문서를 서버에 요청을 하면 서버에서 요청
받은 HTML 문서를 브라우저에 전송하여 해당
기능을 담당하는 화면을 보여주게 됨.
※ 웹 기반으로 처리되는 순서
1. 클라이언트에서 처리할 데이터를 입력 후 서버에 전송을 함.
2. 서버는 화면에서 입력한 데이터를 전송을 받고 처리를 함.
3. 처리 결과를 웹 브라우저로 전송을 하여 결과를 클라이언트에게 보여 줌.
==> 웹 기반 프로그램의 경우 사용자가 사용하는 프로그램의 기능이나 화면이
바뀌면 서버에서 모두 처리를 함. 따라서 클라이언트가 특별히 수행할
기능은 없게 됨. 또한 모든 기능을 서버에서 처리를 하기 때문에
보안 면에서도 좋음.
- 웹 이란? ==> 인터넷 서비스의 형태를 말함.
- 인터넷이란? ==> 하나 이상의 네트워크가 연결되어 있는 형태를 말함.
# 웹 프로그래밍의 핵심 구성 요소
- 웹 서버란? ==> 각 클라이언트에게 서비스를 제공하는 컴퓨터를 말함.
웹 서버는 컨텐츠(HTML, CSS, JavaScript)를
제공하는 서버.
- 웹 애플리케이션 서버(WAS)? ==> DB 조회나, 어떤 로직을 처리해야
하는 동적인 컨텐츠를 제공하는
서버를 말함.
- 클라이언트? ==> 네트워크 서버에 접속한 후 서버로부터 서비스를
제공받는 컴퓨터를 말함.
- HTTP 프로토콜 ==> Hyper Text Transfer Protocol 의
약자로 www 서비스를 제공하는 통신 규약을
말함. HTML을 비롯해서 이미지, 동영상, XML
문서 등 다양한 데이터를 주고받을 때 사용하는
일종의 규칙임.
즉, 웹 서버와 클라이언트는 이 프로토콜을
이용하여 정보를 주고 받음.
- HTML ==> Hyper Text Markup Language의 약자로 www 서비스를
제공하기 위한 표준 언어임.
- JavaScript ==> HTML 웹 페이지의 여러가지 동적인 기능을 제공하는
스크립트 언어임.
- CSS ==> HTML 문서에서 서체나 색상, 정렬 등 세부적인 HTML 페이지의
디자인에 관련된 여러 가지 기능을 제공함.
- 정적 웹 프로그래밍? ==> 처리 결과를 웹 브라우저로 전송만 하면 됨.
하지만 새로운 정보를 제공하려면 관리자가 HTML
페이지에서 해당 정보가 표시되는 곳을 찾아 정보를
수정한 후해당 정보를 클라이언트에게 제공해야 함.
- 동적 웹 프로그래밍? ==> 클라이언트의 요청이 있을 때마다 데이터베이스에
접근해서 실시간 정보를 클라이언트에게 제공하는
기능을 처리하는 방식을 말함.
# CGI(Commons Gateway Interface) 방식
- 요청에 대한 프로그램을 처리하는 방식.
- 클라이언트의 요청에 대하여 독립된 프로세스를 생성하여 처리하는 방식.
- 다수의 클라이언트가 요청 시 다수 개의 프로세스를 매번 메모리에 로딩.
- 요청이 발생할 때마다 매번 메모리에 프로그램을 로딩하기 때문에 동시
접속자 수가 많아질수록 이에 비례하여 프로그램 실행을 위한 메모리도
증가하게 됨. 따라서 서버의 부하가 발생할 수 있음.
- 주로 사용되는 언어 : C++
# 애플리케이션 서버 방식
- 요청에 대한 프로그램을 처리하는 방식.
- 다수의 클라이언트가 요청 시 한 개의 프로세스를 메모리에 로딩.
- 동시접속자 수가 많아지더라도 한 개에 해당하는 메모리를 사용하기
때문에 즉, 스레드 방식으로 처리하기 때문에 CGI 방식에 비해서
메모리 사용량이 적음. 따라서 서버의 부하를 줄여줄 수 있음.
- 주로 사용되는 언어 : ASP, PHP, JSP
# Servlet?
- 정적인 웹 페이지의 문제점을 보완하여 나온 것이 동적인 웹 페이지를 구현하는
JSP임. 하지만 사실 동적인 웹 페이지를 처음으로 구현한 것은 JSP가 아님.
- 초기에 동적인 웹 페이지를 구현한 것은 서블릿(Servlet) 이었음.
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를
제공하는 자바 클래스임.
- 서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두
가지고 있음.
- 서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을
수행한 후 웹 브라우저에게 결과를 전송함.
- 서버에서 실행되기 때문에 보안과 관련된 기능도 훨씬 안전하게
수행이 가능함.
※ 서블릿의 특징.
1. 서버 쪽에서 실행되면서 기능을 수행함.
2. 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공.
3. 스레드 방식으로 실행이 됨.
4. 자바로 만들어져서 자바의 특징(객체 지향)을 가짐.
5. 서블릿 컨테이너에서 실행됨.
6. 컨테이너 종류에 상관 없이 실행됨(플랫폼 독립적).
7. 보안 기능을 적용하기 쉬움.
8. 웹 브라우저에서 요청 시 기능을 수행함.
- 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을
관리 해주는 것이 필요한데, 이러한 역할을 하는 것이 바로 서블릿 컨테이너임.
즉, 서블릿을 '요구사항 명세서'라고 표현한다면, 서블릿 컨테이너는
그 명세서를 보고 개발하는 '개발자'임.
서블릿 컨테이너는 Clinet의 Request(요청)를 받아주고 Response(응답)
할 수 있게, 웹 서버와 소켓을 만들어 통신을 함.
대표적으로 무료 서비스인 Tomcat(톰캣)이 있음.
톰캣은 웹 서버와 소켓을 만들어 통신하며 JSP(java server page)와
Servlet이 작동할 수 있는 환경을 제공함.
name-> 변수명
😀 form에서 작성한 정보가 action="LoginServlet" 으로 해 둠으로써 LoginServlet으로 정보가 넘어감
이때 name에 선언된 데이터를 변수로하여 'String 변수 = 입력창 값' 이 넘어감
LoginServelt에서는 doGet이나 doPost 메서드를 통해 정보를 받는데
request객체에서 getParameter 메서드를 통해 변수를 받고 역시 string 값으로 저장됨
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// form 태그에 method="get"이라고 적혀 있는 경우나
// method 속성이 안 적혀진 경우 doGet() 메서드에서 처리
}
😀form
method="get 또는 post"
action => 사용자의 요청이나 데이터를 전송하는 기능
<input type="text" name="userId">
텍스트박스에 입력된 아이디를 userId라는 변수에 저장하여 LoginServlet으로 전송하라는 의미를 가지고 있음
만약에 텍스트박스의 아이디 입력창에 "hong"이라고 입력을 하면,
String userId = "hong" 이라고 저장이 되어 LoginServlet으로 정보가 넘어가게 됨
😀Servlet : 입력창에서 온 내용을 가공하는 공간이라고 생각
주소창에 뜨는거 방지하기 위해서 action = "별칭" 을 주고
서블릿 만들 때 URL mappings에서 별칭으로 수정하여 주소창에 뜨는 내용을 속일 수 있음
/*
* request 매개변수
* - 사용자(클라이언트)의 요청에 대한 정보를 처리.
* - 클라이언트로부터 Servlet으로 요청이 들어오게 되면,요청 파라미터라는 것이 같이 오게 되는데 이것에 대한
* 분석은 request.getParamenter() 라는 메서드를 이용하여 파악을 함.
*
* response 매개변수
* - 사용자의 요청 정보에 대한 처리 결과를 클라이언트에 응답하여 처리.
* - 요청을 파악을 했다면 클라이언트로 내보낼 응답을 작성해야 함.
* 대부분의 웹 프로그래밍은 응답을 텍스트로 작성하며, 이 텍스트는 대부분 HTML 페이지 모양을 하고 있게 됨.
* - 여기서 응답은 텍스트를 기록해야 하는데, 이 때 스트림이라는 개념을 이용하여 기록을 하게 됨.
* 말 그대로 데이터의 흐름이라고 생각하면 됨.
* Servlet에서는 클라이언트쪽으로 보내는 데이터의 흐름을 건드려야 할 필요가 있게 됨.
* - response 인자를 활용하면 응답과 관련된 많은 작업들을
* 할 수 있음. 응답 스트림에 텍스트를 기록하는 것도 가능함.
* 이 작업을 하기 위해서는 response.getWriter() 라는
* 메서드를 사용하면 됨. 해당 메서드를 이용하여 응답으로
* 내보낼 출력 스트림을 얻어낸 후에 출력 스트림에 텍스트를
* 기록하면 됨.
*/
😀
// 응답은 response 객체를 이용함
// 클라이언트로 응답 시 한글을 작성을 하면 한글이 깨져서 나오는 현상이 발생함
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
😀 미리 쓰고 시작! (요청한 정보가 한글이 있으면 한글 깨짐 방지 설정)
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
😀@ ==> 애노테이션
<%-- 서블릿 매핑 방법 2가지
1. 배포서술자(web.xml)에 등록
- 매핑할 서블릿이 많은 경우 일괄 처리 용이함
- web.xml 파일에 등록
2. 애노테이션 등록
- Servlet 클래스 URL-mapping에 등록
- 1:1 방식으로 등록
- 설정 파일이 필요가 없음
※ Servlet 매핑 목적
- 처리 프로그램을 url에서 숨기는게 목적임
==> 파일명과 폴더명(패키지)까지 숨김
- 보안 을 목적으로 숨김
--%>
1. 배포서술자
WebContent - WEB-INF - web.xml 맨 아래에서 바로 위에 아래와 같이 만들기
<!-- 서블릿 매핑 방법 -->
<servlet>
<servlet-name>abc</servlet-name> <!-- 아무거나 써도 됨 -->
<servlet-class>khie.Adder1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name> <!-- 위에썼던 name과 동일하게 작성 -->
<url-pattern>/adder1</url-pattern> <!-- Servlet이름 -->
</servlet-mapping>
<!-- adder1이 오면 khie.Adder1Servlet로 데이터를 보내줘라 -->
/* 서블릿에서 클라이언트의 요청을 얻는 방법
* - HttpServletRequest 클래스에서 <form> 태그로 전송된 데이터를 받아오는데 사용하는 메서드.
* * getParameter(String name) => <form> 태그의 name 속성에 들어간 변수명을
* 받아서 사용을 함. 반환형은 String 타입임.
* * getParameterValues(String name) => 같은 name에 대하여 여러 개의 값을
* 얻을 때 사용함. 반환형은 String[] 타입임.
*
* 서블릿에서 요청 받은 내용을 처리하여 클라이언트에 보내는 방법
* 1. HttpServletResponse 클래스를 이용하여 응답을 함.
* 2. doGet()이나 doPost() 메서드 안에서 처리함.
* 3. javax.servlet.http.HttpServletResponse 객체를 이용함.
* 4. setContentType() 메서드를 이용하여 클라이언트에게 전송할
* 데이터의 종류(MIME-TYPE)를 지정함.
* 5. 클라이언트(웹 브라우저)와 서블릿의 틍신은 자바 I/O의 스트림을 이용함.
*
*
* 서블릿 생명 주기(Life Cycle)
* Servlet 객체 생성 → init() 메서드 호출 → service(), doGet(), doPost() 메서드 호출 → destroy() 메서드 호출
* (최초 한 번) (최초 한 번) (요청 시 매번) (마지막 한 번)
*
* - init() : 서블릿 요청 시 맨 처음 한 번만 호출됨.
* 서블릿 생성 시 초기화 작업을 주로 진행을 함.
* - doGet() / doPost() : 서블릿 요청 시 매번 호출됨.
* 실제로 클라이언트가 요청하는 작업을 수행함.
* - destory() : 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출이 됨.
* 서블릿의 마무리 작업을 주로 수행을 함.
* - 서버(서블릿)에서 웹 브라우저로 데이터를 전송할 때에는 어떤 종류의 데이터를 전송하는지 웹 브라우저에게 알려 주어야 함.
* => 이유 : 웹 브라우저가 전송 받을 데이터의 종류를 미리 알고 있으면 더 빠르게 처리할 수 있기 때문임.
* - 데이터 종류(MIME-TYPE) : 톰캣 컨테이너에서 미리 제공하는 여러 가지 전송 데이터 종류를 하나 지정하여 웹 브라우저로 전송.
* 이처럼 톰캣 컨테이네에서 미리 설정해 놓은 데이터의 종류들을 말함.
* 웹 브라우저는 기본적으로 HTML만 인식하므로 서블릿에서 전송하는 대부분의 데이터는
* MIME-TYPE을 "text/html"로 설정을 함.
* - 서블릿이 클라이언트(웹 브라우저)에 응답하는 과정.
* * setContentType()을 이용해서 MIME-TYPE을 지정함.
* * 데이터를 출력할 PrintWriter 객체를 생성함.
* * 출력 데이터를 HTML 형식으로 만듬.
* * PrintWriter 객체의 print()나 println() 메서드를 이용해 데이터를 출력함.
*
*
* 웹 브라우저에서 서블릿으로 데이터를 전송하는 전송 방식(2가지)
* 1. get 방식
* - 서블릿에 데이터를 전송할 때는 데이터가 url 뒤에 name=value 형태로 전송이 됨.
* - 여러 개의 데이터를 전송할 때는 '&'로 구분하여 전송이 됨.
* - 보안이 취약함.
* - 전송할 수 있는 데이터는 최대 255자.
* - 기본 전송 방식이고 사용이 쉬움.
* - 웹 브라우저에 직접 입력해서 전송할 수도 있음.
* - 서블릿에서는 doGet() 메서드에서 전송된 데이터를 처리함.
*
* 2. post 방식
* - 서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 head 영역에 숨겨진 채 전송이 됨.
* - 보안에 유리함.
* - 전송 데이터의 용량이 무제한임.
* - 처리 속도가 get 방식보다 느림.
* - 서블릿에서는 doPost() 메서드에서 전송된 데이터를 처리함.
*/
😀
// 유효성 검사
function validate() {
if(frm.id.value == "") {
alert("아이디를 입력하세요");
frm.id.focus();
return false;
}
if(frm.pwd.value == "") {
alert("비밀번호를 입력하세요");
frm.pwd.focus();
return false;
}
frm.method = "post";
frm.action = "login";
frm.submit();
}
<form name="frm">
😀
// trim() : 공백(띄어쓰기)를 없애주는 메서드
String userId = request.getParameter("id").trim();
String userPwd = request.getParameter("pwd").trim();
'JSP' 카테고리의 다른 글
23.03.16 (EL, JSTL[c:, fmt:] (0) | 2023.03.16 |
---|---|
23.03.15 DBCP (0) | 2023.03.15 |
23.03.07 (0) | 2023.03.07 |
댓글