일단 해보는 코딩/JSP

[JSP] 서블릿2

eun_zoey2 2022. 8. 12. 15:33
728x90

package action;

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("/His")
/* 외부에서 http://localhost:8080/His로 접속하면 내부적으로 
HelloServlet3으로 매핑한다. tomcat2.5에서는 web.xml파일에서 자동으로 설정해주지만
tomcat3.x대에서는 @WebServlet()이라는 Annotation으로 web.xml없이 자동으로 완성된다.*/
public class HelloServlet3 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request
			, HttpServletResponse response) 
			throws ServletException, IOException {
		String ip=request.getRemoteAddr();
		System.out.println(ip + "Entered");
		response.setContentType("text/html;charset=utf-8");//한글 깨짐 방지
		// 하단 두줄은 클라이언트 브라우저에 결과를 출력함
		PrintWriter out = response.getWriter();
		out.printf("[%s]님의 방문을 환영합니다.",ip);
		System.out.println("Hello Servlet");
	}

}

서블릿에서 인자를 주어서 호출한다면

http://localhost:8080/Web.kahn.edu/Greet?nation=eng

http://localhost:8080/Web.kahn.edu/Greet?nation=kor 식으로 호출 할때 서블릿에서 파라미터 변수로 처리된다.

http로 전송되는 파라미터 변수는 거의 다 문자로 처리된다 따라서 String 객체 타입으로 해주면 (int, char.. 포함)된다.

기본값
http://localhost:8080/Web.kahn.edu/Greet ?nation=eng
http://localhost:8080/Web.kahn.edu/Greet ?nation=jpn
http://localhost:8080/Web.kahn.edu/Greet ?nation=chn

package Web.kahn.edu;

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("/Greet")
public class GreetServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request
			, HttpServletResponse response) 
			throws ServletException, IOException {
		String nation= request.getParameter("nation");
		// 문자타입으로 String 객체로 처리.
		String msg="";
		if (nation==null||nation.isEmpty()) {
		nation ="kor";	//별도의 인사말이 지정되지 않으면 한국어로
		}
		if (nation.equals("kor")) {
			msg="안녕하세요";
		} else if(nation.equals("eng")) {
			msg = "Hello";
		} else if (nation.equals("jpn")) {
			msg = "ありがとう";
		} else if (nation.equals("chn")) {
			msg = "你好"; 
		}
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
//		out.println("<html>");
		StringBuffer sb = new StringBuffer();
		sb.append("<html>");
		sb.append("<head>");
		sb.append("<title>인사말</title>");
		sb.append("</head>");
		sb.append("<body>");
		sb.append(msg);
		sb.append("</body>");
		sb.append("</html>");
		out.print(sb.toString()); // 전송 스트링 버퍼를 담아서 출력
	}
}

 

웹 프로그래밍을 서블릿으로만 개발하지 않는다. 서블릿은 JSP와 연동하기 위한 하나의 거쳐가는 과정이다.

<WebContent에서 html을 생성하고 위에있는 서블릿과 연동하기>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- <meta charset="EUC-KR"> -->
<title>Insert title here</title>
</head>
<body>
<!-- 서버로 데이터를 전송할 때에는 FORM 태그가 필요함 -->
<!-- action은 form 태그에 싸여 있는 정보를 전송할 서버쪽 객체_명으로 해야한다. -->
<form action="Greet">
	알고 싶은 외국 인사말은 ??? <br>
	<input type="radio" name="nation" value="kor" checked="checked">한국<br>
	<input type="radio" name="nation" value="eng">미국<br>
	<input type="radio" name="nation" value="jpn">일본<br>
	<input type="radio" name="nation" value="chn">중국<br>
<!-- form 태그에 지정된 정보를 전달하는 타입 => type=submit -->
<!-- 현재 form에는 radio button 밖에 없기때문에 하나만 선택됨  -->
	<input type="submit" value="알려주세요">
</form>
</body>
</html>

 

 

브라우저를 새로고침하면 반복적으로 3.4번이 실행이 된다

package lifecycle;

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("/LC")
public class LifeCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public LifeCycle() {	
    	// 서블릿이 작동될 때 Tomcat이 가장 먼저 호출하는 생성자
    	System.out.println("1. LifeCycle():servelet");
    }
	public void init(ServletConfig config) throws ServletException {
		// 브라우저 정보 초기화 
		System.out.println("2.init()");
	}
	protected void service(HttpServletRequest request
			, HttpServletResponse response) 
			throws ServletException, IOException {
		/* 요청방식으로 GET가 오면  doGet(), POST가 오면 doPost() 
		 * 부모 클래스의 service() 가 분기해준다. */
		System.out.println("3.service()");
		/* 원래는 부모의 service가 doGet이나 doPost를 호출하지만 재정의 상태에서는 
		 * super.service()가 없으면 doGet이나 doPost를 호출하지못한다 */
		super.service(request,response);
		/* super.service(request,response)에 들어가 보면,
		 * String method = request.getMethod();
		 * if(method.equals("Get")){
		 *   doGet(request,response);
		 * } else if(method.equals("POST")){
		 *   doPost(request,response);
		 * }으로 작동하게 된다. */
	}
	protected void doGet(HttpServletRequest request
			, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("4. doGet()");
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}
	protected void doPost(HttpServletRequest request
			, HttpServletResponse response) 
			throws ServletException, IOException {
		doGet(request, response);
		System.out.println("5.doPost()");
	}
	public void destroy() {
		// 클래스(현재 서블릿)의 정보가 끝나거나 변경될 때 호출됨
		System.out.println("6.destroy()");
	}
}

package Web.kahn.edu;

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("/jumin")
public class JuminServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Override
	protected void service(HttpServletRequest request
			, HttpServletResponse response) 
			throws ServletException, IOException {
			request.setCharacterEncoding("UTF-8");
			String year = request.getParameter("year");
			String age = request.getParameter("age");
			String season = request.getParameter("season");
			response.setContentType("text/html; charset=utf-8");
			StringBuffer sb = new StringBuffer();
			sb.append("<html>");
			sb.append("<head>");
			sb.append("<title>주민번호 정보 얻기</title>");
			sb.append("<style>");
			sb.append("table {border:1px solid black; border-collapse:collapse;}" + 
			"td {padding:10px;}");
			sb.append("</style>");
			sb.append("</head>");
			sb.append("<body>");
			sb.append("<table border='1'>");
			sb.append("<tr><td>출생년도</td><td>" + year + "</td></tr>");
			sb.append("<tr><td>나이</td><td>" + age + "</td></tr>");
			sb.append("<tr><td>계절</td><td>" + season + "</td></tr>");
			sb.append("</table>");
			sb.append("</body>");
			sb.append("</html>");
			response.getWriter().println(sb.toString());
	}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주민번호 폼</title>
<script type="text/javascript">
	function check(f){
		var jnum=f.jum.value.trim();
		var(juminCheck = /^\d{2}[0-1]\d[0-3]\d-[1-4]\d{6}$/;	//정규표현식
		if(!juminCheck.test(jnum)){
			alert("주민번호 형식이 옮바르지 않음");
			f.jum.value="";
			f.jnum.focus();
			return;
			}
		var y = jnum.substr(0,2); // 주민 번호에서 두 자리를 추출했을 때
		var y2 = "19";	//1900년도 인가를 체크
		if(y<=22){
			y2="20";
		}
		y2 +=y;
		var age = 2020-Number(y2)+1;	//+1이 없으면 만 나이 
		var season;
		switch (jnum.substr(2,2)){
		case"03": case"04":case"05":
			season = "봄";
			break;
		case"07": case"08":case"09":
			season = "여름";
			break;
		case"09": case"10":case"11":
			season = "가을";
			break;
		case"12": case"01":case"02":
			season = "겨울";
			break;
			
		}
		f.year.value = y2;
		f.age.value =age;
		f.season.value=season;
		f.submit();
	}
</script>
</head>
<body>
	<form method="post" action="jumin">
	주민번호 <input type="text" name="jnum" placeholder="xxxxxx-xxxxxxx">
	<input type="button" value="알아보기" onclick="check(this.form)">
	<input type="hidden" name="year" value="">
	<input type="hidden" name="age" value="">
	<input type="hidden" name="season" value="">
	
	</form>
</body>
</html>

'일단 해보는 코딩 > JSP' 카테고리의 다른 글

[JSP] JSP와 DB연결  (0) 2022.08.18
[JSP] VO(Value Object), 내장객체  (0) 2022.08.16
[JSP] JSP이란?  (0) 2022.08.16
[JSP] 작업설정하기  (0) 2022.08.16
[JSP] 서블릿 환경 설정하기  (0) 2022.08.11