Servlet 로그인 만들기 post로 만들어야 한다.

    get방식은 값이 노출이 된다.

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>로그인 화면</title>
    	<style type="text/css">
    		/* 인라인 스타일의 css */
    		#LoginFormArea {
    		 	text-align: center;
    		 	width: 250px;
    		 	margin: auto;
    		 	border: 1px solid red;
    		}
    		h1 {
    			text-align: center;
    			color: blue;
    		}
    	</style>
    </head>
    <body>
    	<h1>로그인</h1>
    	<section id="LoginFormArea">
    		<form action="Login" method="get">
    			<label>아이디 : </label> <!-- label은 브라우저에 글자를 표시하는 테그 -->
    			<!-- required속성 : 반드시 입력하라는 속성 -->
    			<input type="text" name="id" id="id" required="required">
    			<br/><br/>
    			
    			<label>비밀번호 : </label>
    			<input type="password" name="passwd" id="passwd" required="required">
    			<br/><br/>
    			
    			<input type="submit" value="로그인">
    		</form>
    	</section>
    </body>
    </html>

    Servlet 

    package kr.gov.servlet4;
    
    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("/Login") //form테그 action Login을 찾는다.
    public class LoginServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    
        public LoginServlet() {
        	
        }
    
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet() 호출됨");
    		//클라이언트가 요청한 파라메타 값들을 인코딩 해주는 코드
    		request.setCharacterEncoding("utf-8");
    		
    		//클라이언트에게서 넘어오는 id, 비밀번호 값을 받고 인코딩 설정후 출력스트림 얻어 화면에 출력
    		String id = request.getParameter("id"); //id값 
    		String passwd = request.getParameter("passwd"); //id="passwd" 
    		
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter writer = response.getWriter();
    		
    		writer.println("아이디 : " + id + "<br/>");
    		writer.println("비밀번호 : " + passwd + "<br/>");
    	}
    	
    	
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost() 호출됨");
    		//클라이언트가 요청한 파라메타 값들을 인코딩 해주는 코드
    		request.setCharacterEncoding("utf-8");
    		
    		//클라이언트에게서 넘어오는 id, 비밀번호 값을 받고 인코딩 설정후 출력스트림 얻어 화면에 출력
    		String id = request.getParameter("id"); //id값 
    		String passwd = request.getParameter("passwd"); //id="passwd" 
    		
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter writer = response.getWriter();
    		
    		writer.println("아이디 : " + id + "<br/>");
    		writer.println("비밀번호 : " + passwd + "<br/>");
    	}
    
    }
    

    doPost() 호출됨


    post 방식 강아지 선택 예제

     

    img (1).zip
    1.47MB

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>강아지</title>
    </head>
    <body>
    	<h1>당신이 좋아하는 강아지를 선택하세요!</h1>
    	<form action="choiceDog" method="post">
    		<input type="checkbox" name="dog" value="pu.ing" />푸들
    		<input type="checkbox" name="dog" value="jin.ing" />진돗개
    		<input type="checkbox" name="dog" value="pung.ing" />풍산개
    		<input type="checkbox" name="dog" value="sap.ing" />삽살개
    		<input type="submit" value="선택" />	
    	</form>
    </body>
    </html>

    getParameterValues 배열로 리턴

    package kr.gov.servlet5;
    
    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("/choiceDog")
    public class DogChoiceServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
       
        public DogChoiceServlet() {
    
        }
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html; charset=utf-8");
    		
    		PrintWriter writer = response.getWriter();
    		String[] dog = request.getParameterValues("dog");
    		
    		writer.println("<html>");
    		writer.println("<head>");
    		writer.println("</head>");
    		writer.println("<body bgcolor = 'green'>");
    		writer.println("<table align='center' bgcolor='yellow'>");
    		writer.println("<tr>");
    		for (int i = 0; i < dog.length; i++) {
    			writer.println("<td>");
    			writer.println("<img src='"+dog[i]+"'>");
    			writer.println("</td>");
    		}
    		writer.println("</tr>");
    		writer.println("</table>");
    		writer.println("</body>");
    		writer.println("</html>");
    		writer.close();
    	}
    
    }
    

     


    Servlet 작동방식

    servlet 스레드 생성 servlet객체생성

    요청에 대해서 스레드로 처리

    was = 자바

    tomcat = 자바

     

    메모리에 있다면 또 만들지 않고 그대로 실행됨

     

    Servlet 라이프 사이클 

     

     

    라이프 사이클 확인 예제 init

    package kr.gov.lifecycle;
    
    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("/LC")
    public class LifecycleServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	
    	@Override
    	public void init() throws ServletException {
    		System.out.println("init() 호출");
    	}
           
        public LifecycleServlet() {
        	System.out.println("생성자 호출");
        }
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet() 호출");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost() 호출");
    	}
    	
    	@Override
    	public void destroy() {
    		System.out.println("destroy() 호출");
    	}
    }

    순서

    servlet 생성자 호출
    init 호출
    doGet 호출

     

    서버 종료시

    destroy 호출


    servlet 어노테이션 함수

    @PostConstruct

    @PreDestroy

    세분화시킨 어노테이션

    package kr.gov.lifecycle;
    
    import java.io.IOException;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    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("/LC")
    public class LifecycleServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	
    	/*
    	 * init() : ctrl+space 눌러 직접 입력
    	 * 최초 한번만 실행 됨.
    	 */
    	@Override
    	public void init() throws ServletException {
    		System.out.println("init() 호출");
    	}
           
        public LifecycleServlet() {
        	System.out.println("생성자 호출");
        }
        /*
         * 실행되었을 때, 서블릿객체가 메모리에 로딩되고, 계속 재사용함.
         * 주소표시줄에 새고로고침을 계속하면 doGet()호출되는것 볼수 있음.
         */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet() 호출");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost() 호출");
    	}
    	
    	//서버를 중지시켜보면 destroy()가 호출되는 것을 볼수 있음.
    	@Override
    	public void destroy() {
    		System.out.println("destroy() 호출");
    	}
    	
    	/*
    	 * 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
    	 * 선처리 부분에 해당함.
    	 * init()메서드가 호출되기 전에 먼저 실행함.
    	 * @PostConstruct어노테이션 컴파일러에게 따로 지시함.
    	 */
    	@PostConstruct
    	private void initPostConstructor() {
    		System.out.println("initPostConstructor() 선처리");
    	}
    	
    	/*
    	 * 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
    	 * 후처리 부분에 해당함.
    	 * destroy()메서드가 호출된 후에 먼저 실행함.
    	 * @PreDestroy어노테이션 컴파일러에게 따로 지시함.
    	 */
    	@PreDestroy
    	private void destroyPredestroy() {
    		System.out.println("destroyPredestroy() 후처리");
    	}
    	
    }

    순서

    생성자 호출
    initPostConstructor() 선처리
    init() 호출
    doGet() 호출

     

    서버 중지할 경우

    destroy() 호출
    destroyPredestroy() 후처리


    service 메서드

    package kr.gov.lifecycle;
    
    import java.io.IOException;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    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("/LC")
    public class LifecycleServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	
    	/*
    	 * init() : ctrl+space 눌러 직접 입력
    	 * 최초 한번만 실행 됨.
    	 */
    	@Override
    	public void init() throws ServletException {
    		System.out.println("init() 호출");
    	}
           
        public LifecycleServlet() {
        	System.out.println("생성자 호출");
        }
        /*
         * 실행되었을 때, 서블릿객체가 메모리에 로딩되고, 계속 재사용함.
         * 주소표시줄에 새고로고침을 계속하면 doGet()호출되는것 볼수 있음.
         */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet() 호출");
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost() 호출");
    	}
    	
    	/*
    	 *  doGet(), doPost()가 없다면 service()가 호출되고,
    	 *  세가지 메서드가 다 존재하여도 service()가 호출됨.
    	 *   service()가 호출시에는 get,post방식 중 어떤 메서드 방식으로 호출이 되었는지 
    	 *   확인안됨. 그래서 doGet(), doPost()메서드를 사용함.
    	 */
    	@Override
    	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("service() 호출");
    	}
    	
    	//서버를 중지시켜보면 destroy()가 호출되는 것을 볼수 있음.
    	@Override
    	public void destroy() {
    		System.out.println("destroy() 호출");
    	}
    	
    	/*
    	 * 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
    	 * 선처리 부분에 해당함.
    	 * init()메서드가 호출되기 전에 먼저 실행함.
    	 * @PostConstruct어노테이션 컴파일러에게 따로 지시함.
    	 */
    	@PostConstruct
    	private void initPostConstructor() {
    		System.out.println("initPostConstructor() 선처리");
    	}
    	
    	/*
    	 * 오버라이딩 개념아님. 직접 메서드 만들어주는 것임.
    	 * 후처리 부분에 해당함.
    	 * destroy()메서드가 호출된 후에 먼저 실행함.
    	 * @PreDestroy어노테이션 컴파일러에게 따로 지시함.
    	 */
    	@PreDestroy
    	private void destroyPredestroy() {
    		System.out.println("destroyPredestroy() 후처리");
    	}
    	
    }
    
    
    
    
    

    생성자 호출
    initPostConstructor() 선처리
    init() 호출
    service() 호출


    HTML form 태그와 각종테그 사용 예제

    request객체로부터 값을 얻고, 응답할시에는 response객체를 이용함.

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>회원가입</title>
    </head>
    <body>
    	<form action="join" method="post">
    		이름 : <input type="text" name="name" size="10"/> <br/>
    		아이디 : <input type="text" name="id" size="10"/> <br/>		
    		비밀번호 : <input type="password" name="pw" size="10"/> <br/>	
    		<!-- check박스는 다중선택이 가능함. name이라는 속성은 반드시 동일한 값으로 설정해야함. -->
    		취미 : <input type="checkbox" name="hobby" value="read"/>독서 	
    			   <input type="checkbox" name="hobby" value="cook"/>요리 
    			   <input type="checkbox" name="hobby" value="run"/>조깅 
    			   <input type="checkbox" name="hobby" value="swim"/>수영 
    			   <input type="checkbox" name="hobby" value="bycle"/>라이딩
    			   <br/>
    		<!-- radio는 단 하나만 선택 가능함. name이라는 속성은 반드시 동일한 값으로 설정해야함.-->
    		<!-- checked속성 : 화면이 나타날때, 이미 선택되어서 나타내어주는 속성 -->	   
    		전공 : <input type="radio" name="major" value="kor" checked="checked"/>국문과  	
    			   <input type="radio" name="major" value="eng"/>영문과  	
    			   <input type="radio" name="major" value="math"/>수학과  	
    			   <input type="radio" name="major" value="des"/>디자인과
    			   <br/>
    		<select name="protocal">
    			<option value="http" selected="selected">HTTP</option>
    			<option value="ftp" >FTP</option>
    			<option value="smtp" >SMTP</option>
    			<option value="telnet" >TELNET</option>
    		</select>
    		<br/>
    		   
    		<input type="submit" value="전송">
    		<input type="reset" value="초기화">
    	</form>
    </body>
    </html>

    package kr.gov.httpservlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Arrays;
    
    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("/join")
    public class JoinServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        public JoinServlet() {
        	
        }
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost() 호출");
    		
    		/*
    		 * html의 form테그에서 클라이언트가 입력하고 전송한 값을 직접 request객체의
    		 * 메서드로 얻어서 출력해줌.
    		 * request, response객체는 톰켓 서버가 자동으로 생성 시켜준것임.
    		 * 즉 request객체로부터 값을 얻고, 응답할시에는 response객체를 이용함.
    		 */
    		
    		//한글 깨짐 방지하기 위해서 설정함.
    		request.setCharacterEncoding("UTF-8");
    		
    		String name = request.getParameter("name");
    		String id = request.getParameter("id");
    		String pw = request.getParameter("pw");
    		
    		//체크박스 : 다중값으로 String[]타입으로 리턴함.
    		String[] hobby = request.getParameterValues("hobby");
    		
    		String major = request.getParameter("major"); //전공 
    		String protocal = request.getParameter("protocal"); //프로토콜
    		
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter writer = response.getWriter();
    		
    		
    		
    		writer.println("<html><head></head><body>");
    		writer.println("이름 : " +name+ "<br/>");
    		writer.println("아이디 : " +id+ "<br/>");
    		writer.println("비밀번호 : " +pw+ "<br/>");
    		writer.println("취미 : " +Arrays.toString(hobby)+ "<br/>");
    		writer.println("전공 : " +major+ "<br/>");
    		writer.println("전송방식 : " +protocal+ "<br/>");
    		
    		writer.println("</body></html>");
    		writer.close(); //스트림 닫기
    		
    	}
    
    }
    


     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading