본문 바로가기
Web & Mobile/JSP

Lecture 54 - JSP(12) 세션, SSO, 로그인, 로그아웃, 서블릿, get, post, 동이름입력받아주소출력

by Bennyziio 2019. 5. 31.
반응형

클라이언트와의 대화 2 : 세션
서버세션을 사용하면 클라이언트의 상태를 저장할 수 있다. 쿠키와의 차이점은 세션은 웹 브라우저가 아니라 서버에 값을 저장한다는 점이다. 서버는 세션을 사용해서 클라이언트 상태를 유지할 수 있기 때문에, 로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용한다.

세션 사용하기 : session 기본 객체
웹 브라우저에 정보를 보관할 때 쿠키를 사용한다면, 세션은 웹 컨테이너에 정보를 보관할 때 사용한다. 세션은 오직 서버에만 생성된다.

웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다. 위 그림과 같이 JSP1과 JSP2가 세션을 사용한다고 한 경우 웹 브라우저 1이 JSP1과 JSP2를 실행하면, 웹 브라우저 1과 관련된 세션 1을 사용한다. 웹 브라우저 2가 JSP1과 JSP2를 실행하면 웹 브라우저 2와 관련된 세션 2를 사용한다. 즉, 같은 JSP 페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용한다.

웹 브라우저마다 세션이 따로 존재하기 때문에, 세션은 웹 브라우저와 관련된 정보를 저장하기에 알맞은 장소이다. 즉, 쿠키가 클라이언트 측의 데이터 보관소라면 세션은 서버측의 데이터 보관소인 것이다. 쿠키와 마찬가지로 세션도 생성을 해야만 정보를 저장할 수 있다. 일단 세션을 생성하면 session 기본 객체를 통해서 세션을 사용할 수 있다.

세션 생성하기
JSP에서 세션을 생성하려면 다음과 같이 page 디렉티브의 session 속성을 "true"로 지정하면 되는데 Default값이 TRUE이기 때문에 굳이 안써도 무방하다.

session 기본 객체
세션을 사용한다는 것은 session 기본 객체를 사용한다는 것을 말한다. session 기본 객체는 request 기본 객체와 마찬가지로 속성을 제공하므로 setAttribute(), get Attribute() 등의 메서드를 사용하여 속성값을 저장하거나 읽어올 수 있다. 추가로 세션은 세션만의 고유 정보를 제공한다.

SessionEx.sessioninfo

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %>
<%@ page import = "java.text.SimpleDateFormat" %>
<%
	Date time = new Date();
	SimpleDateFormat formatter = 
			new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
%>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<title>Insert title here</title>
</head>

<body>
세션ID: <%=session.getId() %> <br />
<%
	time.setTime(session.getCreationTime());
%>
	세션생성시간:<%=formatter.format(time) 
%> <br />
<%
	time.setTime(session.getLastAccessedTime());
%>
최근접근시간:<%=formatter.format(time) %>

</body>

</html>

SessionEx.makeSession

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- makeSession.jsp -->    
<%
	session.setAttribute("data1", "value 1");
	session.setAttribute("data2", "value 2");
	
	response.sendRedirect("./viewSession.jsp");
%>

SessionEx.viewSession

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

<!-- viewSession.jsp -->    
<%
	String data1 = (String)session.getAttribute("data1");
	String data2 = (String)session.getAttribute("data2");
		
	out.println("data1 : " + data1 + "<br />");
	out.println("data2 : " + data2 + "<br />");
%>

viewSession 실행

makeSession 실행

SessionEx.makeSession - Arraylist 사용

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- makeSession.jsp -->
<%@ page import="java.util.ArrayList" %>
<%
	session.setAttribute("data1", "value 1");
	session.setAttribute("data2", "value 2");
	
	ArrayList<String> lists = new ArrayList<>();
	lists.add("사과");
	lists.add("수박");
	lists.add("딸기");
	
	session.setAttribute("data3", lists);
	
	response.sendRedirect("./viewSession.jsp");
%>

SessionEx.viewSession - Arraylist 사용

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

<!-- viewSession.jsp -->    
<%
	String data1 = (String)session.getAttribute("data1");
	String data2 = (String)session.getAttribute("data2");
		
	out.println("data1 : " + data1 + "<br />");
	out.println("data2 : " + data2 + "<br />");
	
	ArrayList<String> lists
		= (ArrayList)session.getAttribute("data3");
	for(String data : lists) {
		out.println(data + "<br />");
	}
%>

SSO : Single Sign On

https://terms.naver.com/entry.nhn?docId=3432036&cid=58437&categoryId=58437

세션 종료
: 세션을 유지할 필요가 없으면 session.invalidate() 메서드를 사용해서 세션을 종료한다. 세션을 종료하면 현재 사용 중인 session 기본 객체를 삭제하고 session 기본 객체에 저장했던 속성 목록도 함께 삭제한다.

세션 유효 시간
: 세션은 최근 접근 시간을 갖는다. session 기본 객체를 사용할 때마다 세션의 최근 접근 시간은 갱신된다. getLastAccessedTime()이란 메서드를 사용하면 최근에 session 기본 객채에 접근한 시간을 나타낸다. JSP 페이지가 session 기본 객체를 사용하도록 설정했다면 웹 브라우저가 JSP 페이지를 실행할 때마다 session 기본 객체에 접근하게 된다. 이 말은 세션을 사용하도록 설정된 JSP 페이지에 접근할 때마다 세션의 최근 접근 시간을 변경한다는 것을 의미한다.
세션은 마지막 접근 이후 일정 시간 이내에 다시 세션에 접근하지 않는 경우 자동으로 세션을 종료하는 기능을 갖고 있다. 세션 유효 시간이 30분이라고 가정하면 마지막 접근 시간에서 30분이 지나면 자동으로 세션을 종료하고, 이후 세션을 요청하면 새로운 세션을 생성한다.

세션 유효 시간은 두 가지 방법으로 설정할 수 있다. 첫 번째는 WEB-INF/web.xml 파일에 <session-config> 태그를 사용하여 세션 유효 시간을 지정하는 방법이 있다.

<session-timeout> 태그 값을 세션의 유효 시간으로 사용한다. 이 값의 단위는 분이다. 위 코드는 세션 타임아웃 시간을 50분으로 지정하고 있다.

두번째 방법은 session 기본 객체가 제공하는 setMaxInactiveInterval() 메서드를 사용하는 것으로 세션의 유효 시간을 60분으로 지정하고 싶다면 setMaxInactiveInterval() 메서드를 사용하면 된다.
web.xml 파일에서 분 단위로 유효 시간을 설정했던 반면 session.setMaxInactiveInterval() 메서드는 초 단위로 유효 시간을 설정한다.

세션을 이용하여 로그인, 로그아웃 메소드 작성

SessionEx.loginCheck

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- loginCheck.jsp -->
<%
	request.setCharacterEncoding("utf-8");

	String id = request.getParameter("id");
	String password = request.getParameter("password");
	
	String uId = "tester";
	String uPassword = "123456";
	
	int flag = 1;
	if(id.equals(uId) && password.equals(uPassword)) {
		flag = 0;
		
		session.setAttribute("aId", id);
		session.setAttribute("aGrade", "B");
	}
	
	out.println("<script type='text/javascript'>");
	if(flag == 0) {
		out.println("alert('로그인되었습니다.');");
		out.println("location.href='loginSuccess.jsp';");
	} else {
		out.println("alert('로그인에 실해했습니다.');");
		out.println("history.back()");
	}
	out.println("</script>");
%>

SessionEx.loginForm

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- loginForm -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<title>Insert title here</title>
</head>

<body>

<form action="./loginCheck.jsp" method="post">
아이디 <input type ="text" name="id" />
비밀번호 <input type="password" name="password" />
<input type="submit" value="로그인" />
</form>

</body>

</html>

SessionEx.loginSuccess

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- loginSucess.jsp -->
<%
	String aId = (String)session.getAttribute("aId");
	String aGrade = (String)session.getAttribute("aGrade");
	
	if(aId == null || aGrade == null) {
		out.println("<script type='text/javascript'>");
		out.println("alert('로그인되지 않았습니다.');");
		out.println("location.href='loginForm.jsp';");
		out.println("</script>");
	} else {
		out.println("아이디 : " + aId + "<br />");
		out.println("등급 : " + aGrade + "<br />");
		
		out.println("<a href='./logOut.jsp'>로그아웃</a>");
	}
%>

SessionEx.logOut

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

<%
	session.invalidate();

	out.println("<script type='text/javascript'>");
	out.println("alert('로그아웃 되었습니다.');");
	out.println("location.href='loginForm.jsp';");
	out.println("</script>");
%>

서블릿 기초
: 서블릿은 JSP 표준이 나오기 전에 만들어진 표준으로 자바로 웹 어플리케이션을 개발할 수 있도록 하기 위해 많들어졌다. 서블릿을 이용하면 자바 클래스를 이용해서 웹 어플리케이션을 개발하게 된다. 일반적인 서블릿의 개발 과정은 다음과 같다.

서블릿을 사용하려면 HttpServlet이란 클래스를 상속받아야 한다.
이를 상속받았다면, 처리하고자 하는 HTTP 방식(method)에 따라 알맞은 메서드를 재정의해서 구현해야 한다.

web.xml로 매핑하기
: 서블릿 클래스를 생성했다면, 그 다음으로 할 작업은 WEB-INF 폴더의 web.xml 파일에 서블릿 클래스를 등록하는 것이다.

ServletEx01 다이나믹 웹 프로젝트를 만들때 위와 같이 web.xml을 generate해줘야 한다.

servlet1이란 패키지를 하나 만들어준다.

위와 같이 상속받을 class를 만들어 준다

ServletEx01.ServletEx01

package servlet1;

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

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

public class ServletEx01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx01.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx01</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet1.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
</web-app>

HTTP 각 방식별 구현 메서드
: HTTP는 GET, POST, HEAD, PUT, DELETE의 방식을 지원하는데 일반적으로 사용되는 그리고 웹 브라우저가 지원하는 방식은 GET과 POST이다. 

ServletEx01.ServletEx02

package servlet1;

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

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

public class ServletEx02 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// Get 방식의 요청일 때 실행되는 부분
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Get 방식 요청");
		out.println("</body>");
		out.println("</html>");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// Post 방식의 요청일 때 실행되는 부분
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Post 방식 요청");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx01.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx01</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet1.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>ex02</servlet-name>
  	<servlet-class>servlet1.ServletEx02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex02</servlet-name>
  	<url-pattern>/servlet02</url-pattern>
  </servlet-mapping>
</web-app>

ServletEx01.form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- form.jsp -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<title>Insert title here</title>
</head>

<body>
<form action="./servlet02" method="get">
<input type="submit" value="get 요청" />
</form>

<br /><br />

<form action="./servlet02" method="post">
<input type="submit" value="post 요청" />
</form>
</body>

</html>

ServletEx01.form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- form.jsp -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<title>Insert title here</title>
</head>

<body>
<form action="./servlet02" method="get">
아이디 <input type="text" name="id" />
<input type="submit" value="get 요청" />
</form>

<br /><br />

<form action="./servlet02" method="post">
아이디 <input type="text" name="id" />
<input type="submit" value="post 요청" />
</form>
</body>

</html>

ServletEx01.ServletEx02

package servlet1;

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

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

import org.apache.catalina.connector.Request;

public class ServletEx02 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// Get 방식의 요청일 때 실행되는 부분
		
		String id = req.getParameter("id");
		
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Get 방식 요청 : " + id);
		out.println("</body>");
		out.println("</html>");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// Post 방식의 요청일 때 실행되는 부분
		
		req.setCharacterEncoding("utf-8");
		
		String id = req.getParameter("id");
		
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Post 방식 요청 : " + id);
		out.println("</body>");
		out.println("</html>");
	}
}

URL 패턴 매핑 규칙
: <servlet-mapping> 태그는 <url-pattern> 태그를 사용해서 서블릿과 URL을 매핑하고, @WebServlet의 경우 urlPatterns 속성을 이용해서 서블릿과 URL을 매핑한다는 내용을 앞에서 살펴봤고 이 절에서 <url-pattern> 태그와 urlPatterns 속성에서 사용할 수 있는 URL 패턴이 어떻게 서블릿과 매핑되는지 살펴보자.

서블릿 규약에 따르면, URL 패턴은 다음 규칙에 따라 서블릿을 매핑한다.

ServletEx02.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/*</url-pattern>
  	<!--
  		<url-pattern>/servlet01</url-pattern> 
  		<url-pattern>/servlet02</url-pattern>
  	 -->
  </servlet-mapping>
</web-app>

ServletEx02.ServletEx01

package servlet;

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

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

public class ServletEx01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet");
		out.println("</body>");
		out.println("</html>");
	}
}

<url-pattern>/*</url-pattern> 으로 인하여 servlet1이든 10이든 추가하면 자동적으로 ServletEx01을 따라 실행된다.

ServletEx02.ServletEx01

package servlet;

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

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

public class ServletEx01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet<br />");
		out.println(arg0.getRequestURI() + "<br />");
		out.println("</body>");
		out.println("</html>");
	}
}

URI값도 자동적으로 따라 가는 것을 확인할 수 있다.

ServletEx02.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/dir1/sub1/*</url-pattern>
  	<!-- <url-pattern>/*</url-pattern> -->
  	<!--
  		<url-pattern>/servlet01</url-pattern> 
  		<url-pattern>/servlet02</url-pattern>
  	 -->
  </servlet-mapping>
</web-app>

ServlexEx02.web - 파일 지정

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/dir1/sub1/test01.do</url-pattern>
  	<!-- <url-pattern>/dir1/sub1/*</url-pattern> -->
  	<!-- <url-pattern>/*</url-pattern> -->
  	<!--
  		<url-pattern>/servlet01</url-pattern> 
  		<url-pattern>/servlet02</url-pattern>
  	 -->
  </servlet-mapping>
</web-app>

ServletEx02.web - 네이버 지정

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/dir1/test01.naver</url-pattern>
  	<url-pattern>/dir1/test02.naver</url-pattern>
  	<!-- <url-pattern>/dir1/sub1/test01.do</url-pattern> -->
  	<!-- <url-pattern>/dir1/sub1/*</url-pattern> -->
  	<!-- <url-pattern>/*</url-pattern> -->
  	<!--
  		<url-pattern>/servlet01</url-pattern> 
  		<url-pattern>/servlet02</url-pattern>
  	 -->
  </servlet-mapping>
</web-app>


ServletEx02.web - 귀찮으니 한방에

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>*.naver</url-pattern>
  	<!-- 
  		<url-pattern>/dir1/test01.naver</url-pattern>
  		<url-pattern>/dir1/test02.naver</url-pattern>
  	 -->
  	<!-- <url-pattern>/dir1/sub1/test01.do</url-pattern> -->
  	<!-- <url-pattern>/dir1/sub1/*</url-pattern> -->
  	<!-- <url-pattern>/*</url-pattern> -->
  	<!--
  		<url-pattern>/servlet01</url-pattern> 
  		<url-pattern>/servlet02</url-pattern>
  	 -->
  </servlet-mapping>
</web-app>

아래 표를 참고하여 예제를 진행

ServletEx02.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/foo/bar/*</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex02</servlet-name>
  	<servlet-class>servlet.ServletEx02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex02</servlet-name>
  	<url-pattern>/baz/*</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex03</servlet-name>
  	<servlet-class>servlet.ServletEx03</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex03</servlet-name>
  	<url-pattern>/catalog</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex04</servlet-name>
  	<servlet-class>servlet.ServletEx04</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex04</servlet-name>
  	<url-pattern>*.bop</url-pattern>
  </servlet-mapping>
</web-app>

ServletEx01

package servlet;

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

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

public class ServletEx01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet<br />");
		out.println(arg0.getRequestURI() + "<br />");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx02

package servlet;

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

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

public class ServletEx02 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet<br />");
		out.println(arg0.getRequestURI() + "<br />");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx03

package servlet;

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

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

public class ServletEx03 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet<br />");
		out.println(arg0.getRequestURI() + "<br />");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx04

package servlet;

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

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

public class ServletEx04 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		arg1.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = arg1.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet<br />");
		out.println(arg0.getRequestURI() + "<br />");
		out.println("</body>");
		out.println("</html>");
	}
}

ServletEx02.web - 다시

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx02</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/foo/bar/index.html</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex02</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex02</servlet-name>
  	<url-pattern>/foo/bar/index.bop</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex03</servlet-name>
  	<servlet-class>servlet.ServletEx02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex03</servlet-name>
  	<url-pattern>/baz</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex04</servlet-name>
  	<servlet-class>servlet.ServletEx02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex04</servlet-name>
  	<url-pattern>/baz/index.html</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex05</servlet-name>
  	<servlet-class>servlet.ServletEx03</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex05</servlet-name>
  	<url-pattern>/catalog</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex06</servlet-name>
  	<servlet-class>servlet.ServletEx04</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex06</servlet-name>
  	<url-pattern>/catalog/racecar.bop</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>ex07</servlet-name>
  	<servlet-class>servlet.ServletEx04</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex07</servlet-name>
  	<url-pattern>/index.bop</url-pattern>
  </servlet-mapping>
</web-app>

동이름을 입력 받아서 출력하는 프로그램 (서블릿만 사용)
Servletzipcode.Servletzipcode

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class Servletzipcode extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		req.setCharacterEncoding("utf-8");
		
		String strDong = req.getParameter("dong");
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		StringBuffer result = new StringBuffer();
		
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup("java:comp/env");
			DataSource dataSource = (DataSource)envCtx.lookup("jdbc/oracle1");
			
			conn = dataSource.getConnection();
			
			String sql = "select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like ?";
			pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			pstmt.setString(1, strDong + "%");
			
			rs = pstmt.executeQuery();
			
			result.append("<table border='1' width='800'>");
			while(rs.next()) {
				result.append("<tr>");
				result.append("	<td>").append(rs.getString("zipcode")).append("</td>");
				result.append("	<td>").append(rs.getString("sido")).append("</td>");
				result.append("	<td>").append(rs.getString("gugun")).append("</td>");
				result.append("	<td>").append(rs.getString("dong")).append("</td>");
				result.append("	<td>").append(rs.getString("ri")).append("</td>");
				result.append("	<td>").append(rs.getString("bunji")).append("</td>");
				result.append("</tr>");
			}
			result.append("</table>");
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] " + e.getMessage());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] " + e.getMessage());
		} finally {
			if(rs != null) try { rs.close();} catch(SQLException e) {};
			if(pstmt != null) try { pstmt.close();} catch(SQLException e) {};
			if(conn != null) try { conn.close();} catch(SQLException e) {};
		}
		
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		
		out.println("<!DOCTYPE html>");
		out.println("<html lang='ko'>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");

		out.println("<meta http-equiv='X-UA-Compatible' content='IE=edge'>");
		out.println("<meta name='viewport' content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0'>");
		out.println("<title>Insert title here</title>");
		out.println("</head>");

		out.println("<body>");
		out.println("<form action='./zipsearch.naver' method='get'>");
		out.println("동이름 <input type='text' name='dong' />");
		out.println("<input type='submit' value='검색' />");
		out.println("</form>");

		out.println("<br /><hr /><br />");
		out.print(result);
		out.println("</body>");

		out.println("</html>");
	}
	
}

Servletzipcode.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Servletzipcode</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.Servletzipcode</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/zipsearch.naver</url-pattern>
  </servlet-mapping>
</web-app>

Servletzipcode.context

<?xml version="1.0" encoding="utf-8" ?>
<Context>
	<Resource
		name="jdbc/oracle1"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@localhost:1521:orcl"
		username="scott"
		password="tiger"
		maxTotal="20"
		maxWaitMillis="5000"/>
</Context>

서블릿 로딩과 초기화

ServletEx03.ServletEx01

package servlet;

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

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

public class ServletEx01 extends HttpServlet {
	private String user;
	private String password;
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		// 서블릿 초기화 사용되는 메서드
		System.out.println("init() 호출");
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 요청을 통합 관리
		
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<호출>");
		out.println("</body>");
		out.println("</html>");	
		
	}
}

ServletEx03.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx03</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
</web-app>

ServletEx03.ServletEx01

package servlet;

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

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

public class ServletEx01 extends HttpServlet {
	private String user;
	private String password;
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		// 서블릿 초기화 사용되는 메서드
		
		user = getInitParameter("user");
		password = getInitParameter("password");
		
		System.out.println("init() 호출");
		System.out.println("user : " + user);
		System.out.println("password : " + password);
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 요청을 통합 관리
		
		resp.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<호출>");
		out.println("</body>");
		out.println("</html>");	
		
	}
}

ServletEx03.web

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletEx03</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>
  <servlet>
  	<servlet-name>ex01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  	<init-param>
  		<param-name>user</param-name>
  		<param-value>tester</param-value>
  	</init-param>
  	<init-param>
  		<param-name>password</param-name>
  		<param-value>123456</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ex01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
</web-app>

 

반응형

댓글