[서블릿] 서블릿 생명주기 메서드

hoonak·2023년 6월 20일
0

서블릿

목록 보기
3/16

- 서블릿은

서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바클래스임. 서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 가짐. 하지만 서블릿은 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 jsp/Servlet 컨테이너에서 실행된다는 점에서 차이가 있음.
서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹브라우에 결과를 전송함.

- 서블릿 API 기능

Servlet 인터페이스 : 1. javax.servlet 패키지에 선언되어 있음. 2. Servlet 관련 추상메서드를 선언함. 3. init(), service(), getServletInfo(), getServletConfig()를 선언함.

ServletConfig 인터페이스 : 1. java.servlet 패키지에 선언되어 있음. 2. Servlet 기능 관련 추상 메서드가 선언되어 있음. 3. getInitParameter(), getInitParameterNames(), getServletConText(), getServletName()이 선언되어 있음.

GenericServlet 클래스 : 1. javax.servlet 패키지에 선언되어 있음. 2. 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스임. 3. GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이이딩해서 구현함.

HttpServlet 클래스 : 1. javax.servlet.http 패키지에 선언되어 있음. 2. GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행함. 3. 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속 받아 사용함. 4. 요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출 됨.

GenericServlet은 일반적인 여러 통신 프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스임. httpServlet은 이 GenericServlet을 상속 받음. HttpServlet은 이름에서 알 수 있듯이 HTTP 프로토콜을 사용하는 서블릿 기능을 구현하는 클래스임. 바로 이 HttpServlet을 상속 받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리하는 서블릿을 배우는 중.

- 서블릿의 생명주기 메서드

서블릿 생명주기 메서드.

서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메서드를 말함.

  1. 초기화 : init() - 서블릿 요청 시 맨 처음 한 번만 호출 됨. - 서블릿 생성 시 초기화 작업을 주로 수행함.
  2. 작업 수행 : doGet, doPost() - 서블릿 요청 시 매번 호출됨. - 실제로 클라이언트가 요청하는 작업을 수행함.
  3. 종료 : destory() - 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출 됨. - 서블리스이 마무리 작업을 주로 수행함.

- 서블릿 매핑

클래스 이름이 길어지면 브라우저 주소창에 입력하기가 불편하고, 일반적으로 클래스 이름을 보면 그 클래스가 어떤 기능을 하는지 짐작할 수 있어 보안에도 좋지 않음. 따라서 서블릿 클래스 이름에 대응되는 서블릿 매핑으로 실제 서블릿을 요청함.

1. 각 프로젝트에 있는 web.xml에 설정함.
2. <servlet> 태그와 <servlet-mapping> 태그를 이용함.
3. 여러 개의 서블릿 매핑 시에는 <servlet> 태그를 먼저 정의하고 <servlet-mapping> 태그를 정의함.

web.xml

<!-- 서블릿 맵핑 - 웹 브라우저에서 주소 이름이 길어 지니까 맵핑으로 브라우 이름을 줄인다 -->
  <servlet><!-- 브라우저에서 요청하는 매핑 이름에 대해 실제로 실행하는 서블릿 클래스를 설정하는 태그 -->
  	<servlet-name>aaa</servlet-name> <!-- 아래 서블릿 매핑과 서블릿 네임을 동일 시켜 서로 연결 시켜준다 -->
  	<servlet-class>sec01.ex01.FirstServlet</servlet-class> <!-- 브라우저에서 요청하는 매핑 이름에 대해 실제로 기능을 수행하는 서빌릇 클래스를 설정 -->
  </servlet>
  
  <servlet>
  	<servlet-name>bbb</servlet-name>
  	<servlet-class>sec01.ex01.SecondServlet</servlet-class>
  </servlet>

<!-- 위에꺼 맵핑 -->  
  <servlet-mapping>
  	<servlet-name>aaa</servlet-name> 
  	<url-pattern>/first</url-pattern> <!-- 브라우저에서 사용할 주소 -->
  </servlet-mapping>
  
<servlet-mapping>
	<servlet-name>bbb</servlet-name>
	<url-pattern>/second</url-pattern>
</servlet-mapping>  

이러한 매핑보다 더욱 편리한 맵핑은 애너테이션을 이용하면 됨.
서블릿 클래스 위에 @WebServlet("/서블릿매핑이름");
애너테이션을 이용해서 만드는 서블릿 클래스는 반드시 httpServlet을 상속 받아야 함.

- 서블릿 기본 기능 수행 과정

클라이언트로부터 요청을 받음 -> 데이터베이스 연동과 같은 비즈니스 로직을 처리 -> 처리된 결과를 클라이언트에 돌려줌.

- 서블릿 응답과 요청 수행 API 기능

요청이나 응답과 관련된 API 모두 javax.servlet.http 패키지에 있음.

  • 요청과 관련된 API : javax.servlet.http.HttpServletRequest 클래스.

  • 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스.

    클라이언트가 서블릿에 요청을 하면 먼저 톰캣 컨테이너가 받음. 그런 다음 사용자의 요청이나 응답에 대한 httpServletRequest 객체와 HttpServletResponse 객체를 만들고 서블릿의 doGet()이나 doPost() 메서드를 호출하면서 이 객체들을 전달함.
    톰캣이 사용자의 요청에 대한 정보를 모든 HttpServletRequest 객체의 속성으로 담아 메서드로 전달하므로 각 HttpServletRequest에서 제공하는 메서드들은 매개변수로 넘어온 객체들을 이용하여 사용자가 전송한 데이터를 받아 오거나 응답할 수 있는 것.

- HttpServletRequest 여러 가지 메서드

  1. authenticate(HttpServletResponse response) : 현재 요청한 사용자가 ServletContext 객체에 대한 인증을 하기 위한 컨테이너 로그인 메커니즘을 사용.

  2. changeSessionId() : 현재 요청과 연관된 세션의 id를 변경하여 새 세션 id를 반환함.

  3. getContextPath() : 요청한 컨텍스트를 가리키는 url를 반환함.

  4. getCookies() : 클라이언트가 현재의 요청과 함께 보낸 쿠키 객체들에 대한 배열을 반환함.

  5. getHeader(String name) : 특정 요청에 대한 정보를 문자열로 반환함.

  6. getHeaderNames() : 현재의 요청에 포함된 헤더의 name 속성을 enumeration으로 반환함.

  7. getMethod() : 현재 요청이 GET, POST 또느 PUT 방식 중 어떤 HTTP 요청인지 반환함.

  8. getRequestURI() : 요청한 url의 컨텍스트 이름과 파일 경로까지 반환함.

  9. getServletPath() : 요청한 url에서 서블릿이나 jsp 이름을 반환함.

  10. getSession() : 현재의 요청과 연관된 세션을 반환함. 만약 세션이 없으면 새로 만들어서 반환함.

- HttpServletResponse의 여러 가지 메서드

  1. addCookie(Cookie cookie) : 응답에 쿠키를 추가함.

  2. addHeader(String name, String value) : name과 value를 헤더에 추가함.

  3. encodeURL(String url) : 클라이언트가 쿠키를 지원하지 않을 때 세션 id를 포함한 특정 url을 인코딩함.

  4. getHeaderNames() : 현재 응답의 헤더에 포함된 name을 얻어옴.

  5. sendRedirect(String location) : 클라이언트에게 리다이렉트 응답을 보낸 후 특정 url로 다시 요청함.

  6. getPathInfo() : 클라이언트가 요청 시 보낸 url과 관련된 추가 경로 정보를 반환함.

- 서블릿에서 클라이언트의 요청을 얻는 방법

HttpServletRequest 클래스에서 form 태그로 전송된 데이터를 받아오는 데 사용하는 메서드.

  1. String getParameter(String name) : name의 값을 알고 있을 때 그리고 name에 대한 전송된 값을 받아 오는 데 사용함.

  2. String[] getParameterValues(String name) : 같은 name에 대해 여러 개의 값을 얻을 때 사용함.

  3. Enumeration getParameterName() : name 값을 모를 때 사용함.

예제 1) HttpServletRequest로 요청 처리 실습. request.getParameter()
login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 창</title>
</head>
<body>
	<!-- action : 입력된 데이터를 서블릿 매핑 이름이 login인 서블릿으로 전송함. -->
	<form name = "frmLogin" method="post" action="login4" enctype="UTF-8">
		<!-- name : 텍스트 박스에 입력된 ID를 user_id로 전송함. -->
		아이디 : <input type = "text" name = "user_id"><br>
		<!-- name: 텍스트 박스에 입력된 비밀번호를 user_pw로 전송함. -->
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<input type = "submit" value = "로그인">
		<input type = "reset" value = "다시입력">
	</form>		
</body>
</html>

LoginServlet.java


package sec01.ex01;

import java.io.IOException;

import javax.servlet.ServletConfig;
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("/login") // 서블릿의 매핑 이름이 login임.
public class LoginServlet extends HttpServlet {

	public void init() throws ServletException {
		System.out.println("init �޼��� ȣ��");
	}
	
	//HttpServletRequest request : 웹 브라우저에서 전송한 정보를 톰캣 컨테이너가 HttpServletRequest 객체를 생성한 후 doGet()으로 넘겨줌.
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8"); // 전송된 데이터를 utf-8로 인코딩함.
		String user_id = request.getParameter("user_id"); // getParameter()를 이용해 html에 <input> 태그의 name의 속성 값으로 전송된 value를 받아 옴. 
		String user_pw = request.getParameter("user_pw"); 
		System.out.println("아이디 : " + user_id);
		System.out.println("비밀번호 : " + user_pw);
	}

	public void destory() {
		System.out.println("destroy 메서드 호출");
	}
}

예제 2) 여러 개의 값을 전송할 때의 요청 처리. request.getParameterValues()

input.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<form name = "frmInput" method = "get" action = "input2">
		아이디 : <input type = "text" name = "user_id"><br>
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<!-- name 속성이 모두 subject로 같음. -->
		<input type = "checkbox" name = "subject" value = "java" checked>자바
		<input type = "checkbox" name = "subject" value = "C언어"	> c언어
		<input type = "checkbox" name = "subject" value = "jsp"> jsp
		<input type = "checkbox" name = "subject" value = "안드로이드"> 안드로이드
		<input type = "submit" value = "전송"> <!-- 전송을 클릭하면 매핑 이름이 action에 설정한 input 서블릿으로 전송됨. -->
		<input type = "reset" value = "초기화">		
	</form>

</body>
</html>

inputServlet.java

package sec01.ex01;

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("/input")
public class InputServlet extends HttpServlet {

	public void init() throws ServletException{
		System.out.println("init �޼��� ȣ��");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String user_id = request.getParameter("user_id"); // 한 개씩 전송쇤 값은 getParameter()를 이용함.
		String user_pw = request.getParameter("user_pw");
		System.out.println("아이디 : " + user_id);
		System.out.println("비밀번호 : " + user_pw);
		// 하나의 name으로 여러 값을 전송하는 경우 getParameterValues()를 이용해 배열 형태로 반환 됨.
		String[] subject = request.getParameterValues("subject"); 
		for (String str : subject) {
			System.out.println("선택한 과목 :" + str);
		}
	}
	
	public void destory() {
		System.out.println("destroy 메서드 호출");
	}

}

예제3) request.getParameterNames() - 전송되는 데이터가 많은 경우에는 getParameterNames()를 이용해 name 속성만 따로 구할 수 있음.

input.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<form name = "frmInput" method = "get" action = "input2">
		아이디 : <input type = "text" name = "user_id"><br>
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<!-- name 속성이 모두 subject로 같음. -->
		<input type = "checkbox" name = "subject" value = "java" checked>자바
		<input type = "checkbox" name = "subject" value = "C언어"	> c언어
		<input type = "checkbox" name = "subject" value = "jsp"> jsp
		<input type = "checkbox" name = "subject" value = "안드로이드"> 안드로이드
		<input type = "submit" value = "전송"> <!-- 전송을 클릭하면 매핑 이름이 action에 설정한 input 서블릿으로 전송됨. -->
		<input type = "reset" value = "초기화">		
	</form>

</body>
</html>

InputServlet2.java

package sec01.ex01;

import java.io.IOException;
import java.util.Enumeration;

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("/input2")
public class InputServlet2 extends HttpServlet {
	
	public void init() throws ServletException{
		System.out.println("init �޼��� ȣ��");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		Enumeration enu = request.getParameterNames(); //전송되어 온 name 속성들만 Enumeration 타입으로 받아온다.
		while(enu.hasMoreElements()) { // 각 name을 하나씩 가져와 대응해서 전송 되어 온 값을 출력한다.
			String name = (String) enu.nextElement();
			String[] values = request.getParameterValues(name);
			for(String value : values) {
				System.out.println("name :" + name + " , value=" + value);
			}
		}
	}

}

- 서블릿의 응답 처리 방법

  1. doGet()이나 doPost() 메서드 안에서 처리함.

  2. javax.servlet.http.HttpServlerResponse 객체를 이용함.

  3. setContenType()을 이용해 클라이언트에게 전송할 데이터 종류(MIME-TYPE)를 지정함.

  4. 클라이언트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용함.

MIME_TYPE으로 지정하는 예.

HTML로 전송 시 : text/html
일반 텍스트로 전송 시 : text/plain
XML 데이터로 전송 시 : application/xml
웹 브라우저는 기본적으로 HTML만 인식하므로 서블릿에서 전송하는 대부분의 데이터는 MIME-TYPE을 text/html로 지정함.

예 1) HttpServletResponse를 이용한 서블릿 응답.

서블릿이 클라이언트(웹 브라우저)에 응답하는 과정.

  1. setContentType()을 이용해 MIME-TYPE을 지정함.
  2. 데이터를 출력할 PrintWirter 객체를 생성함.
  3. 출력 데이터를 HTML 형식으로 만듦.
  4. PrintWirter의 print()나 Println()을 이용해 데이터를 출력함.

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 창</title>
</head>
<body>
	<!-- action : 입력된 데이터를 서블릿 매핑 이름이 login인 서블릿으로 전송함. -->
	<form name = "frmLogin" method="post" action="login4" enctype="UTF-8">
		<!-- name : 텍스트 박스에 입력된 ID를 user_id로 전송함. -->
		아이디 : <input type = "text" name = "user_id"><br>
		<!-- name: 텍스트 박스에 입력된 비밀번호를 user_pw로 전송함. -->
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<input type = "submit" value = "로그인">
		<input type = "reset" value = "다시입력">
	</form>		
</body>
</html>

LoginServlet2.java

package sec02.ex01;

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("/login2")
public class LoginServlet2 extends HttpServlet{

	public void init() throws ServletException {
		System.out.println("init 메서드 호출");
	}
	
	//응답은 HttpServletResponse 객체를 이용.
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset = utf-8"); //setContentType()을 이용해서 응답할 데이터 종류가 html임을 설정.
		PrintWriter out = response.getWriter(); // HttpServletResponse 객체의 getWriter()을 이용해 출력 스트림 PrintWriter 객체를 받아옴.
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		
		String data = "<html>"; //브라우저로 출력할 데이터를 문자열로 연결해서 html 태그로 만들기.
			data += "<body>";
			data += "아이디 : " + id;
			data += "<br>";
			data += "패스워드 : " + pw;
			data += "</body>";
			data += "</html>";
			out.print(data); // PrintWriter의 print()를 이용해 HTML 태그 문자열을 웹 브라우저로 출력.
	}
	public void destory() {
		System.out.println("destory 메서드 호출");
	}
}

- 자바스클립트로 서블릿에 요청하기

예 1)

login2.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type = "text/javascript">
	function fn_validate(){
		var frmLogin = document.frmLogin; // form 태그의 name 속성으로 form 태그 객체를 받아 옴.
		var user_id = frmLogin.user_id.value; //form 태그 내 input 태그의 name 속성으로 입력한 ID와 비밀번호를 받아 옴.
		var user_pw = frmLogin.user_pw.value;
		
		if((user_id.length == 0 || user_id == "") || (user_pw.length == 0 || user_pw == "")){
			alert("아이디와 비밀번호는 필수 입니다");
		}else{
				frmLogin.method = "post"; // form 태그의 전송 방식을 post로 설정.
				frmLogin.action = "login5"; //action 속성을 매핑 이름인 login5로 설정.
				frmLogin.submit(); // 자바스크립트에서 서블릿으로 전송.
			 }				
	}

</script>
</head>
<body>

	<form name = "frmLogin" method="post" action="login5" enctype="UTF-8">
		아이디 : <input type = "text" name = "user_id"><br>
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<input type = "button" onClick = "fn_validate()" value = "로그인">
		<input type = "hidden" name = "user_address" value = "서울시 성북구">
	</form>	

</body>
</html>

LoginServlet5.java

package sec03.ex03;

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

import javax.servlet.ServletConfig;
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("/login5")
public class LoginServlet5 extends HttpServlet {

	public void init() throws ServletException {
		System.out.println("init 메서드 호출");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset = utf-8");
		PrintWriter out = response.getWriter();
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		String address = request.getParameter("user_address"); //hidden 태그로 전송된 값을 받아 옴.
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		
		String data = "<hrml>";
		data += "<body>";
		data += "아이디 :" + id;
		data += "비밀번호 :" + pw;
		data += "<br>";
		data += "주소" + address;
		data += "</body>";
		data += "</html>";
		out.print(data);		
	}

	public void destroy() {
		System.out.println("destory 메서드 호출");
	}
	
}

예 2) 서블릿에 로그인 요청 시 유효성 검사하기

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form name = "frmLogin" method = "post" action = "/pro06/loginTest2" encType = "UTF-8">
		아이디 : <input type = "text" name = "user_id"><br>
		비밀번호 : <input type = "password" name = "user_pw"><br>
		<input type = "submit" value = "로그인">
		<input type = "reset" value = "다시입력">
	</form>

</body>
</html>

LoginTest.java

package sec04.ex01;

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

import javax.servlet.ServletConfig;
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("/loginTest")
public class LoginTest extends HttpServlet {

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메서드 호출");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		
		if(id != null && id.length() != 0) {
			out.print("<html>");
			out.print("<body>");
			out.print(id + "님 로그인 하셨습니다");
			out.print("</body>");
			out.print("</html>");
		}else{ // id와 비밀번호가 없으면 다시 로그인창으로 이동함.
			  out.print("<html>");
			  out.print("<body>");
			  out.print("아이디를 입력하세요.");
			  out.print("<br>");
			  out.print("<a href = 'http://localhost:8080/pro06/test01/login.html'> 로그인 창으로 이동 </a>");
			  out.print("</body>");
			  out.print("</html>");
		}
	}

	public void destroy() {
		System.out.println("destory 메서드 종료");
	}
	
}

예 3) 서블릿으로 로그인 요청 시 관리자 화면 나타내기

LoginTest2.java

package sec04.ex01;

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("/loginTest2")
public class LoginTest2 extends HttpServlet {
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		
		if(id != null && id.length() != 0) {
			if(id.equals("admin")) { // 이중 if문을 사용해 id가 admin이면 관리창을 보여줌.
				out.print("<html>");
				out.print("<body>");
				out.print("<font size = '12'> 관리자로 로그인 하셨습니다.</font>");
				out.print("<br>");
				out.print("<input type = button value = '회원정보 수정하기' />");
				out.print("<input type = button value = '회원정보 삭제하기' />");
				out.print("</body>");
				out.print("</html>");
			} else { // 관리자가 아닌 일반 사용자일 경우 로그인 성공 메시지를 보여줌.
				out.print("<html>");
				out.print("<body>");
				out.print(id + " 님 로그인 하셨습니다.");
				out.print("</body>");
				out.print("</html>");
			}	
		} else {
			out.print("<html>");
			out.print("<body>");
			out.print("id와 비밀번호를 입력해주세요.");
			out.print("<a href = 'http://localhost:8080/pro06/test01/login.html'> 로그인 창으로 이동 </a>");
			out.print("</body>");
			out.print("</html>");
		}
	}

}

예 4) 서블릿으로 요청 시 구구단 출력하기

gugu.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1> 구구단의 수를 지정해 주세요. </h1>
	<form method = "get" action = "/pro06/guguTest">
		출력할 구구단 : <input type = "text" name = "dan"><br>
		<input type = "submit" value = "구구단 출력">		
	</form>
</body>
</html>

GuguTest.java

package sec04.ex01;

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;

/**
 * Servlet implementation class GuguTest
 */
@WebServlet("/guguTest")
public class GuguTest extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset = utf8");
		PrintWriter out = response.getWriter();
		int dan = Integer.parseInt(request.getParameter("dan")); // 전송된 dan의 값을 받아옴.
		out.print("<table border = 1 width = 800 align = center>");
		out.print("<tr align = center bgcolor = '#ACFA58'");
		out.print("<td colspan = 2>" + dan + "단 출력 </td>");
		out.print("</tr>");		
		for(int i = 1; i < 10; i++) { // for문을 이용해 연속해서 결과를 테이블 행으로 출력함.
			if(i % 2 == 0) {
				out.print("<tr align = center bgcolor = '#ACFA58'>");
			} else {
				out.print("<tr align = center bgcolor = '#81BEF7'>");
			}			
			out.print("<td width = 400>");
			out.print(dan + " *  " + i);
			out.print("</td>");
			out.print("<td width = 400>");
			out.print(i * dan);
			out.print("</td>");
			out.print("</tr>");
		}
		out.print("</table>");
	}
}
profile
Hello World!

0개의 댓글