JSP

서블릿

서블릿 : server + applet
자바 클래스 형태의 웹 애플리케이션

 

  • 서블릿
    • 클라이언트의 요청처리, 그 결과를 반환하는 servlet 클래스의 구현 규칙을 지킨 기술
    • 자바를 사용하여 웹을 만들기 위해 필요한 기술
    • 클라이언트 요청을 하면 그에 대한 결과를 전송해야하는데(동적으로 작동), 이 역활을 하는 것이 자바 프로그램
    • ex)   id, pw → 로그인 버튼 → 서버는 클라이언트 id, pw를 확인하고 다음 페이지 띄워줘야하는데 → 서블릿이 이 역활을 한다
더보기

브라우저를 통해 자바 클래스가 실행되도록 하기 위해서는 javax.servlet.http 패키지에서 제공하는 HttpServlet클래스를 상속받아 구현해야 한다. 

JDK에서는 웹 애플리케이션을 제작할 수 있는 클래스가 제공되지 않고 톰캣을 설치하면 웹 애플리케이션을 제작할 수 있는 클래스가 제공되는데, 그 클래스가 HttpServlet이다.

 

웹 프로그래밍에서 가장 중요한 것은 클라이언트가 어떻게 서버에 요청하는지를 알아야 한다.

 

클라이언트는 서버에 get, post 두가지 방식 중 하나로 요청을 한다.

Get : 주소 창을 타고 넘어가기 때문에 서버로 보내는 데이터를 사용자가 그대로 볼수 있어 보안에 취약하다. 255자 이하의 적은 양의 데이터를 전송한다.

 

Post: html header를 타고 넘어가기 때문에 보안에 강하다. 대용량 데이터를 전송한다.

 

서버가 요청에 대한 처리를 마치고 클라이언트에게 결과를 되돌려주기 위해

HttpServletResponse로부터 PrintWriter형의 출력 스트림 객체를 얻어와야한다.

  • HttpServlet 상속받는이유
    • 요청에 대한 응답, 작업이 모두 기술되어 있기 때문에 상속받아야 한다.

 

  • 서블릿을 사용하는 이유
    • 복잡한 로직은 서블릿에 기술해 놓고 결과만을 jsp를 통해 클라이언트에게 제공된다
  •  서블릿 라이플 사이클
    • 서블릿 객체 생성   init()  →  doGet(), doPost()  →  destroy()
    • 클라이언트 요청이 있을때마다 doGet 또는 doPost 메소드 실행
    • 서블릿이 더 이상 서비스를 하지 않을 때 destroy()메소드 호출
    • 객체가 생성되면서 Init()메소드는 단 한번 호출됨 초기화 작업

 

  • 한글인코딩 깨짐 방지
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");

 

 

더보기
package part01;

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("/Member")
public class Member extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Member() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charsetUTF-8");
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pass1");
		
		// 출력
		PrintWriter out = response.getWriter();
		out.print("<body>");
		out.print(id + "<br>");
		out.print(pw + "<br>");
		out.print("</body>");
		out.close();
	}

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

}

 

  • javascript를 이용하여 id와 pw 공백을 체크하시오
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<head>
	<title>ser02</title>
	<script type="text/javascript" src="ser02.js"></script>
</head>
<body>
	<form action="Hello" method="get" name="fr">
		아이디:<input type="text" name="id"><br>
		나이:<input type="text" name="age"><br>
		<input type="submit" value="전송" onclick="return check()" >
	</form>
</body>
function check(){
	if((fr.id.value == "") || (fr.age.value == "")) {
		alert("아이디와 비밀번호를 모두 입력하세요");
		return false;
	}
	return true;
}
@WebServlet("/Hello")
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Hello() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charsetUTF-8");
		String id = request.getParameter("id");
		int age = Integer.parseInt(request.getParameter("age"));
		
		PrintWriter out = response.getWriter();
		out.print(id + "<br>");
		out.print(age + "<br>");
		out.close();
	}

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

 

 

  • 선택한 값을 가지고 서블릿을 통해 페이지 이동
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<title>serMain</title>
<body>
<form action="ser01" method="get">
	성별: 
	<input type="radio" name="gender" value="m">남자
	<input type="radio" name="gender" value="f">여자
	<input type="submit">
</form>
</body>
@WebServlet("/ser01")
public class ser01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ser01() {
        super();
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis = request.getRequestDispatcher("serRead.jsp");
		dis.forward(request, response);
	}

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

}
<title>serRead</title>
<body>
<%
	request.setCharacterEncoding("UTF-8");
	String gen = request.getParameter("gender");
	
	if(gen.equals("m")){
		out.print("man");
	} else {
		out.print("women");
	}
%>
</body>

 

 

  • 회원가입 폼,   js를 이용하여 비밀번호 체크 ,   서블릿에서 처리
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>join</title>
    <style>
		body {background-color: aliceblue;}
        table {width: 700px;  }
        table tr th{ border-bottom: 1px solid #666; height: 30px;}
        table tr td{ border-bottom: 1px solid #666; height: 30px;}
        .btnSet {
            text-align: right;
            border: none;
        }
    </style>
    <script>
    	function setEmail() {
			//선택한 값 저장할 곳
			var email2 = document.getElementById("email2");
			//메일 주소 선택할 곳
			var email3 = document.getElementById("email3");
			
			email2.value = email3.value; 
		}
    	
        function chk(){
            //주민번호 체크
            var pNum1 = addMem.persNum1.value;
            var pNum2 = addMem.persNum2.value;
            if(isNaN(pNum1) || isNaN(pNum2) ){
                alert("주민번호는 숫자만 입력 가능합니다.");
                return false;
            }


            //비밀번호 체크
            var pw1 = addMem.pass1.value;
            var pw2 = addMem.pass2.value;

            if(pw1 != pw2){
                alert("비밀번호가 틀렸습니다. ");
                return false;
            }
            
            //전화번호
            var tel = addMem.tel.value;
            if(tel.indexOf("-") == -1){
	    		alert("'-'을 포함해서 입력하세요");
            	addMem.tel.focus();
	        	return false;
            }
            
        }
    </script>
</head>
<body>

    <h3>회원가입</h3>
	<form action="JoinServlet"  method="post" name="addMem" onsubmit="return chk()">
	<table>	
        <tr>
            <th>이름</th>
            <td><input type="text" name="uName"></td>
        </tr>
        <tr>
            <th>주민번호</th>
            <td><input type="text" name="persNum1"> - <input type="text" name="persNum2"></td>
        </tr>
        <tr>
            <th>아이디</th>
            <td><input type="text" name="uid" required></td>
        </tr>
        <tr>
            <th>비밀번호</th>
            <td><input type="password" name="pass1" required></td>
        </tr>
        <tr>
            <th>비밀번호 확인</th>
            <td><input type="password" name="pass2" required></td>
        </tr>
        <tr>
            <th>이메일</th>
            <td>
                <input type="text" name="email1"> @ 
                <input id="email2" type="text" name="email2" value="">
                <select id="email3" name="email3" onchange="setEmail()">
                	<option value="" selected disabled>메일주소선택</option> 
                    <option value="naver.com">naver.com</option>
                    <option value="nate.com">nate.com</option>
                    <option value="google.com">gmail.com</option>
                </select>
            </td>
        </tr>
        <tr>
            <th>우편번호</th>
            <td><input type="text" name="postNum"></td>
        </tr>
        <tr>
            <th>주소</th>
            <td><input type="text" name="addr1"> <input type="text" name="addr2"></td>
        </tr>
        <tr>
            <th>전화번호</th>
            <td><input type="tel" name="tel"></td>
        </tr>
        <tr>
            <th>직업</th>
            <td>
                <select name="job" multiple>
                    <option value="학생">학생</option>
                    <option value="컴퓨터/인터넷">컴퓨터/인터넷</option>
                    <option value="언론">언론</option>
                </select>
            </td>
        </tr>
        <tr>
            <th>메일/SMS 정보 수신</th>
            <td>
                <input type="radio" name="chkSms" value="y">수신
                <input type="radio" name="chkSms" value="n">수신 거부
            </td>
        </tr>
        <tr>
            <td colspan="2" class="btnSet">
                <input type="submit" value="회원가입">
                <input type="reset" value="취소">
            </td>
        </tr>
    </table>
    </form>

</body>
</html>
@WebServlet("/JoinServlet")
public class JoinServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public JoinServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

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

		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		//값 받아오기
		String name = request.getParameter("uName");
		String persNum1 = request.getParameter("persNum1");
		String persNum2 = request.getParameter("persNum2");
		String uid = request.getParameter("uid");
		String pass2 = request.getParameter("pass2");
		
		String email1 = request.getParameter("email1");
		String email2 = request.getParameter("email2");
		
		String postNum = request.getParameter("postNum");
		String addr1 = request.getParameter("addr1");
		String addr2 = request.getParameter("addr2");
		String tel = request.getParameter("tel");
		
		String job = request.getParameter("job");
		String chkSms = request.getParameter("chkSms");
		String sms;
		if(chkSms.equals("y")) {
			sms="받겠습니다.";
		} else {
			sms="받지 않겠습니다.";
		}
		
		//저장 정보 출력하기
		PrintWriter out = response.getWriter();
		out.print("<body>");
		out.print(name +"님 반갑습니다." + "<br>");
		out.print("주민번호: "+persNum1+"-"+persNum2 + "<br>");
		out.print("아이디는 "+uid +"이고 비밀번호는 "+pass2 + "입니다. <br>");
		out.print("메일주소: "+email1+"@"+email2 + "<br>");
		out.print("우편번호: "+postNum + "<br>");
		out.print("주소: "+addr1+" "+addr2 + "<br>");
		out.print("전화번호: "+tel + "<br>");
		
		out.print("직업은 "+job +"이고 sms는 "+sms+ "<br>");
		
		out.print("</body>");
		out.close();
	}

}

 

 

 

 

 

728x90
728x90

'JSP' 카테고리의 다른 글

DB 전까지의 문제  (0) 2022.07.14
DB 연동  (0) 2022.07.14
JAVABEANS  (0) 2022.07.12
jsp review  (0) 2022.07.12
액션 태그  (0) 2022.07.11