상세 컨텐츠

본문 제목

Servlet

FrontEnd/Servlet

by H_Develop 2022. 8. 15. 12:12

본문

html 창이 뜨는데 창 브라우저를 바꾸고 싶다면

창 브라우저 변경

 

 

이클립스에서

File => new => Project => Web => Dynamic Web Project 생성(name지정, New Runtime = Apache Tomcat 버전 지정, Dynamic web module version = 2.5, 3.0이상) => finish

확인방법 => 프로젝트 마우스 우클릭 => Build path 안에 Libarary => Classpath => Apache Tomcat 버전 확인.

서블릿 생성 => src(마우스 우클릭) => new =>Servlet => 패키지(action), 클래스 이름 지정=>next로 맵핑 이름 변경 수정 추가 가능 => next => Inherited abstract methods, service체크 나머지는 상관없음 =>finish

 

생성된 코드 예) 

확인방법: 빌드 확인이나 ip는 주소 창에 (http://192.168.100.199:8080/3.0proj/You)후 콘솔 창 확인

package action;

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("/You")
public class HiServlet 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 + "님이 접속했습니다.");
        res.setContentType("text/html; charset=utf-8");//한글깨짐을 위함
		PrintWriter out = res.getWriter();//브라우저에 결과를 출력
        out.printf("%s님 방문을 환영합니다", ip);//브라우저에 결과를 출력
		System.out.println("--HelloServlet:service() Call--");
	}
}

 

 

서블릿에 HTML 넣기1

 

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("/YOUR")
public class HelloServlet4 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest req, HttpServletResponse res) 
			throws ServletException, IOException {
		String ip = req.getRemoteAddr();
		System.out.println(ip+"님이 접속했습니다.");
		res.setContentType("text/html; charset=utf-8");
		PrintWriter out = res.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>환영합니당</title>");
		out.println("<style>h1{color:red}</style>");
		out.println("</head>");
		out.println("<body>");
		out.printf("<h1>[%s]님의 방문을 환영합니다.</h1>",ip);
		out.println("</body>");
		out.println("</html>");
		System.out.println("HelloServlet");	
	}
}

 

파라미터 변수

*서블릿에서 인자를 주어서 호출한다면 http://localhost:8080/web.kahn.edu/Greet?nation=eng 식으로 호출 할 때 이를 파라미터 변수로 처리 한다. http로 전송되는 파라미터 변수는 문자열을 처리해주는 String 객체 타입으로 해주면 (필요 시 숫자 등도 포함)된다.

서블릿에 파라미터 변수1)- 주소창에 파라미터 변수 넣어줌

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 req, HttpServletResponse res) 
			throws ServletException, IOException {
		String nation = req.getParameter("nation");//문자타입으로 파라미터 변수 처리
		String msg = "";
		if(nation ==null || nation.isEmpty()) {
			nation ="kor";
		}
		if(nation.contentEquals("kor")) {
			msg = "안녕";
		}else if(nation.contentEquals("eng")) {
			msg = "Hello";
		}else if(nation.contentEquals("jpn")) {
			msg = "こんにちは";
		}else if(nation.contentEquals("chn")) {
			msg = "你好";
		}
		res.setContentType("text/html; charset=utf-8");
		PrintWriter out = res.getWriter();		
		StringBuffer sb = new StringBuffer();
		sb.append("<html>");
		sb.append("<head>");
		sb.append("<title>인사말</title>");
		sb.append("<html>");
		sb.append("</head>");
		sb.append("<body>");
		sb.append(msg);
		sb.append("</body>");
		sb.append("</html>");
		out.print(sb.toString()); //전송 스트링 버퍼를 담아서 출력
	}

}

 

ex1-1)WebContent 안에 HTML파일 작성(각국인사말)

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<!-- <meta charset="UTF-8">-->
<title>각국 인사말</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>

 

ex사칙연산2 -서블릿

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("/Calc")
public class CalcServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		int su1 = Integer.parseInt(request.getParameter("su1"));
		int su2 = Integer.parseInt(request.getParameter("su2"));
		String result1 = " 결과 : " + (su1 + su2);
		String result2 = " 결과 : " + (su1 - su2);
		String result3 = " 결과 : " + (su1 * su2);
		String result4 = " 결과 : " + (su1 / su2);
		String result5 = String.format("%d %% %d = %d", su1, su2, (su1%su2));
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		StringBuffer sb = new StringBuffer();
		sb.append("<html>");
		sb.append("<head>");
		sb.append("<title>계산기</title>");
		sb.append("</head>");
		sb.append("<body>");
		sb.append(result1 + "<br>");
		sb.append(result2 + "<br>");
		sb.append(result3 + "<br>");
		sb.append(result4 + "<br>");
		sb.append(result5 + "<br>");
		sb.append("<a href='calc.html'>다시하기</a>");
		sb.append("</body>");
		sb.append("</html>");
		out.print(sb.toString());
		//response.getWriter().println(sb.toString()); 도 가능
	}
}

 

ex사칙연산2-1 WebContent 안에 HTML파일 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4칙 연산</title>
</head>
  <script type="text/javascript">
    function myClick(f) {
    	var su1 = f.su1.value.trim();
    	var su2 = f.su2.value.trim();
    	var num_pattern = /^[0-9]+$/' <!-- 정규표현식으로 0~9가지 확인 -->
    	if (!num_pattern.test(su)) {
    		alert("숫자를 입력하세요");
    		f.su1.value= "";
    		f.su1.focus();
    		return;
    	}
    	if (!num_pattern.test(su2)) {
    		alert("숫자를 입력하세요");
    		f.su2.value= "";
    		f.su2.focus();
    		return;
    	}
            f.su1.value = su1;
	    	f.su2.value = su2;
	    	// form의 정보를 calc 서블릿으로 전송!!
	    	// f.action="calc";
	    	f.submit();
	    }
	</script>
</head>
<body>
	<form name="fff" action="calc“>
		수1 : <input type="text" name="su1" value=""><br>
		수2 : <input type="text" name="su2" value=""><br>
		<input type="button" value="확인" onclick="myClick(this.form)">
	</form>
</body>
</html>

 

서블릿 라이프

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(): Servlet");
		    }
			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() 메써드가 없으면 doPOST나 doGET을 호출하지 않는다.
				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("3.doGET()");
				}

			protected void doPost(HttpServletRequest request
					, HttpServletResponse response) 
					throws ServletException, IOException {
				
				System.out.println("4.doPOST()");
			}
			public void destroy() {
				// 클래스 (현재 서블릿)의 정보가 끝나거나 변경될 때 호출됨
				System.out.println("5.destroy()");				
			}
		}

 

exex민증확인3 -서블릿

package 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("/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());
	}
}

 

ex민증확인3-1 WebContent 안에 HTML파일 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주민번호 폼</title>
<script type="text/javascript">

function check(f){
	var jnum = f.jnum.value.trim();
	var juminCheck =/^\d{2}[0-1]\d[0-3]\d-[1-4]\d{6}$/;
	// 주민번호 유효성 확인 정규표현식 표현
	if (!juminCheck.test(jnum)){
		alert("주민 번호 형식이 옳바르지 않음")
		f.jnum.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 "06": case "07" : case "08":
		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>

 

관련글 더보기