일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- nginx
- lightsail
- 인텔리제이
- SpringBoot
- Keycloak 17.0.1
- REACT
- jpa
- arraylist
- 에러
- ES6
- JavaScript
- Flutter
- 현장학습
- 글로벌
- aws
- jsp
- 알고리즘
- 메서드
- java
- gradle
- 맥길대학교
- vue.js
- vue
- Docker
- spring
- 스프링
- jQuery
- 자바스크립트
- keycloak
- json
- Today
- Total
korean IT student
JSP- 요약하기 본문
JSP
JSP특징
-동적 웹어플리케이션 컴포넌트
-jsp확장자
-클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용
-jsp는 서블릿으로 변환되어 실행
-MVC패턴에서 view로 이용됨
MODEL Controller(servlet) view(JSP)
Servlet 특징
-동적 웹어플리케이션 컴포넌트
-java 확장자
-클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용
-java thread이용하여 동작
-MVC패턴에서 Controller
Servlet 살펴보기
요청처리객체 및 응답처리객체를 톰캣에서 받음
(HttpServleRequest request,HttpServletResponse response)
doGet()
-데이터 정보를 웹 주소 URL에 포함하여 호출하는 방식
-html내 form태그의 method속성이 get일 경우 호출 됩니다.
-웹브라우저의 주소창을 이용하여 servlet을 요청한 경우에도 호출 됩니다.
-정보 크기가 제한된다는 단점, 보안에 지장을 주지 않는 소규모 데이터 전송을 위해 많이 사용
doPost()
-header를 이용해 정보가 전송되어 보안에 강함
-html내 form태그의 method속성이 post일 경우 호출 됩니다.
-전송할 데이터를 HTTP 요청 메시지에 첨부하는 형태로 전송하는 방식
Context Path
-WAS(web application server)에서 웹어플리케이션을 구분하기 위한 path입니다.
-이클립스에서 프로젝트를 생성하면 자동으로 server.xml에 추가 됩니다.
Servlet 작동 순서
웹브라우저 -> 웹서버 -> 웹어플리케이션 서버 -> servlet 컨테이너 (스레드 생성,servlet 객체 생성)
Servlet 라이프사이클(생명주기)
-Servlet의 사용도가 높은 이유는 빠른 응답 속도 때문 입니다.
-Servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존의 객체를 재활
용된다. 따라서 동작 속도가 빠르다.
-Servlet 객체생성(최초 한번) -> Init() 호출(최초 한번) -> service(), doGet(), doPost() 호출(요청시마다)
-> destory() 호출(마지막 한번 -servlet 수정, 서버 재가동 등등 자원 해제할때..)
Servlet 선처리, 후처리
-init()호출 앞에 @PostConstruct:선처리 destroy() 호출 뒤에 @PreDestroy : 후처리
HTML form태그
-html의 form태그는 서버쪽으로 정보를 전달할 때 사용하는 태그 입니다.
- <input type="text" name="name" size="10"> 일반적인 데이터를 입력하기 위해 사용
- <input type="password" name="name" size="10"> 로그인,회원가입 페이지 등에서 비밀번호 입력하기 위해
- <input type="submit" value="전송"> 데이터를 전송
- <input type="reset" value="초기화"> 데이터를 초기화 할때
- <input type="checkbox" name="hobby" (동일) value="read" (다르게)> 여러 개 전송해야 할 때
- type =radio checkbox와 달리 여러 개의 데이터 값 중 한 개의 값만을 전송할 때 사용 checked="checked"
- <select name ="protocal"> <option value="값"> </option></select> 리스트형태의 데이터를 사용
-form 태그 <form action ="formex" (요청하는 컴포넌트 이름-join.jsp,info.html) method="post,get"(요청을 처리하는 방식)>
Servlet Parameter
- Form태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면, 해당파일(servlet)에서는 HttpServletRequest객체를 이용하여 Parameter값을 얻을 수 있다.
-관련 메소드 getParameter(name),getParameterValues(name) 값이 여러개일때 ex) checkbox ,getParameterNames() 이름들이 배열로나온다.
한글처리
-Get방식 요청 서버에 있는<server.xml 수정> Connector URIEncoding="EUR-KR" port="8181" 삽입 후 publish server 누른다
-Post방식 요청 request.setCharacterEncoding("EUC-KR");
서블릿 초기화 파라미터: ServletConfig
-특정 Servlet이 생성될 때 조기에 필요한 데이터가 있다. (특정 경로 및 아이디 정보 등) 이러한 데이터들을 초기화 파라미터라고 하며,web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용하여 접근합니다.
-web.xml파일에 초기화 파라미터 기술
1.servlet 클래스 제작
2.web.xml파일
<servlet>
<servlet-name>param</servlet-name>
<serlvet-class>위치(com.javac.hello)<servlet-class>
<init-param>
<param-name>id</param-name>
<param-value>abc</param-value>
</init-param>
</servlet>
3.servletConfig메소드 이용해서 데이터 불러오기
-string id =getlnitParameter("id");
-string pw =getlnitParameter("pw");
-Servlet 파일에 초기화 파라미터 기술
1.servlet 클래스 제작
2.@weblnitParam에 초기화 파라미터 기술
-@WebServlet(urlPatterns={"/hi"},initParams={@WebServlet(name="id,value="abcde),@WebServlet(name="pw",value="99")})
3.servletConfig메소드 이용해서 데이터 불러오기
-string id =getlnitParameter("id");
-string pw =getlnitParameter("pw");
데이터 공유:ServletContext -여러 Servlet에서 특정 데이터를 공유해야 할 경우 context parameter를 이용해서 web.xml에 데이터를 기술하고,Servlet에서 공유하면서 사용 할 수 있다.
1.servlet 클래스 제작
2.
<context-param>
<param-name>id</param-name>
<param-value>abc</param-value>
</context-param>
3.servletConfig메소드 이용해서 데이터 불러오기
-string id =getServletContext().getlnitParameter("id");
웹어플리케이션 감시 :ServletContextListener -웹어플리케이션의 생명주기를 감시하는 리스너. 리스너의 해당 메소드가 웹어플리케이션의 시작과 종료 시 호출 됩니다.(contextInitialized(),contextDestoryed());
1.리스너 클래스 제작
클래스명 implements ServletContextListener{
오버라이딩
public void contextDestoryed(ServerletContextEvent arg0){
syso("");
}
public void contextInitialized(ServerletContextEvent arg0){
syso("");
}
2.web.xml파일에 리스너 클래스 기술
<listener>
<listener-class>위치</listener-class>
</listener>
JSP 태그의 개념 이해
-servlet은 java언어를 이용하여 문서를 작성하고, 출력객체를 이용하여 HTML코드를 삽입하였다.
-jsp는 servlet과 반대로 HTML코드에 java언어를 삽입하여 동적 문서를 만든다.
HTML코드안에 java코드를 삽입하기 위해서는 태그를 이용
지시자:<%@ %> :페이지 속성
주석:<%-- --%>
선언: <%! %> :변수, 메소드 선언
표현식: <%= %> :결과값 출력
스크립트릿: <% %> :java 코드
액션태그 : <jsp:action> </jsp:action>:자바빈 연결
JSP 동작 원리
-JSP가 요청되어 응답하기까지의 과정
-클라이언트가 웹브라우저로 hello.jsp를 요청하게 되면 JSP컨테이너가 JSP파일을 Servlet파일(.java)로 변환한다. 그리고 Servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답
JSP 내부 객체
-개발자가 객체를 생성하지 않고 바로 사용할 수 있는 객체가 내부객체
-JSP에서 제공되는 내부객체는 JSP컨테이너에 의해Servlet으로 변화될 때 자동으로 객체가 생성
-입출력 객체: request, response, out 서블릿 객체:page, config 세션 객체: session 예외 객체: exception
지시자
-JSP페이지의 전체적인 속성을 지정할 때 사용, 웹 컨테이너에 전달하여 페이지의 속성이 수행되도록 기능을 지정해주는 역할
-page 해당 페이지의 전체적인 속성 지정
주로 사용되는 언어 지정 및 import문을 많이 사용
-include: 별도의 페이지를 현재 페이지에 삽입 <%@ include file ="" %>
-taglib:사용자가 만든 태그라이브러리의 태그 사용
request 객체의 이해
-웹브라우저를 통해 서버에 어떤 정보를 요청하는 것을 request라고 한다.
-getContextPath():웹어플리케이션의 컨텍스트 패스를 얻는다.
-getMethod(): get방식과 post방식을 구분할 수 있다.
-getSession():세션 객체를 얻는다.
-getProtocol():해당 프로토콜을 얻는다.
-getRequestURL():요청 url를 얻는다
-getRequestURI():요청 URI를 얻는다.
-getQueryString(): 쿼리스트링을 얻는다.
-JSP페이지를 제작하는 목적이 데이터 값을 전송하기 위해서 이므로, parameter 관련 메소드 중요!!
-getParameter(String name):name에 해당하는 파라미터 값을 구함.
-getParameterNames(): 모든 파라미터 이름을 구함
-getParameterValues(String name): name에 해당하는 파라미터값들을 구함
response 객체의 이해
-웹브라우저의 요청에 응답하는 것을 response라고 하며, 이러한 응답의 정보를 가지고 있는 객체를 response객체 라고 한다.
response.sendRedirect(URL):지정한 url로 이동
액션태그
-JSP페이지 내에서 어떤 동작을 하도록 지시하는 태그
-forward(현재의 페이지에서 다른 특정페이지로 전환할때 사용
<jsp:forward page="sub.jsp"/>
-include(현재 페이지에 다른 페이지를 삽입할 때 사용
<jsp:include page ="include02.jsp" flush="true"/>
-param(forward 및 include 태그에 데이터 전달을 목적으로 사용되는 태그)
<jsp:forward page="sub.jsp"/>
<jsp:param name ="id" value="abcdef"/>
</jsp:forward>
쿠키
-웹브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹브라우저에 응답 합니다. 그리고 서버는 웹브라우저와의 관계를 종료합니다. 연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다. 쿠기는 서버에서 생성하며, 서버가 아닌 클라이언트측에 특징 정보를 저장 합니다. 그리고 서버에 요청 할 때마다 쿠기의 속성값을 참조 또는 변경 할 수 있다.
- 쿠키생성->속성 설정 ->response객체에 쿠키 탑재
-setMaxAge(): 쿠키 유효기간을 설정
-setPath():쿠키사용의 유효 디렉토리를 설정 합니다.
-setValue():쿠키의 값을 설정 합니다.
-getMaxAge(): 쿠키 유효기간 정보를 얻습니다.
-getName(): 쿠키 이름을 얻습니다.
-getPath(): 쿠키사용의 유효 디렉토리 정보를 얻습니다.
-getValue(): 쿠키의 값을 얻습니다.
-getVersion(): 쿠키 버전을 얻습니다.
ex) <%Cookie cookie = new Cookie("이름","value값 넣기");
cookie.setMaxAge(60*60); 1시간동안 쿠키 유지
response.addCookie(cookie); 쿠키를 탑재 시킨다
%>
<a href="cookieget.jsp">cookie get</a>
세션
-세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단
-쿠키와 달리 클리이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재 따라서 세션은 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없다.
-세션은 클라이언트의 요청이 발생하면 자동생성 됩니다, session이라는 내부 객체를 지원하여 세션의 속성을 설정 할 수 있다.
-setAttribute(): 세션에 데이터를 저장한다ex) id,1234
-getAttribute(): 세션에 데이터를 얻습니다
-getAttributeNames(): 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻습니다.
-getld(): 자동 생성된 세션의 유니크한 아이디를 얻습니다.
-isNow(): 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분
-getMaxinactivelnterval():세션의 유효기간을 얻는다
-removeAttribute(): 세션에서 특정 데이터 제거
-invalidate(): 세션의 모든 데이터를 삭제
예외 페이지
-page지시자를 이용한 예외 처리
<%@ page errorPage ="errorPage.jsp"%> -> <%@ page isErrorPage ="true"%>
<% response.setStatus(200);%>
html - <%=exception.getMessage()%>
-web.xml파일을 이용한 예외 처리
<error-page>
<error-code>404</error-code> 404에러가 나면 404 에러 페이지로 가라
<location>/error404.jsp</location>
</error-page>
자바 빈
-게시판의 글 정보나 회원정보와 같이 웹 서비스에서 여러 종류의 데이터가 하나의 정보를 구성할 때 각 데이터를 관리하기 위해 제작하는 클래스이다.
-다양한 데이터를 한 번에 관리 및 활용하기 위해 제작하는 클래스
-빈이란 반복적인 작업을 효율적으로 하기 위해 빈을 사용, JAVA언어의 데이터(속성)와 기능(메소드)으로 이루어진 클래스. jsp페이지를 만들고, 액션태그를 이용하여 빈을 사용 한다. 그리고 빈의 내부 데이터를 처리 합니다.
-데이터 객체에는 데이터가 있어 그에 해당하는 getter와 setter가 있다. 빈을 만든다는 것은 데이터 객체를 만들기 위한 클래스를 만드는 것 이다.
-빈 관련 액션 태그(useBean, setProperty, getProperty) 주로 데이터를 업데이트하고, 얻어오는 역할을 한다.
-useBean 특정 Bean을 사용한다고 명시 할 때 사용
<jsp:useBean id="student" class="com.javalec.ex.Student" scope="page/>
빈 이름 클래스 이름 스코프 범위
-Scope
page:생성된 페이지 네에서만 사용 가능
request:요청된 페이지 내에서만 사용 가능
session:웹브라우저의 생명주기와 동일하게 사용 가능
application:웹 어플리케이션 생명주기와 동일하게 사용 가능
-setProperty 데이터 값을 설정 할 때 사용
<jsp:setProperty name="student" property="name" value="홍길동"/>
빈 이름 속성 이름 속성(데이터) 값
-getProperty 데이터 값을 가져올 때 사용
<jsp:getProperty name="student" property="name" />
DAO, DTO
-DAO (Data Access Object) 데이터 베이스에 접속해서 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스, 일반적인 jsp 혹은 servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용한다.
-DTO (Data Transfer Object) -DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 해당 데이터의 클래스를 만들어 사용
순수한 데이터 객체이며 속성과 그 속성에 접근하기 우한 getter, setter 메소드만 가진 클래스를 말한다.
PreparedStatement
-setString() 메서드는 문자열 타입의 데이터를 SQL문 물음표에 넣어준다는 의미이며 메서드 내 첫번째 입력 파라미터 숫자는 SQL문의 물음표를 지칭
-이러한 위치 표시자를 사용하여 값을 추후에 따로 지정하는 형태로 SQL문을 사용하므로, 여러 개의 동적인 변수를 통한 값의 할당이 한결 쉬워진다는 장점!!
커넥션 풀(Connection Pool)
-JDBC를 통한 데이터베이스 연결의 성능을 향상시키기 위해 사용하는 일반적인 방식
1.웹 어플리케이션 내 데이터베이스 관련 작업이 수행되어야 할 경우 커넥션 풀에서 미리 생성되어 있는 커넥션을 빌려온다.
2.커넥션 풀로부터 받아온 커넥션을 통해 데이터베이스 관련 작업을 수행한다.
3. 데이터베이스 관련 작업 수행이 끝나면 커넥션을 반환한다.
-Connection 인스턴스 생성 및 종료에 관련된 처리 시간이 필요치 않아 웹 서비스의 성능 향상에 도움 -> 일반적으로 대부분 사용제작
EL(Expression Language)
- 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어
- <%=value%> ->&{value}
- <jsp:getProperty name="member" property="name"/>
-> ${mamber.name}
-%{param.ParamName}
FrontController 패턴
-클라이언트의 다양한 요청을 한곳으로 집중시켜, 개발 및 유지보수에 효율성을 극대화 한다.
Command 패턴
-클라이언트로부터 받은 요청들에 대해서, 서블릿이 작업을 직접 처리 하지 않고, 해당 클래스가 처리하도록 합니다.
MVC패턴
-Model2 MVC에서 Model, View 그리고 Controller가 모두 모듈화 되어 있는 형태
-Model은 데이터베이스와의 관계를 담당, 클라이언트의 요청에서 필요한 자료를 데이터베이스로부터 추출하거나, 수정하여 Controller로 전달 합니다.
-View는 사용자한테 보여지는 UI 화면, 주로 .jsp파일로 작성 하며, Controller에서 어떤 View 컴포넌트를 보여줄지 결정 한다.
-Controller는 클라이언트의 요청을 받고, 적절한 Model에 지시를 내리며, Model에서 전달된 데이터를 적절한 View에 전달
-이렇게 작업을 분할하면, 추후 유지보수에 좋다.
1.설계
2. 데이터베이스 테이블 만들기
3.FrontController 만들기
4. Command 만들기
5.DTO(Data Transfer Object) 만들기 -데이터베이스의 데이터 DTO객체 만들기
6.DAO(Data Access Object) 만들기 -데이터 베이스에 연결하여 필요한 로직을 수행하는 DAO클래스 만들기
7.view 페이지 만들기
'front-end > JSP' 카테고리의 다른 글
JSP - <input type ="hidden"> (0) | 2019.05.20 |
---|---|
JSP - 내장객체(request 객체, response 객체) (0) | 2019.05.19 |
JSP -EL태그와 JSTL태그 정리 (0) | 2017.12.24 |
JDBC 프로그래밍의 작성 순서 및 구현 (0) | 2017.07.26 |
JDBC 연동하기 (0) | 2017.07.23 |