웹_프론트_백엔드/JAVA프레임윅기반_풀스택

2020.05.19

shine94 2020. 5. 19. 09:05

** 웹프로그래밍?
 : 웹어플리케이션을 만드는 행위

** 웹어플리케이션이란? 
 : 웹을 기반으로 동작하는 프로그램을 의미

** 웹?
 : 인터넷 서비스의 형태 의미

** 인터넷?
 : 하나 이상의 네트워크가 연결되어 있는 형태를 의미

 

1.  JAVA 웹

 : JAVA플랫폼(JavaSE, JavaEE, JavaME)중에서 JavaEE를 이용한 웹프로그래밍

 

[상식!] 오라클이 JAVA플랫폼 중의 JavaEE를 아파치에 팔았으나 이름은 팔지 않았기 때문에

         자바라는 이름 대신 jakarata를 사용하고 있다고 한다. 

 

 

2. 웹프로그램의 동작
웹 브라우저 -> request -> webServer -> WebApplicationServer -> 데이터베이스
웹 브라우저 <- response <- webServer <- WebApplicationServer <- 데이터베이스

 

[웹서버] 클라이언트의 요청에 의해 정보를 제공해 주는 서버(Aphache, IIS)
** 별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청
[웹브라우저] 웹서에 정보를 요청하고, 웹서버로 부터 정보를 받는 매개체(HTTP 프로토콜을 사용)

 

 

3. JSP(Java Server Page)

 : 웹 서비스를 위한 인터넷 프로그래밍 언어

 

[특징] 
1) 플랫폼에 독립적이다.

2) 소프트웨어의 재사용성이 증가된다.

3) 안정적이며 수행 속도가 향상된다.

 : 처음에 한번만(JSP컨테이너에 의해 컴파일이 되고 서블릿 코드로 변환), 하나의 요청마다 쓰레드를 생성

4) 디자인 부분과 프로그램 부분의 분리가 가능하다.

5) J2EE(Java 2 Enterprise Edition)의 진입로이다.

 

 

4. 서블릿의 동작순서

 : 웹브라우저 > [웹서버 >  웹어플리케이션 서버] > 서블릿 컨테이너(스레드 생성, servlet 객체 생성)
                     [웹서버 >  웹어플리케이션 서버] :  톰켓이 이 역할을 하고 있음

 

 

5. Servlet과 기존 CGI 차이점

1) CGI는 로딩과 초기화 작업을 진행하기 때문에 서버에 대한 오버헤드가 크고

   서블릿은 한번 메모리에 로딩되어 수행되면 작업이 모두 수행되어 끝나더라도 메모리에서 해제되지 않는다(재활용)

   [오버헤드(overhead)] 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.

2) 특정 웹 서버에 비의존적이다.
   Java 언어로 구현되는 프로그램이기 때문에 플랫폼(운영체제)과는 무관한 실행 파일을 만들 수 있다.   
3) 서블릿은 멀티 스레드로 동작한다.
   Servlet은 CGI처럼 웹브라우저로 부터의 요청에 대해 각각의 프로세스를 생성하지 않는다.

 

 

6. Servlet의 생명 주기(life 사이클)
   Servlet 객체 생성(생성자 호출) : 최초 한 번

   > init() 호출 : 최초 한 번

   > service(), doGet(), doPost() 호출 : 요청시 매 번

   > destroy() 호출(객체 소멸) : 마지막 한 번

 

 

7. form 태그, 서블릿 
1) 데이터 보내기

** HTML 문서에서 서버로 데이터 보낼때(submit)는 반드시 <form> 안에 있는 form element를 이용해야 가능함

** GET방식과 POST 방식이 있다.(기본값 GET방식)

** HTML 의 name attribute 가 있어야 parameter 에 value 를 담아 전송 가능

 

2) post 방식의 서블릭에서 폼데이터 처리하기 
** 서블릿의 doPost() 에서 처리 
** getParameter(name), Parameter의 값을 1개만 구함(값이 여러 개일 경우일 때도 1개만 가능), String 리턴
** getParameterValues(name), Parameter의 값을 모두 구함, String[] 리턴
** getParameterNames(), 웹 브라우저가 전송한 이름을 모두 구함(name attribute를 모를때), Eumeration 리턴
** getParameterMap(), 웹 브라우저가 전송한 Parameter의 Map을 모두 구함, Map <name : name-value> 리턴

 

 

8. 톰캣에서의 한글 처리 문제

 : 톰캣서버의 default 문자 처리 방식은 ISO-8859-1 방식이기 때문에
   한글 인코딩 작업을 해주지 않으면 한글이 깨진다. 

1) get 방식

 : 서버 stop하기

> Servers > Tomcat v9.0 Server at localhost-config

> server.xml에서 <Connector>에 URIEncoding="utf-8" 추가하기(추가 이후 서버 재시작)  

> Connector에 URIEncoding="utf-8" 추가 완료...!!


2) post 방식

 : doPost메소드 내에서 설정, request.setCharacterEncoding("utf-8"); 추가하기

 

 

9. 서블릿 초기화

 : 특정 Servlet이 생성될때 초기에 필요한 데이터(아이디 정보, 특정경로)들을 초기화 하는 것

 

방법 1. 초기화 파라미터(서블릿이 생성될때 필요한 데이터)는 web.xml에 기술

          ServletConfig 인터페이스를 이용해서 초기화 파라미터 사용이 가능 

** 마치 key-value 쌍 처럼 초기화 파라미터를 정의, 복수 개 정의 가능

 <servlet>
  	<servlet-name>ServletInit</servlet-name>
  	<servlet-class>com.lec.servlet.InitServlet</servlet-class>
  	<init-param>
  		<param-name>id</param-name>
  		<param-value>test</param-value>
  	</init-param>
  	<init-param>
  		<param-name>pw</param-name>
  		<param-value>1234</param-value>
  	</init-param>
  	<init-param>
  		<param-name>local</param-name>
  		<param-value>seoul</param-value>
  	</init-param>
  </servlet>

 

** ServletConfig의 getInitParameter() 메소드 사용(HttpServlet 클래스는 ServletConfig를 상속받은 클래스)

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
	// Ctrl + T : 클래스 족보 확인
	// ServletConfig 의 메소드를 사용.
	String id = getInitParameter("id");
	String pw = getInitParameter("pw");
	String local = getInitParameter("local");
		
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
		
	out.println("id : " + id + "<br>");
	out.println("pw : " + pw + "<br>");
	out.println("local : " + local + "<br>");
		
	out.close();

}

 

방법 2. 초기화 파라미터를 Servlet 파일에 직접 기술

import javax.servlet.annotation.WebServlet;
import javax.servlet.annotation.WebInitParam;

@WebServlet(
	urlPatterns = {"/InitS"},
	initParams = {
		@WebInitParam(name="id", value="test11"),
		@WebInitParam(name="pw", value="1000"),
		@WebInitParam(name="local", value="Pusan")
	}
)

 

 

10. Context
 : 웹어플리케이션 서버(WAS)는 여러 개의 웹어플리케이션들이 탑재된다.

   그리고, 각 웹어플리케이션은 여러 개의 서블릿들이 동작한다.  

 

   [WAS [ App1 [Servlet_A Servlet_B Servlet_C ...] : 여기에 있는 Servlet의 컨텍스트는 App1임 
   [WAS [ App2 [Servlet_A Servlet_B Servlet_C ...] : 여기에 있는 Servlet의 컨텍스트는 App2임
   [WAS [ App3 [Servlet_A Servlet_B Servlet_C ...] : 여기에 있는 Servlet의 컨텍스트는 App3임

 


11. Context Path (컨텍스트 패스)

 : WAS(Web Application Server)에서 웹어플리케이션을 구분하기 위한 path를 말한다.

   현재 수업시간에 사용하는 WAS는 톰켓이며

   이클립스에서는 프로젝트를 서버에 Add 할 때마다 자동으로 server.xml에 입력한다.

 

 

12. Context Path 변경

 : 서버 Stop 상태에서 server.xml에서 Context Path 변경하기

 

 

13. HTML 에서의 경로명 / 의미는 domain 이후의 경로
     서블릿에서의 경로명 / 의미는 context path 이후의 경로

 

 

14. JSP와 서블릿
1) 서블릿 
** Java 코드로 만들어짐
** HTML 코드를 출력하기 위해서는  PrintWriter 객체를 사용 필요(즉, Java 코드 안에 HTML이 있는 형태)
** MVC 모델에선 (주로) Controller의 역할

 

2) JSP 
** HTML 코드 내에 Java코드가 있는 형태 
** MVC 모델에선 (주로) View의 역할
** 내부적으로 JSP는 서블릿으로 변환된 뒤에 컴파일 후 실행

** <% %> 태그 안에 Java코드 삽입 가능

** Java 코드는 서버 쪽에서 처리가 된 뒤에 결과물만 클라이언트에게 보임

 

15. JSP --parse--> 서블릿 클래스 *.java --컴파일--> *. class  --인스턴스--> 객체 --초기화--> 서블릿 생성

 : 최소에 jsp가 요청될 때 전부 진행하며 이후에는 jsp가 요청될때마다 서블릿 생성만 진행

 

 

16. JSP 태그 종류
1) 지시자(Directive) 태그 <%@ %> 페이지에 대한 정보를 나타내는 태그

 : page 지시자 <%@ %> info , contentType, pageEncoding, import, errorPage, isErrorPage, … ,
   include 지시자<%@ %> 현재 jsp 페이지에 다른 jsp 페이지나 html 파일을 불러와서 현재페이지의 일부로 사용,
   taglib 태그 라이브러리 지시자<%@ %> 액션을 사용할때 필요한 지시자

 

2) 스크립팅 요소 태그(스크립트릿, 익스프레션, 선언부)
 : 스크립트릿<% %> 자바코드, 
   익스프레션식 <%= %> 결과값(평가값),
   선언부<%! %> 변수나 메소드 선언

 

3) 주석태그 <%-- --%>

 

4) 액션태그

 

 

17. 내부 객체(Implicit Object), 내장 객체
 : 객체를 생성하지 않고 바로 사용할 수 있는 객체를 의미 

 

** JSP에서 제공되는 내부객체는 JSP 컨테이너에 의해 Servlet으로 변환될 때 자동으로 객체가 생성  

 

** 입출력 객체

request - doGet, doPost 메서드의 첫번째 파라미터와 동일 한 역할
response - doGet, doPost 메서드의 두번째 파라미터와 동일 한 역할
out - 웹브라우저로 HTML코드를 출력하는 기능(javax.servlet.jsp.jspWriter)

 

** 서블릿 객체 
page - JSP 페이지로 부터 생성된 서블릿
config - JSP 페이지의 구성 정보를 가져오는 기능

 

** 세션 객체  
session -세션과 관련된 기능


** 예외 객체   
exception - 예외처리와 관련된 기능

 

** request 객체 : 사용자(클라이언트)의 요청을 관리하는 객체
getContextPath() - 웹 어플리케이션의 컨텍스트 패스를 얻어올 때 사용하는 메소드
getMethod() - get방식과 post방식을 구분하기 위해서 사용하는 메소드
getSession() - 세션 객체를 얻을 때 사용하는 메소드
getProtocol() - 해당 프로토콜을 얻어올 때 사용하는 메소드
getRequestURL() - 요청한 URL을 얻어올 때 사용하는 메소드
getRequestURI() - 요청 URI를 얻어올 때 사용하는 메소드
getQueryString() - 쿼리스트링 얻습니다.

** request 객체 :  parameter 관련 메소드
getParameter(String name) - name에 해당하는 파라미터의 값을 구할 때 사용
getParameterValues(String name) - name에 해당하는 파라미터의 값들을 얻어올 수 있다.(반환타입은 배열) 
getParameterNames() - 모든 파라미터의 이름을 얻어 올 때 사용한다.

** response 객체 
getCharacterEncoding() - 응답할 때 문자 인코딩을 얻어올때
addCookie(Cookie) - 쿠키를 지정할 때
sendRedirect(URL) - 이동하고자 하는 URL을 지정할 때

 

 

18. 익스프레션식<%= %>은 ;(세미콜론) 사용 불가

 

 

19. 액션 태그
 : jsp 페이지 내에서 어떤 동작을 하도록 지시하는 태그를 의미한다.

 

** 웹컨테이너에서 실행되는 태그


** 결과만 웹브라우저에 전달되어 출력

 

 

20. 액션 태그 종류
1) 표준 액션(standard action) : jsp 페이지에서 바로 사용할 수 있는 액션 
2) 커스텀 액션(custom action) : 별도의 라이브러리를 설치해서 사용하는 액션

 

[실습 코드]

1. JSP04_ServletLifeCycle

** ServletCycle 서블릿

package com.lec.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Cycle")
public class ServletCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
      
    // 서블릿 생성자, 첫 request 발생시 최초 단 한 번 생성
    public ServletCycle() {
        super();
        System.out.println("서블릿 생성");
    }
    
    // 서블릿 객체 생성 이후(직후), 최초 단 한 번 생성
    @Override
    public void init() throws ServletException {
    	System.out.println("init 호출");
    	
    }

    // 서블릿 객체 소멸시, 서버가 종료될때 실행, 마지막 한 번
    @Override
    public void destroy() {
    	System.out.println("destroy 호출");
    }

    
    // ‘요청’ 시 매번
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        System.out.println("doGet 호출");
    }

    // ‘요청’ 시 매번
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        System.out.println("doPost 호출");
    }
	
    // ‘요청’ 시 매번
    @Override
    public void service(ServletRequest req, ServletResponse res) 
            throws ServletException, IOException {
    System.out.println("service() 호출");
    }

}

 

 

2. JSP05_ServletForm

** form.html

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>서블릿_폼</title>
</head>
<body>
	<!-- action="FormOk" : http://localhost:8082/JSP05_ServletForm/FormOk -->
	<form action="FormOk" method="post">
		<input type="hidden" name="data1" value="alpha">
		<input type="hidden" name="data2" value="beta">
		Name: <input type="text" name="name" size="15" /><br /> 
		ID: <input type="text" name="id" size="15" /><br /> 
		PassWord: <input type="password" name="pw" size="15" /><br /> 
		취미 : <input type="checkbox" name="hobby" value="sports" /> 
		스포츠 <input type="checkbox" name="hobby" value="tour" /> 
		여행 <input type="checkbox" name="hobby" value="movie" /> 
		영화감상 <input type="checkbox" name="hobby" value="hiking" /> 등산<br /> 
		성별 :<input type="radio" name="gender" value="man" />
		남성 <input type="radio" name="gender" value="woman" />여성<br /> 
		<select name="local">
			<option value="sel">서울</option>
			<option value="kwang">광주</option>
			<option value="busan">부산</option>
			<option value="kang">강릉</option>
		</select><br /> <br />
		<br />
		메모: <textarea rows="5" cols="10" name="memo"></textarea>
		
		<br /> 
		<input type="submit" value="전송" /> 
		<input type="reset" value="초기화" />
	</form>
</body>
</html>

 

** ServletForm 서블릿

package com.lec.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/FormOk")
public class ServletForm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ServletForm() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());
		
		// request.getParameterNames()
		// : 웹 브라우저가 전송한 파라미터의 이름을 구함
		//   java.util.Enumeration 리턴
		System.out.println("getParameterNames() 사용");
		Enumeration<String> names =request.getParameterNames();
		while(names.hasMoreElements()) {
			String paramName = names.nextElement();
			String paramValue = request.getParameter(paramName);
			System.out.println(paramName + " : " + paramValue);
		}
		
		// getParameterMap()
		// : 웹 브라우저가 전송한 파라미터의 Map을 구함 
		//   Map은 <Parameter name, Parameter value[]>쌍으로 구성
		//   java.util.Map 리턴
		System.out.println();
		System.out.println("getParameterMap() 사용");
		Map<String, String[]> paramMap = request.getParameterMap();
		for(String key : paramMap.keySet()) {
			System.out.println(key + " : " + Arrays.toString(paramMap.get(key)));
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		// post 방식
		// 한글을 사용하고 싶다면 한글 인코딩 처리 우선!!
		request.setCharacterEncoding("utf-8");
		
		// getParameter(name)은  String 리턴, 이때 name 값은 대소문자 구분! 주의 요망
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		
		String name = request.getParameter("name");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		// getParameterValues(name)는 String[] 리턴, 이때 name 값은 대소문자 구분! 주의 요망
		String[] hobbys = request.getParameterValues("hobby");
		
		String gender = request.getParameter("gender");
		String local = request.getParameter("local");
		String memo = request.getParameter("memo");
		
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head></head>");
		out.println("<body>");
		
		out.println("hidden: " + data1 + ", " + data2 + "<br>");
		out.println("이름: " + name + "<br>");
		out.println("아이디: " + id + "<br>");
		out.println("비밀번호: " + pw + "<br>");
		
		out.println("취미: " + Arrays.toString(hobbys) + "<br>");
		out.println("성별: " + gender + "<br");
		out.println("지역: " + local + "<br>");
		out.println("메모: " + memo + "<br>");
		
		out.println("</body>");
		out.println("</html>");
		
		out.close();
		
		// request.getParameterNames() 
		// : 웹 브라우저가 전송한 파라미터의 이름을 구함
		//   java.util.Enumeration 리턴
		System.out.println("getParameterNames() 사용");
		Enumeration<String> names =request.getParameterNames();
		while(names.hasMoreElements()) {
			String paramName = names.nextElement();
			String paramValue = request.getParameter(paramName);
			System.out.println(paramName + " : " + paramValue);
		}
		
		// getParameterMap()
		// : 웹 브라우저가 전송한 파라미터의 Map을 구함 
		//   Map은 <Parameter name, Parameter value[]>쌍으로 구성
		//   java.util.Map 리턴
		System.out.println();
		System.out.println("getParameterMap() 사용");
		Map<String, String[]> paramMap = request.getParameterMap();
		for(String key : paramMap.keySet()) {
			System.out.println(key + " : " + Arrays.toString(paramMap.get(key)));
		}
	}

}

 

 

3. JSP06_ServletinitParam

** initServlet 서블릿

package com.lec.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 방법2: Servlet 파일에 초기화 파라미터를 직접 기술하는 방법
//		1) Servlet 클래스 작성
//		2) @WebInitParam 에 초기화 파라미터를 작성
//			import javax.servlet.annotation.WebInitParam;
//		3) ServletConfig의 메소드를 이용해서 데이터를 사용(접근)
//		   ServletConfig의 getInitParameter()메소드를 이용해서 접근할 수 있다.
@WebServlet(urlPatterns = {"/InitS"},
initParams = {
		@WebInitParam(name="id", value="test11"),
		@WebInitParam(name="pw", value="1000"),
		@WebInitParam(name="local", value="Pusan")
})
public class InitServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public InitServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		// Ctrl + T : 클래스 족보 확인
		// ServletConfig 의 메소드를 사용.
		String id = getInitParameter("id");
		String pw = getInitParameter("pw");
		String local = getInitParameter("local");
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("id : " + id + "<br>");
		out.println("pw : " + pw + "<br>");
		out.println("local : " + local + "<br>");
		
		out.close();

	}

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

}

 

** WebConent > WEB-INF > web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>JSP06_ServletinitParam</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  

	<!-- web.xml에 초기화 파라미터 기술하는 방법
		 1) Servlet 클래스 작성
		 2) web.xml에 초기화 파라미터를 입력
		 3) ServletConfig 의 메소드를 이용해서 데이터를 사용(접근)
		    ServletConfig의 getInitParameter()메소드를 이용해서 접근할 수 있다.
	-->
	<!--
	<servlet>
		<servlet-name>ServletInit</servlet-name>
		<servlet-class>com.lec.servlet.InitServlet</servlet-class>
	 	
		<init-param>
	 		<param-name>id</param-name>
	 		<param-value>test</param-value>
	 	</init-param>
	 	
	 	<init-param>
	 		<param-name>pw</param-name>
	 		<param-value>1234</param-value>
	 	</init-param>
	 	
	 	<init-param>
	 		<param-name>local</param-name>
	 		<param-value>seoul</param-value>
	 	</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>ServletInit</servlet-name>
		<url-pattern>/SI</url-pattern>
	</servlet-mapping>
	-->

</web-app>

 

 

4. JSP07_ServletContext

** ContextPath 서블릿

package com.lec.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ConPath")
public class ContextPath extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ContextPath() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		// URL : Uniform Resource Locator
		StringBuffer url = request.getRequestURL();
		
		// URI : Uniform Resource Identifier
		String uri = request.getRequestURI();
		
		// Context Path : 웹어플리케이션을 구분하기 위한 path를 말함(톰캣이 WAS)
		String conPath = request.getContextPath();
		
		// domain 추출하기
		String url_domain = request.getScheme() + "://" + request.getServerName()
			+ " : " + request.getServerPort();
		// 물리적인 servletContextName, context Path가 아니다
		ServletContext context = request.getServletContext();
		String ServletContextName = context.getServletContextName();
		
		PrintWriter out = response.getWriter();
		response.setContentType("text/html; charset=utf-8");
		out.println("<hr>");
		out.println("URL: " + url + "<br>");
		out.println("URI: " + uri + "<br>");
		out.println("ContextPath: " + conPath + "<br>");
		out.println("URL_domein: " + url_domain + "<br>");
		out.print("Servlet ContextName : " + ServletContextName + "<br>");
		out.close();
	}

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

}

 

** ServletContextEx 서블릿

package com.lec.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SCEx")
public class ServletContextEx extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ServletContextEx() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String id = getServletContext().getInitParameter("id");
		String pw = getServletContext().getInitParameter("pw");
		String local = getServletContext().getInitParameter("local");
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("id : " + id + "<br>");
		out.println("pw : " + pw + "<br>");
		out.println("local : " + local + "<br>");
		
		out.close();
	}

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

}

 

** ContextEx 서블릿

package com.lec.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CL_Ex")
public class ContextEx extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ContextEx() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		System.out.println("App START ~~ ");
	}

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

}


** MyListener implements ServletContextListener

package com.lec.servlet;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {
	
	// 웹어플리케이션(컨텍스트) 종료할때 호출
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("JSP07 어플리케이션 종료");
	}
	
	// 웹어플리케이션(컨텍스트) 시작할때 호출
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("JSP07 어플리케이션 시작");
	}

}

 

** WebContent > WEB-INF > web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>JSP07_ServletContext</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <context-param>
  	<param-name>id</param-name>
  	<param-value>test33</param-value>
  </context-param>
  <context-param>
  	<param-name>password</param-name>
  	<param-value>1234</param-value>
  </context-param>
  <context-param>
  	<param-name>local</param-name>
  	<param-value>kwangju</param-value>
  </context-param>
  
  
  <!-- 리스너 등록 -->
  <listener>
  	<listener-class>com.lec.servlet.MyListener</listener-class>
  </listener>
  
</web-app>

 

 

5. JSP08_TagDirective

** tagEx.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<%
	int sum = 0;
	for(int cnt = 1; cnt <= 100; cnt++) {
		sum += cnt;
	}
%>
1부터 10 까지의 합은 : <%= sum %>
<hr>
<h3>오늘의 식단</h3>
	- 비빔밥<br>
	- 개구리밥<br>
	- 스폰지밥<br>
<%@ include file = "test.jsp" %>
</body>
</html>

 

** test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.util.*" %>
<% GregorianCalendar today = new GregorianCalendar(); %>
<%= String.format("%ty년 %ty월 %td일", today, today, today) %>

 

** sample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import = "java.sql.*" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<style>

</style>
<%
	Connection conn = null;
	Statement stmt = null;

%>
<%!
	final String SQL_SELECT = "";
%>
</head>
<body>

<button onclick="">버튼이다</button>

</body>
</html>

 

 

6. JSP09_ImplicitObject

** test_out.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>out</title>
</head>
<body>
<%--
<%
	int i = 0;
	while(true){
		i++;
		out.println("5 * " + i + " = " + 5 * i + "<br>");
%>
		-------- <br>
<%		
		if(i >= 9) break;
	}
%>
--%>
 
<%!  // <- 선언부 태그 : 변수 선언, 메소드 정의
	int i = 100;
	String str = "test";
	
	public int hap(int a, int b){
		return a + b;
	}
	
%> 

<%  // 스크립트릿
	out.println("i = " + i + "<br>");
	out.println("str = " + str + "<br>");
	out.println("hap = " + hap(2, 10));
%>
<hr>
<%--익스프레션 식으로 작성 --%>
i = <%= i %><br>
str = <%= str %><br>
hap = <%=hap(2, 10) %><br>

</body>
</html>

 

** test_request.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<%
	out.println("서버: " + request.getServerName() + "<br>");
	out.println("포트 : " + request.getServerPort() + "<br>");
	out.println("요청방식 :" + request.getMethod() + "<br>");
	out.println("프로토콜 :" + request.getProtocol() + "<br>");
	out.println("URL :" + request.getRequestURL() + "<br>");
	out.println("URI :" + request.getRequestURI() + "<br>");
	out.println("ContextPath :" + request.getContextPath() + "<br>");
	out.println("쿼리문자열: " + request.getQueryString() + "<br>");
%>

</body>
</html>

 

** Form.html

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>서블릿_폼</title>
</head>
<body>
	<form action="test_request_param.jsp" method="post">
		<input type="hidden" name="data1" value="alpha">
		<input type="hidden" name="data2" value="beta">
		Name: <input type="text" name="name" size="15" /><br /> 
		ID: <input type="text" name="id" size="15" /><br /> 
		PassWord: <input type="password" name="pw" size="15" /><br /> 
		취미 : <input type="checkbox" name="hobby" value="sports" /> 
		스포츠 <input type="checkbox" name="hobby" value="tour" /> 
		여행 <input type="checkbox" name="hobby" value="movie" /> 
		영화감상 <input type="checkbox" name="hobby" value="hiking" /> 등산<br /> 
		성별 :<input type="radio" name="gender" value="man" />
		남성 <input type="radio" name="gender" value="woman" />여성<br /> 
		<select name="local">
			<option value="sel">서울</option>
			<option value="kwang">광주</option>
			<option value="busan">부산</option>
			<option value="kang">강릉</option>
		</select><br /> <br />
		<br />
		메모: <textarea rows="5" cols="10" name="memo"></textarea>
		
		<br /> 
		<input type="submit" value="전송" /> 
		<input type="reset" value="초기화" />
	</form>
</body>
</html>

 

** test_request_param.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.util.Arrays" %>   
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<%!
	String data1, data2;
	String name, id, pw, gender, local, memo;
	String[] hobbys;
%>
<%
	request.setCharacterEncoding("utf-8");

	// getParameter에 없는 name이 오면 null 출력
	data1 = request.getParameter("data1").trim();
	data2 = request.getParameter("data2").trim();
	name = request.getParameter("name").trim();
	
	id = request.getParameter("id").trim();
	pw = request.getParameter("pw").trim();
	gender = request.getParameter("gender").trim();
	local = request.getParameter("local").trim();

	hobbys = request.getParameterValues("hobby");
 	memo = request.getParameter("memo").trim();
%>

hidden : <%= data1 %>, <%= data2 %><br>
이름 ; <%= name %><br>
아이디 :<%= id %> <br/>
비밀번호 :<%= pw %><br/>
성별 :<%= gender %><br/>
취미 :<%= Arrays.toString(hobbys) %><br/>
지역 :<%= local %><br/>
메모 :<%= memo %>

</body>
</html>

 

** input_age.html

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>response내장객체</title>
</head>
<body>
	<!-- 기본값은 Get 방식 -->
	<form action="test_response.jsp">
		당신의 나이를 입력하세요<br/>
		<input type="text" name="age" size=4/><br/>
		<input type="submit" value = "전송"/>	
	</form>
</body>
</html>

 

** test_response.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<%! int age; %>
<% 
	String str = request.getParameter("age");
	age = Integer.parseInt(str);
	
	if(age >= 19) {
		response.sendRedirect("adult.jsp?age=" + age);
	} else {
		response.sendRedirect("underage.jsp?age=" + age);
	}
%>

 

** adult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>성인용 페이지</title>
</head>
<body>
<%! int age; %>
<%
	String str = request.getParameter("age");
	age = Integer.parseInt(str);
%>

당신은 <%= age %>세 입니다.
성인이군요..!! 사이트를 이용하실 수 있습니다...<br>
<a href="input_age.html">처음으로</a>
</body>
</html>

 

** underage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>미셩년자 페이지</title>
</head>
<body>
<%! int age; %>
<%
	String str = request.getParameter("age");
	age = Integer.parseInt(str);
%>

당신은 <%= age %>세 입니다.
사이트 이용이 불가합니다..!!<br>
<%= (19 - age) %> 년 뒤에 다시 오세요<br>
<a href="input_age.html">처음으로</a>
</body>
</html>

 

** version.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>version</title>
</head>
<body>
<h3>버젼확인</h3>

<!-- 
	서블릿, JSP, 톰캣 버젼 확인  : 내장객체사용
	[중요!] 앞의 대문자 JspFactory 이면 클래스, getEngineInfo() 이면 static 메소드
			앞의 소문자 application이고 getServerInfo(), getMajorVersion() 이면 내장객체..!!
-->
 - 서버 : <%=application.getServerInfo() %> <br>
 - 서블릿 : <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %><br>
 - JSP : <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>
</body>
</html>

 

 

7. JSP10_ActionTag

** forward.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>forward</title>
</head>
<body>

<!-- Action Tag -->
<!-- URL 그래로 forward 유지, 나머지는 sub.jsp로 변경됨 -->
<h3>지금의 페이지는 forward 페이지 입니다.</h3>
<jsp:forward page="sub.jsp"/>
<p>위 라인의 내용은 sub 페이지의 내용입니다</p>

</body>
</html>

 

** param.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>param</title>
</head>
<body>
<!-- Action Tag -->
<h2>현재 페이지는 param 페이지</h2>
<%
	int num = 788;
%>
<jsp:forward page="subParam.jsp">
	<jsp:param value="test123" name="id"/>
	<jsp:param value="<%= num %>" name="pw"/>
</jsp:forward>

<p>위 라인의 내용은 subParam 의 내용입니다.</p>

</body>

 

** subParam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>subParam</title>
</head>
<body>
<%! String id, pw; %>
<%
	id = request.getParameter("id");
	pw = request.getParameter("pw");
%>
<p>현제 페이지는 subParam</p>
아이디: <%= id %><br>
비밀번호: <%= pw %><br>

</body>
</html>

 

** include.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import= "java.net.*" %>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>include</title>
</head>
<body>

<!-- Action Tag -->
<h3>지금의 페이지는 include 페이지 입니다.</h3>
<jsp:include page="sub.jsp"/>
<p>위 라인의 내용은 sub 페이지의 내용입니다</p>

<hr>
<!-- Directive -->
<h3>지금의 페이지는 include 페이지 입니다.</h3>
<%@ include file = "sub.jsp" %>
<p>위 라인의 내용은 sub 페이지의 내용입니다</p>

<hr>
<%!
	// 변수 선언
	String name = "홍길동";
	int age = 33;
%>

<!-- include file 에러 안남 -->
<%@ include file="sub2.jsp" %>
<!-- jsp:include 에러 남 -->
<%--<jsp:include page="sub2.jsp"/>--%>

<jsp:include page="sub3.jsp">
	<jsp:param value='<%= URLEncoder.encode(name, "utf-8") %>' name="name"/>
	<jsp:param value='<%= age %>' name="age"/>
</jsp:include>

</body>
</html>

 

** sub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>sub</title>
</head>
<body>

<h4>현재 페이지는 sub 페이지 입니다.</h4>

</body>
</html>

 

** sub2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

이름: <%= name %><br>
나이: <%= age %><br>

 

** sub3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import= "java.net.*" %>

<%
	String name = URLDecoder.decode(request.getParameter("name"), "utf-8");
	String age = request.getParameter("age");
%>

이름: <%= name %><br>
나이: <%= age %><br>

'웹_프론트_백엔드 > JAVA프레임윅기반_풀스택' 카테고리의 다른 글

2020.05.21  (0) 2020.05.21
2020.05.20  (0) 2020.05.20
2020.05.18  (0) 2020.05.18
프론트엔드 웹 페이지 제작하기(5.8 ~ 5.17)  (0) 2020.05.18
2020.05.15  (0) 2020.05.15