본문 바로가기

□ 이론/기타

JSP 개념 정리

▶웹 프로그램


웹 프로그램이란, 인터넷 서비스를 이용해서 서로 다른 구성요소들(PC 등)이 통신할 수 있는 프로그램이다.

1. 브라우저 -> Web Server  (Request : 정보 요청)

2. Web Server 에서 요청에 따른 데이터 생성

3. Web Server -> 브라우저  (Response : 요청에 따른 정보 응답)



▶프로토콜


인터넷 객체 -> Web Server  (Request)

Web Server -> 인터넷 객체  (Response)

인터넷 객체 : 브라우저, 메일 등


프로토콜(Protocol) : 서로간에 통신을 하기 위한 규약으로 HTTP,FTP, SMTP, POP 등이 있다.

HTTP : 브라우저와 웹서버 사이에서 응답과 요청을 위한 프로토콜

FTP(File Transform Protocol) : 파일을 주고 받기 위한 프로토콜

SMTP : 메일을 주고 받기 위한 프로토콜



▶IP


어떤 컴퓨터의 특정 주소를 의미한다.

32비트로 이루어져있고, 8비트씩 4부분으로 나뉘어져 있다. 

각 부분은 '.'으로 구분한다.


eg) 192.168.0.1



▶DNS


도메인 네임을 IP 주소와 매핑해주는 서버

DNS 덕분에 브라우저 사용자는 IP주소 대신 도메인 네임만 알고 있으면 된다.



▶도메인 구조


http://www.google.com:80/index.html

통신규약://인터넷서비스구분.도메인:port/경로


해당 IP(도메인 네임) 서버의 포트 번호를 통해 실행 중인 특정 프로그램에 접근할 수 있다.



▶웹 프로그램의 동작 원리


1. 브라우저  ->  WebServer  ( 요청 )

2. WebServer  ->  DataBase  (query)

3. DataBase  ->  WebServer  (result)

3. 브라우저  <-  WebServer  ( 응답 )


- 웹 서버에서 응답할 데이터 (요청에 따라서 달라짐)

1. 정적인 데이터 : HTML로 응답

2. 동적인 데이터 : Web Container에서 동적 데이터를 생성하여 HTML로 만들어서 응답



▶웹 컨테이너 구조


*.jsp  ->  웹 컨테이너  (Request)

웹 컨테이너  ->  HTML  (Response)


- 웹 컨테이너 내부

*.jsp  -INPUT->*_jsp.java  -javac->  *_jsp.class  -linker->  *_jsp.obj  -OUTPUT->  HTML



▶CGI(Common Gateway Interface)


1. 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약들을 말한다.


2. 웹서버에 있어 사용자의 요구를 응용프로그램에 전달하고, 그 결과를 사용자에게 되돌려주기 위한 표준적인 방법이다.



▶Servlet


순수 java만으로 구현된 CGI(Common Gateway Interface)이다.

사용자의 요청과 웹 서버의 응답을 담당하는 내장 객체로 HttpServletRquest, HttpServletResponse가 있다.


HttpServletRquest : 사용자의 요청에 대한 정보를 가지고 있는 객체

HttpServletResponse : 웹 컨테이너의 응답에 대한 정보를 가지고 있는 객체


JSP에서도 공통된 객체를 사용한다.


- 생명주기

@PostConstruct


1. 생성

init()


2. 실행 ( doGet(), doPost() )

service


3. 종료

destroy()


@PreDestroy

웹 컨테이너는 위와 같은 순서로 메서드를 호출하도록 설계되어있다.



▶Servlet Mapping


브라우저에서 사용자의 요청에 가장 적절한 서블릿을 요청해야 함.


- 서블릿 구분 방법

1. full path

http://localhost:8090/contextRoot/servlet/com.sevlet.ServletEx     (보안 취약 / 복잡함)


2. mapping path

http://localhost:8090/contextRoot/SE


즉, /servlet/com.sevlet.ServletEx /SE로 맵핑하여 간략한 URL로 만들 수 있다.



- Mapping 방법

1. web.xml (배치 지시자/웹 환경설정 파일)을 이용한 맵핑


<servlet>

<servlet-name>HelloServlet</servlet-name>

<servlet-class>com.testPjt.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>HelloServlet</servlet-name>

<url-pattern>/hs1</url-pattern>

</servlet-mapping>


2. 애너테이션을 이용한 맵핑


package com.testPjt;


@WebServlet("/hs2")

public class HelloServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


    public HelloServlet() {

        super();

    }


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

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

PrintWriter out = response.getWriter();

out.print("<html>");

out.print("<head>");

out.print("</head>");

out.print("<body>");

out.print("<p>");

out.print("Hello Servlet");

out.print("</p>");

out.print("</body>");

out.print("</html>");

}

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

doGet(request, response);

}

}



▶JSP (Java Server Page)


html에 java코드를 삽입하여 구현한다.


- page 지시어

<% page 속성="속성값"  %>

페이지 기본 설정을 위한 태그


- include 지시어

<% include file="파일명" %>

코드 중복을 줄이고 분석을 쉽게 하도록 하기 위한 태그


- taglib 지시어

<% taglib uri="uri" prefix="네임스페이스명" %>

외부 라이브러리 태그 설정을 위한 태그



- 선언 태그

<%!    

//java의 멤버변수 또는 메서드를 선언하는 영역

int num;

 %>


- HTML 주석 태그

<!--  (사용자들에게도 노출 되므로 주의)  -->


- JSP 주석 태그

<%--  --%>


- 스크립트릿 태그

<% 

// java코드를 넣는 영역

num = 100;

%>


- 표현식 태그 

num : <%= num%>

변수 및 메서드의 반환값을 표시하기 위함



▶JSP 내장 객체


[ web.xml ]

<context-param>

<param-name>imgDir</param-name>

<param-value>/upload/img</param-value>

</context-param>


<context-param>

<param-name>testServerIp</param-name>

<param-value>127.0.0.1</param-value>

</context-param>


<context-param>

<param-name>realServerIp</param-name>

<param-value>69.0.1.7</param-value>

</context-param>


<servlet>

<servlet-name>servletEx</servlet-name>

<jsp-file>/jspEx.jsp</jsp-file>


<init-param>

<param-name>adminId</param-name>

<param-value>admin</param-value>

</init-param>

<init-param>

<param-name>adminPw</param-name>

<param-value>1234</param-value>

</init-param>


</servlet>


<servlet-mapping>

<servlet-name>servletEx</servlet-name>

<url-pattern>/jspEx.jsp</url-pattern>

</servlet-mapping>


[ jspEx.jsp ]

<%@ page errorPage = "errorPage.jsp"%>


<%!

String adminId ;

String adminPw;


String imgDir;

String testServerIp;

String realServerIp;


String connectedIp;

String connectedUser;


String str;

%>


<%

application.setAttribute("connectedIp","172.168.0.2");


getServletContext().setAttribute("connectedUser","earth");


adminID = config.getInitParameter("adminId"); // 해당 서블릿에서만 공유되는 데이터

adminPW = getServletConfig().getInitParameter("adminPw);


imgDir = application.getInitParameter("imgDir");  // context-param을 application객체로부터 가져올 수 있음

testServerIp = application.getInitParameter("testServerIp"); // context-param은 해당 APP 전체에서 공유되는 데이터


realServerIp = (String)getServletContext().getInitParameter("realServerIp");


connectedIp = (String)application.getAttibute("connectedIp");


connectedUser = (String)getServletContext().getAttibute("connectedUser");


out.print("<h1> Hello Jsp World !! </h1>");

out.print("<h2> Hello Servlet World !! </h2>");


out.print(str.toString()); // str이 초기화 되지 않았으므로 exception 발생!


%>


[ errorPage.jsp ]

<%@ page isErrorPage="true"%>


<%

response.setStatus(200); // 현재 페이지를 정상적인 페이지로 셋팅

String msg = exception.getMessage();

%>


<h1> error message : <%= msg%></h1>



▶한글 처리



1. post 방식인 경우

- Servlet

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html; charset=UTF-8");


- JSP

<% request.setCharacterEncoding("UTF-8"); %>

<%@ page language="java" 

contentType="text/html; charset=UTF-8" 

pageEncoding="UTF-8"%>


2. get방식인 경우

server.xml

<Connector URI-Encoding="UTF-8" ... /> 

<Connector 태그>에 해당 속성과 속성값을 추가해준다.

그리고 이클립스에서 서버 동기화를 한번 해주어야 적용됨.


마지막 수정 일시 : 2019.04.19. 20:55

'□ 이론 > 기타' 카테고리의 다른 글

DBMS란?  (0) 2019.06.17
데이터베이스란?  (0) 2019.05.31
JavaScript 기초 개념 정리  (0) 2019.03.29
스프링 프레임워크 기본 개념 정리  (0) 2019.03.27
[Java] 배열(array)  (0) 2019.01.06