JSP
최초 클라이언트 요청이 들어올 때 서블릿으로 변환
JSP에 작성한 소스코드는 변환 servlet의 _jspService 메소드에 들어감
JSP 문법 6가지 요소
스크립틀릿 표현식 선언부 지시자 표현식 언어 액션
스크립틀릿 : JSP 내에 자바 코드 삽입
<% %>
표현식
<%= … %> <%=total + 100 %>
선언부
<%! final static int .. %>
지시자
<%@ 지시자 %>
include 지시자
JSP페이지나 HTML을 현재 JSP 페이지의 일부로 만들기위해 주로 헤더나 푸더를 조립할 때
<%@include file=” ... .jsp”%> 정적
JSP URL맵핑은 web.xml에서
/패키지명/X.jsp
내장변수 : JSP 페이지 안에 선언을 하지 않고도 사용할 수 있는 변수
request, respones, out, application, config, pageContext, session, exception
out 변수는 출력 버퍼 사용
<%@ page buffer=”8kb” %>
out.println(cnt+”<BR>”);
response.getWriter 메소드를 호출하면 안 되는 이유
스트림 형태로 데이터를 출력하는 클래스는 송 수신측 사이에 가상 통로를 생성,
버퍼를 거치지 않고 바로 출력된다.
속성변수
pageContext, request, session, application
범위, 생명주기
pageContext
하나의 JSP 페이지 범위, 페이지 간 공유가 안됨.
request
웹 브라우저에서 요청한 하나의 트랜잭션(요청부터 응답까지)
같은 브라우저에서 새로고침 시 각각 다른 request 객체 생성
session (getSession())
브라우저 당 생성되는 객체
일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행, 클라이언트와 연결상태 유지
application (getServletContext())
웹 어플리케이션이 종료될 때 소멸, 하나의 웹 어플 안에서 어디서든 공유 가능
Query String
URL?변수1=값1&변수2=값2
req.setAttribute(“setId”, id); -> req.getAttribute(“setId”);
req.getParameter(“m”);
req.setAttribute(“id”, id); / req.getSession().setAttribute(“id”, id); / req.getServletContext.setAttribute..
Attribute : Object, Array 등 , Parameter : String 만 가능
쿠키
세션 기술 – 세션 관련 정보를 웹 서버에 저장 , Object 형
쿠키 기술 – 세션 관련 정보를 클라이언트에 저장, 텍스트 형식
쿠키
Cookie cookie = new Cookie(“id”, “kim”);
response.addCookie(cookie);
Cookie[] cookies = req.getCookies(); //가져올때
if(cookies != null){
for(Cookie coo : cookies){
coo.getName(); coo.getValue();
}
}
setMaxAge(60*60*24); -> 하루
웹 서버
웹 클라이언트로부터 HTTP 요청을 받아들이고 적절하게 응답하는 역할
웹 어플리케이션 서버 (WAS : web application server)
웹 서버 + Web Container
Web Container : Servlet ASP JSP PHP 등의 웹 언어로 작성된 웹 어플리케이션을 서버단에서 실행
- servlet과 웹 서버가 서로 통신할 수 있는 손쉬운 방법 제공
- 생명주기 관리
- 멀티쓰레딩 지원
- 보안
- JSP
Servlet : server side applet
l 웹 브라우저의 요청을 처리할 수 있는 상태의 서블릿 객체를 서블릿 이라고 함
사용자 요청 -> (처음이면) 인스턴스 생성 > init() 으로 초기화 -> 스레드 생성
HttpServletRequest
요청 유형, 쿠키, 세션 등 , HTTP 요청에 대한 인터페이스 추상화
String getParameter(String) 파라미터 값 조회
String[] getParameterValues(String) 파라미터 값 배열로 조회
HttpServletResponse
클라이언트에 응답 데이터를 보내기 위해 사용하는 객체
한글 인코딩
요청(servlet) : request.setCharacterEncoding(“UTF-8”);
응답(servlet) : response.setContentType(“text/html; charset=UTF-8”);
Servlet 초기화 파라미터 (해당 서블릿만)
목적 : 유지 보수 관점에서 변경 가능한 파라미터를 DD에 읽어 들어 사용
(web.xml)
Context 초기화 파라미터
목적 : 웹 애플리케이션을 구성하는 모든 컴포넌트 접근 가능
<servlet>
<servlet-name>helloWorld</servlet-name>
<servlet-class>com.web.servlet.HelloWorld</servlet-class>
<init-param>
<param-name> admin </param-name>
<param-value> .. </param-value>
</init-param> //대체 가능
</servlet>
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
@WebServlet(“/hello”) 대체
<context-param>
<param-name> adminEmail </param-name>
<param-value> .. </param-value>
</contexxt-param>
번거롭기 때문에 어노테이션 사용
String .. = getServletConfig().getInitParameter(“admin”); <init-param>
String .. = getServletContext().getInitParameter(“adminEmail”); <context-param>
Annotation
@WebServlet("/enrollProduct")
@WebServlet(
urlPatterns= {"/hello"},
initParams= {
@WebInitParam(name = "admin", value = "userName"),
@WebInitParam(name = "pwd", value = "1234")
}
}
불러올 떄 à String admin = getInitParameter(“admin”);
커넥션 풀
데이터베이스 커넥션 풀 (DataBase Connection Pool, DBCP)
요청마다 하나씩 Connection을 꺼내서 사용하고 사용이 끝나면 다시 Pool로 반환
getConnection
close
MVC 모델 (Model View Controller)
DTO (Data Transfer Object)
javaBean
DAO (Data Access Object)
DB 연결, 해제
Connection pool에서 connection만 가져와 연동
결과를 DTO에 삽입
Dispatcher : 클라이언트 요청을 받은 서블릿을 다른 페이지로 이동
- forward : 요청 정보를 가지고 페이지 이동 (정보가 남아있다.)
- include : 처리 흐름 제어를 잠시 특정 대상에게 넘기고 결과를 현재 페이지에 포함
Redirect
- sendRedirect : 전혀 새로운 요청 수행
- response.sendRedirect(“/service2”);
- 데이터 공유 필요할때
session, application 객체의 setAttribute 이용
ServletContext 이용
ServletContext context = request.getServletContext();
RequestDispatcher dispatcher = context.getNamedDispatcher(“servlet이름”);
= context.getRequestDispatcher(“/hello”);
dispatcher.forward(request, response);
request
RequestDispatcher dispatcher = request.getRequestDispatcher(“/service1”);
dispatcher.include(req, resp); //계속 이용 푸터 헤더, 요청 jsp로 돌아온다.
dispatcher = req.getRequestDispatcher("/footer.jsp");
dispatcher.include(req, resp);
JSP페이지에서
RequestDispatcher dispatcher = application.getRequestDispatcher(“/service2”);
<%
List<BoardDTO> list = (List<BoardDTO>) request.getAttribute("boardDto");
for(BoardDTO dto: list) {
pageContext.setAttribute("dto", dto);
%>
<tr>
<td><%=dto.getName()%></td>
<td>${dto.title}</td>
<td>${dto.writer}</td>
<td>${dto.contents}</td>
<td>${dto.regdate}</td>
<td>${dto.hit}</td>
</tr>
<%}%>
@WebServlet(“/service/*”)
public class Controller extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
DAO dao = new DAO();
ArrayList<DTO> dto = dao.select();
req.setAttribute(“DTO” ,dto);
RequestDispatcher dispatcher = req.getRequestDispatcher(“/service.jsp”);
dispatcher.forward(req, resp);
}
표준액션
별도의 라이브러리 없이 JSP 페이지에서 바로 사용 가능한 액션
액션태그
XML 기술을 이용하여 기존의 JSP 문법을 확장하는 방식
include
<jsp:include page=”/footer.jsp”/> : 동적
forward
<jsp:forward page=”next.jsp”/>
JSP 페이지에서 다른 JSP 페이지로 제어를 넘기고자 할 때
param
jsp:forward ..
<jsp:include page=”file.jsp” >
<jsp:param name=”name” value=”kim” />
</jsp:include>
[file.jsp] <%=request.getParameter(“name”) %> -> 이렇게 불러 올 수 있다.
userBean
<jsp:useBean id=”obj” class=”persistence.obj” scope=”request”/>
<jsp:setProperty name=”obj” property=”age” value=”25” />
<jsp:getProperty name=”obj” property=”age” />
JSTL ( JSP Standard Tag Library )
5개의 라이브러리
라이브러리 |
Core |
Format |
Database |
Xml |
Functions |
prifix |
c |
fmt |
sql |
x |
fn |
코어 라이브러리(c)
<c:set> 변수선언
<c:set var=”price” value=”15000” scope=”request” />
<c:if> 커스텀 액션
<c:if test=”${param.NUM1 - param.NUM2 >= 0}”>
${param.NUM1}
</c:if>
l 파라미터 접근
request.getParameter(“name”); -> ${param.name}
l 속성 접근
request.getAttribute(“member”); -> ${member}
l collection 타입
ArrayList list = (ArrayList)request.getAttribute(“list”);
list.get(0); -> ${list[“0”]}
<c:forEach>
<c:forEach var=”cnt” begin=”1” end=”10” step=”2”>
${cnt}
</c:forEach>
<c:forEach var="dto" items="${boardDto}"> //콜렉션
<tr>
<td>${dto.id}</td>
<td>${dto.title}</td>
<td>${dto.writer}</td>
<td>${dto.contents}</td>
<td>${dto.regdate}</td>
<td>${dto.hit}</td>
</tr>
</c:forEach>
<c:redirect> 다른 웹 자원 호출
<c:redirect url="/redirectGet.jsp" >
<c:param name="UserId" value="computer"/>
<c:param name="UserName" value="webMaster"/>
</c:redirect>
<c:import> 커스텀 액션 : 다른 자원을 자신의 페이지에 삽입
<c:import url=http://www.google.com//>
문자열
${fn:toUpperCase(greeting)}
'Back-end > 웹(web)' 카테고리의 다른 글
부트스트랩 활용할 수 있는 템플릿 (0) | 2020.07.29 |
---|---|
API을 이용한 책 검색 ,ajax, kakao api (0) | 2020.07.27 |
Could not publish server configuration for Tomcat v9.0 Server at localhost. Multiple Contexts have a path of "/". (0) | 2020.05.31 |
[웹] 데이터 공유와 쿠키 (0) | 2020.05.24 |
[웹] 서블릿 초기화 파라미터 (0) | 2020.05.22 |
댓글