ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 서블릿
    개발자 수업/JSP 2021. 11. 24. 17:30

     

    1. 서블릿 수행 과정 (세 가지 기본 기능)
        1) 클라이언트로부터 요청을 얻음
        2) 데이터베이스 연동과 같은 비즈니스 로직을 처리함
        3) 처리된 결과를 클라이언트에 응답

    2. 서블릿 요청과 응답 수행 API
        1) 요청과 관련된 API : javax.servlet.http.HttpServletRequest 클래스
        2) 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스

    3. 서블릿 요청 -- <form> 태그 이용
        1) 서블릿에서 클라이언트의 요청 얻는 방법

    4. 서블릿의 응답(처리) 
        1) doGet(), doPost() 메서드 안에서 처리함
        2) javax.servlet.http.HttpServletResponse 객체를 이용함
        3) 데이터 종류(MIME/TYPE) 지정함
            - setContentType()을 이용해 클라이언트에게 전송
        4) 클라이언트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용함
            - PrinterWriter 객체의 println() 이용해 데이터 출력

    5. MIME-TYPE
        1) 톰캣 컨테이너에 미리 지정해 놓은 데이터 종류로 서블릿에서 브라우저로 전송 시 설정해서 사용함
        2) 예
            - HTML로 전송 시 : text/html
            - 일반 텍스트로 전송 시 : text/plain
            - XML 데이터로 전송 시 : application/xml
        3) 톰캣 컨테이너의 web.xml에 정의되어 있음

    6. 웹 브라우저에서 서블릿으로 데이터 전송
        1) GET 전송방식                                                 | POST 전송방식
        ------------------------------------------------------------------------------------
         - 서블릿에 데이터를 전송할 때는 데이터가       - 서블릿에 데이터를 전송할 때는 데이터의
           URL 뒤에 name=value 형태로 전송됨             HEAD 영역에 숨겨진채로 전송됨
         - 여러 개의 데이터를 전송할 때는 '&'로
           구분해서 전송됨
         - 보안이 취약함                                          - 보안에 유리함
         - 전송할 수 있는 데이터는 최대 255자임           - 전송 데이터 용량이 무제한임
         - 기본 전송 방식, 사용이 쉬움                        - 처리속도가 GET보다 느림
         - 웹 브라우저에 직접 입력해서 전송할
           수도 있음
         - 서블릿에서는 doGet()으로 전송된                  - 서블릿에서는 doPost()를 이용해 데이터를 처리함
           데이터를 처리함

     

     


    package kr.co.ezenac02;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Calendar;
    
    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("/getDay")		//원격 url과 메서드 연결(매핑, mapping)
    public class DayReminder extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String year = request.getParameter("year");
    		String month = request.getParameter("month");
    		String day = request.getParameter("day");
    		
    		int yyyy = Integer.parseInt(year);
    		int mm = Integer.parseInt(month);
    		int dd = Integer.parseInt(day);
    		
    		Calendar cal = Calendar.getInstance();
    		cal.set(yyyy, mm-1, dd);
    		
    		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    		char today = " 일월화수목금토".charAt(dayOfWeek);
    		
    		//출력
    		response.setContentType("text/html"); 		//응답의 형식을 html로 지정
    		response.setCharacterEncoding("utf-8");		//응답의 인코딩을 utf-8로 지정
    		PrintWriter out = response.getWriter();		//브라우저로의 출력 스트림을 얻음
    		out.println("<html>");
    		out.println("<head>");
    		out.println("</head>");
    		out.println("<body>");
    		out.println(year + "년 " + month + "월 " + day + "일은 ");
    		out.println(today + "요일입니다.");
    		out.println("</body>");
    		out.println("</html>");
    		
    		out.close();
    	}
    
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    	}
    
    }

    URL 뒤에 파라미터 값을 넘겨주면 됨


    package kr.co.ezenac02;
    
    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 {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	/*
    	 * <form> 태그로 전송된 데이터를 받아오는 메서드
    	 * 	1) String getParameter(String name)
    	 * 		- name의 값을 알고 있을 때, name에 대한 전송된 값을 받아오는 데에 사용함
    	 * 	2) String[] getParameterValues(String name)
    	 * 		- 같은 name에 대해 여러 개 값을 얻을 때 사용함
    	 * 	3) Enumeration<String> getParameterNames()
    	 * 		- name 값을 모를 때 사용함
    	 */
    	
    	/*
    	 * 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()를 이용해 <input> 태그의 name속성 값으로 전송된 value를 받아옴
    		String user_pw = request.getParameter("user_pw");
    		
    		System.out.println("아이디 : " + user_id);
    		System.out.println("비밀번호 : " + user_pw);
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<!-- 
    	<form> 태그 관련 속성
    		1) method : 데이터를 전송할 때 전송 방법 지정함
    					GET 또는 POST로 지정 (아무것도 지정하지 않으면 GET 방식)
    		2) action : 데이터를 전송할 서블릿이나 JSP를 지정함
    					서블릿으로 전송할 때는 매핑 이름을 사용함
    		3) enctype : 전송할 데이터의 encoding 타입 지정함
    					 파일을 업로드 시에 multipart/form-data로 지정함
    	 -->
    	<form name="frmLogin" action="login" method="post" 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>

    서블릿 매핑 이름과 action의 이름이 동일한지 체크 후 HTML 실행


    package kr.co.ezenac02;
    
    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("/input")
    public class InputServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	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);
    		}
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>여러 가지 input 타입 표시</title>
    </head>
    <body>
    	<form name="frmInput" method="get" action="input">
    		아이디 : <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="HTML5">HTML5
    		<input type="checkbox" name="subject" value="SQL">SQL
    		<input type="checkbox" name="subject" value="JSP">JSP
    		<br><br>
    		<input type="submit" value="전송">	<!-- 전송을 클릭하면 매핑 이름이 action에 설정한 input 서블릿으로 전송됨 -->
    		<input type="reset" value="초기화">
    	</form>
    </body>
    </html>

    서블릿 매핑 이름과 action의 이름이 동일한지 체크 후 HTML 실행

    doGet이 있고, method get이 있는지 확인


    package kr.co.ezenac02;
    
    import java.io.IOException;
    import java.util.Enumeration;
    
    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;
    
    /**
     * Servlet implementation class InputServlet02
     */
    @WebServlet("/input2")
    public class InputServlet02 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		//전송되어 온 name 속성들만 Enumeration 타입으로 받아옴
    		Enumeration<String> enu = request.getParameterNames();
    		//각 name을 하나씩 가져와 대응해서 전송되어 온 값을 출력함
    		while(enu.hasMoreElements()) {
    			String name = enu.nextElement();
    			String[] values = request.getParameterValues(name);
    			for(String value : values) {
    				System.out.println("name = " + name + ", value = " + value);
    			}
    		}
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>여러 가지 input 타입 표시</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="HTML5">HTML5
    		<input type="checkbox" name="subject" value="SQL">SQL
    		<input type="checkbox" name="subject" value="JSP">JSP
    		<br><br>
    		<input type="submit" value="전송">	<!-- 전송을 클릭하면 매핑 이름이 action에 설정한 input 서블릿으로 전송됨 -->
    		<input type="reset" value="초기화">
    	</form>
    </body>
    </html>

    서블릿 매핑 이름과 action의 이름이 동일한지 체크 후 HTML 실행

    doGet이 있고, method get이 있는지 확인

    위 값을 입력하고 전송을 누르면

    콘솔에 이렇게 값이 나타남


     

    package kr.co.ezenac02;
    
    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("/login2")
    public class LoginServlet02 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	//응답은 HttpServletResponse 객체를 이용함
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8"); 	//웹 브라우저에서 전송된 데이터의 인코딩을 설정함
    		response.setContentType("text/html;charset=utf-8"); 	//응답할 데이터 종류가 HTML임을 설정함
    		PrintWriter out = response.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);		//HTML 태그 문자열을 웹 브라우저로 출력함
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<!-- 
    	<form> 태그 관련 속성
    		1) method : 데이터를 전송할 때 전송 방법 지정함
    					GET 또는 POST로 지정 (아무것도 지정하지 않으면 GET 방식)
    		2) action : 데이터를 전송할 서블릿이나 JSP를 지정함
    					서블릿으로 전송할 때는 매핑 이름을 사용함
    		3) enctype : 전송할 데이터의 encoding 타입 지정함
    					 파일을 업로드 시에 multipart/form-data로 지정함
    	 -->
    	<form name="frmLogin" action="login2" method="get" 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>

    서블릿 매핑 이름과 action의 이름이 동일한지 체크 후 HTML 실행

    doGet이 있고, method get이 있는지 확인

    위의 값을 입력하고 로그인을 누르면


    package kr.co.ezenac02;
    
    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("/calc")
    public class CalcServlet extends HttpServlet {
    	
    	private static float USD_RATE = 1189.80F;
    	private static float CNY_RATE = 186.19F;
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter pw = response.getWriter();
    		
    		String command = request.getParameter("command");		//수행할 요청을 받아옴
    		String won = request.getParameter("won");				//변환할 원화를 받아옴
    		String operator = request.getParameter("operator");		//변환활 외화 종류를 받아옴
    		
    		if(command != null && command.equals("calculate")) {
    			String result = caculator(Float.parseFloat(won), operator);
    			pw.print("<html><font size=10>변환 결과</font><br>");
    			pw.print("<font size=10>" + result + "</font><br>");
    			pw.print("<a href='/chap02_Servlet/calc'>환율 계산기</a>");	 	//환울 계산기로 돌아가기
    			return;
    		}
    		
    		pw.print("<html><title>환율 계산기</title>");
    		pw.print("<font size=5>환율 계산기</font><br>");
    		
    		pw.print("<form name='frmCalc' method='get' action='/chap02_Servlet/calc'>");
    		pw.print("원화 : <input type='text' name='won' size=10>");
    		
    		pw.print("<select name='operator'>");
    		pw.print("<option value='dollar'>달러</option>");
    		pw.print("<option value='en'>엔화</option>");
    		pw.print("<option value='wian'>위안</option>");
    		pw.print("<option value='pound'>파운드</option>");
    		pw.print("<option value='euro'>유로</option>");
    		pw.print("</select>");
    		
    		//<hidden> 태그 이용해 계산기에서 서블릿으로 수행할 요청을 전달함
    		pw.print("<input type='hidden' name='command' value='calculate'>");
    		pw.print("<input type='submit' value='변환'>");
    		
    		pw.print("</form>");
    		
    		pw.close();
    	}
    	
    	//환율 계산하는 메서드
    	public static String caculator(float won, String operator) {
    		String result = null;
    		
    		if(operator.equals("dollar")) {
    			result = String.format("%.6f", won/USD_RATE);
    		} else if(operator.equals("wian")) {
    			result = String.format("%.6f", won/CNY_RATE);
    		}
    		
    		return result;
    	}
    
    }

    서버 Run as 후 주소 뒤에 매핑 이름 /calc 입력

    원화에 1000을 입력하면

    밑의 환율 계산기를 누르면 다시 환율 계산기로 돌아감


    package kr.co.ezenac02;
    
    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("/login3")
    public class LoginServlet03 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    	
    	//POST 방식으로 전송된 데이터를 처리하기 위해 이용함
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		String user_id = request.getParameter("user_id");
    		String user_pw = request.getParameter("user_pw");
    		System.out.println("아이디 : " + user_id);
    		System.out.println("비밀번호 : " + user_pw);
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<!-- 
    	<form> 태그 관련 속성
    		1) method : 데이터를 전송할 때 전송 방법 지정함
    					GET 또는 POST로 지정 (아무것도 지정하지 않으면 GET 방식)
    		2) action : 데이터를 전송할 서블릿이나 JSP를 지정함
    					서블릿으로 전송할 때는 매핑 이름을 사용함
    		3) enctype : 전송할 데이터의 encoding 타입 지정함
    					 파일을 업로드 시에 multipart/form-data로 지정함
    	 -->
    	<form name="frmLogin" action="login3" method="post" 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>

    서블릿 매핑 이름과 action의 이름이 동일한지 체크 후 HTML 실행

    doPost가 있고, method post가 있는지 확인


    package kr.co.ezenac02;
    
    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("/login4")
    public class LoginServlet04 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		
    	}
    
    	
    	public void destroy() {
    		
    	}
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet 메서드 호출");
    		doHandle(request, response);		//GET방식으로 요청 시 다시 doHandle()을 호출함
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost 메서드 호출");
    		doHandle(request, response);		//POST방식으로 요청 시 다시 doHandle()을 호출함
    	}
    	
    	//모든 호출 방식에 대해 처리할 수 있음
    	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		System.out.println("doHandle 메서드 호출");
    		
    		String user_id = request.getParameter("user_id");
    		String user_pw = request.getParameter("user_pw");
    		System.out.println("아이디 : " + user_id);
    		System.out.println("비밀번호 : " + user_pw);
    	}
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<!-- 
    	<form> 태그 관련 속성
    		1) method : 데이터를 전송할 때 전송 방법 지정함
    					GET 또는 POST로 지정 (아무것도 지정하지 않으면 GET 방식)
    		2) action : 데이터를 전송할 서블릿이나 JSP를 지정함
    					서블릿으로 전송할 때는 매핑 이름을 사용함
    		3) enctype : 전송할 데이터의 encoding 타입 지정함
    					 파일을 업로드 시에 multipart/form-data로 지정함
    	 -->
    	<form name="frmLogin" action="login4" method="post" 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>

    doGet과 doPost에서 doHandle을 다 부르고, doHandle에 메소드를 정의함으로써

    html method에서 get, post 중 아무거나 써도 작동하게끔 코딩


    package kr.co.ezenac02;
    
    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 LoginServlet05 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	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 = "<html>";		//브라우저로 출력할 데이터를 문자열로 연결해서 HTML 태그로 만듦
    		data += "<body>";
    		data += "아이디 : " + id;
    		data += "<br>";
    		data += "패스워드 : " + pw;
    		data += "<br>";
    		data += "주소 : " + address;
    		data += "</body>";
    		data += "</html>";
    		
    		out.print(data);
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<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 속성으로 
    			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" value="로그인" onclick="fn_validate()">
    		<input type="reset" value="다시입력">
    		<input type="hidden" name="user_address" value="서울시 강남구">
    	</form>
    
    </body>
    </html>


    package kr.co.ezenac03;
    
    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("/gugu")
    public class GuguServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	@Override
    	public void init() throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    		int dan = Integer.parseInt(request.getParameter("dan"));
    		
    		out.print("<table border=1 width=800 align=center>");
    		out.print("<tr align=center bgcolor='#FFFF66'>");
    		out.print("<td colspan=2>" + dan + "단 출력</td>");
    		out.print("</tr>");
    		
    		for(int i=1; i<10; i++) {
    			if(i % 2 == 0) {
    				out.print("<tr align=center bgcolor='#ACFA58'>");
    				out.print("<td width=400>");
    				out.print(dan + " * " + i);
    				out.print("</td>");
    				out.print("<td width=400>");
    				out.print(dan * i);
    				out.print("</td>");
    				out.print("</tr>");
    			} 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(dan * i);
    				out.print("</td>");
    				out.print("</tr>");
    			}
    		}
    		
    		out.print("</table>");
    	}
    
    	@Override
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>구구단</title>
    </head>
    <body>
    	<h1>출력할 구구단의 수를 입력해 주세요.</h1>
    	<form action="/chap02_Servlet/gugu" method="get">
    		출력할 구구단 : <input type="text" name="dan"><br>
    		<input type="submit" value="구구단 출력">
    	</form>
    </body>
    </html>


    package kr.co.ezenac02;
    
    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 LoginServlet05 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	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 = "<html>";		//브라우저로 출력할 데이터를 문자열로 연결해서 HTML 태그로 만듦
    		data += "<body>";
    		data += "아이디 : " + id;
    		data += "<br>";
    		data += "패스워드 : " + pw;
    		data += "<br>";
    		data += "주소 : " + address;
    		data += "</body>";
    		data += "</html>";
    		
    		out.print(data);
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<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 속성으로 
    			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" value="로그인" onclick="fn_validate()">
    		<input type="reset" value="다시입력">
    		<input type="hidden" name="user_address" value="서울시 강남구">
    	</form>
    
    </body>
    </html>

     


    package kr.co.ezenac03;
    
    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 {
    	private static final long serialVersionUID = 1L;
           
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	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 {
    			out.print("<html>");
    			out.print("<body>");
    			out.print("아이디를 입력하세요.");
    			out.print("<br>");
    			out.print("<a href='http://localhost:8080/chap02_Servlet/login03.html'>로그인 창으로 이동</a>");
    			out.print("</body>");
    			out.print("</html>");
    		}
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인 창</title>
    </head>
    <body>
    	<form name="frmlogin" method="post" action="/chap02_Servlet/loginTest">
    		아이디 : <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>


    package kr.co.ezenac03;
    /*
     * 서블릿으로 로그인 요청 시 관리자(admin) 화면 나타내기
     */
    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("/loginTest2")
    public class LoginTest02 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 메서드 호출");
    	}
    
    	
    	public void destroy() {
    		System.out.println("destroy 메서드 호출");
    	}
    
    	
    	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")) {
    				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("아이디와 비밀번호를 입력하세요.");
    			out.print("<br>");
    			out.print("<a href='http://localhost:8080/chap02_Servlet/login03.html'>로그인 창으로 이동</a>");
    			out.print("</body>");
    			out.print("</html>");
    		}
    	}
    
    }
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인 창</title>
    </head>
    <body>
    	<form name="frmlogin" method="post" action="/chap02_Servlet/loginTest2">
    		아이디 : <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>

    댓글