▶웹 프로그램
웹 프로그램이란, 인터넷 서비스를 이용해서 서로 다른 구성요소들(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 |