환율 계산기 만들기 html 파일 없이 Servlet만 이용

    package kr.gov.httpservlet2;
    
    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;
           
    	private static float USD_RATE = 1100.91F; //달러
    	private static float JPY_RATE = 10.62F;	  //엔화
    	private static float CNY_RATE = 168.59F;  //위안
    	private static float GBP_RATE = 1493.58F; //파운드
    	private static float EUR_RATE = 1343.59F; //유로
    
        public CalcServlet() {
         
        }
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter writer = response.getWriter();
    		writer.println("<html><title>환율 계산기</title>");
    		writer.println("<font size=5>환율 계산기</font><br/> ");
    		writer.println("<form name='frmCalc' method='get' action='Calc' >");
    		writer.println("원화 : <input type='text' name='won' size=10 />");
    		writer.println("<select name='operator' >");
    		writer.println("<option value='doller' >달러</option>");
    		writer.println("<option value='en' >엔화</option>");
    		writer.println("<option value='wian' >위안</option>");
    		writer.println("<option value='pound' >파운드</option>");
    		writer.println("<option value='euro' >유로</option>");
    		writer.println("</select>");
    		
    		writer.println("<input type='hidden' name='command' value='calculate'>");
    		writer.println("<input type='submit' value='변환' />");
    		writer.println("</form></html>");
    		
    		String command = request.getParameter("command");
    		String won = request.getParameter("won");
    		String operator = request.getParameter("operator");
    		
    		//환율 계산결과 출력
    		if(command != null && command.equals("calculate")){
    			String result = calculate(Float.parseFloat(won), operator);
    			
    			writer.println("<html><font size=10>변환 결과</font></br>");
    			writer.println("<font size=10>" +result+ "</font></br>");
    			writer.println("<a href='Calc'>환율 계산기</a>");
    			
    			return;
    		}
    		
    		writer.close();
    	}
    	
    	//환율 계산하는 메서드
    	private static String calculate(float won, String operator) {
    		String result = null;
    		
    		if(operator.equals("doller")) {
    			result = String.format("%.6f", won / USD_RATE);
    		}
    
    		else if(operator.equals("en")) {
    			result = String.format("%.6f", won / JPY_RATE);
    		}
    
    		else if(operator.equals("wian")) {
    			result = String.format("%.6f", won / CNY_RATE);
    		}
    
    		else if(operator.equals("pound")) {
    			result = String.format("%.6f", won / GBP_RATE);
    		}
    
    		else if(operator.equals("euro")) {
    			result = String.format("%.6f", won / EUR_RATE);
    		}
    		
    		return result;
    	}
    	
    	
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	}
    
    }
    

    Float.parseFloat => 값을 실수 값으로 파싱

     

     


    디버깅 코드 더블클릭 후 F11키 디버깅 


    구구단 출력

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>구구단</title>
    </head>
    <body>
    	<h1>출력할 구구단의 수 입력해 주세요.</h1>
    	<form action="gugu" method="get">
    		출력할 구구단 : <input type="text" name="number" /><br/>
    		<input type="submit" value="구구단 출력">
    	</form>
    </body>
    </html>
    package kr.gov.httpservlet3;
    
    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;
    
    /**
     * Servlet implementation class GuguServlet
     */
    @WebServlet("/gugu")
    public class GuguServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public GuguServlet() {
        	
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		System.out.println("doGet() 호출");
    		
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter writer = response.getWriter();
    		
    		int number = Integer.parseInt(request.getParameter("number"));
    		
    		//예외를 처리하는 코드 추가
    		if(number < 1 || number > 9) {
    			writer.print("<html><head></head><body>");
    			writer.print("<h1>구구단은 2~9단 사이입니다.</h1>");
    			writer.print("</body></html>");
    			return;
    		}
    		
    		writer.print("<table border=1 width=800 align=center>");
    		writer.print("<tr align=center bgcolor='#ffff66'>");
    		writer.print("<td colspan=4>"+number+ "단 출력 </td>" );
    		
    		for (int i = 1; i < 10; i++) {
    			//홀수하고 짝수에 따라서 배경색을 바꿔준다.
    			if(i % 2 == 0) {
    				writer.print("<tr align=center bgcolor='#ACFAS8'>");
    			}else {
    				writer.print("<tr align=center bgcolor='#81BEF7'>");
    			}
    			writer.print("<td width=200>" +number+ "</td>");
    			writer.print("<td width=200>" +i+ "</td>");
    			writer.print("<td width=200>" +number+ "*" +i+ "</td>");
    			writer.print("<td width=200>" +number * i+  "</td>");
    			writer.print("</tr>");
    		}
    		writer.print("</table>");
    		writer.close();
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	}
    
    }
    

    예외처리 화면


    자바스크립트로 서블릿에 요청하기

    로그인 예외처리 자바스크립트

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>로그인 화면</title>
    </head>
    <body>
    	<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="button" onclick="func_validate()" value="로그인" />
    		<input type="reset" value="재입력" />
    		<!-- hidden 속성 : 클라이언트에게 숨겨진 내용으로 서버에 전송하고자 할 때 사용함.(로그인 시간, IP 등등) -->
    		<input type="hidden" name="user_address" value="구미시 원평동" /> 
    	</form>
    	<script type="text/javascript">
    		function func_validate() {
    			 /* frmLogin 변수 : documnet(웹페이지 화면)객체에 아래에 있는
    			 frmLogin 테그 이름을 대입함.*/
    			var frmLogin = document.frmLogin;
    			var user_id = frmLogin.user_id.value;
    			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";
    				frmLogin.action = "login";
    				frmLogin.submit();
    			}
    				
    		};
    	</script>
    </body>
    </html>
    package kr.gov.httpservlet;
    
    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;
    
    /**
     * Servlet implementation class LoginServlet
     */
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LoginServlet() {
    
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doPost()호출");
    		
    		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");
    		
    		System.out.println("아이디 : " + id);
    		System.out.println("비밀번호 : " + pw);
    		System.out.println("주소 : " + address);
    		
    		String data = "<html><body>";
    		data += "아이디 : " +id+ "<br/>";
    		data += "비밀번호 : " +pw+ "<br/>";
    		data += "주소 : " +address+ "<br/>";
    		data += "</html></body>";
    		
    		out.print(data);
    	}
    
    }
    


    서블릿 초기화 파라미터 ServletConfig

     

    web.xml 

    톰켓 서버자체에 특정 파라미터 설정한 것을 사용함. => 우선순위가 높음 둘 다 있을 경우.

     

    특정 서블릿에서만 매개변수를 사용하는 용도web.xml에 추가 

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>Chap04_Servlet-3</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 첫번째 방법 -->
      <servlet>
      	<!-- 특정 서블릿을 지정하는 코드 -->
      	<servlet-name>initParam</servlet-name>
      	<servlet-class>kr.gov.httpservlet2.InitParam</servlet-class>
      	
      	<!-- 특정서블릿(kr.gov.httpservlet2.InitParam)에만 적용된는 부분이다. 
      		 초기화 파라미터를 init-param테그를 이용하여 지정한다. -->
      	<init-param>
      		<param-name>id</param-name>
      		<param-value>admin</param-value>
      	</init-param>
      	
      	<init-param>
      		<param-name>pw</param-name>
      		<param-value>0217</param-value>
      	</init-param>
    	
    	<init-param>
      		<param-name>path</param-name>
      		<param-value>C:\\workspace-jsp</param-value>
      	</init-param>
      	
      </servlet>
      <!-- 서블릿 매핑코드 -->
      <servlet-mapping>
      	<servlet-name>initParam</servlet-name>
      	<url-pattern>/InitP</url-pattern>
      </servlet-mapping>
      
    </web-app>
    package kr.gov.httpservlet2;
    
    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;
    
    /**
     * Servlet implementation class InitParam
     */
    //@WebServlet("/InitParam")
    public class InitParam extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public InitParam() {
          
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet 호출");
    		
    		String id = this.getInitParameter("id");
    		String pw = this.getInitParameter("pw");
    		String path = this.getInitParameter("path");
    		
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		out.println("<html><head></head><body>");
    		out.println("아이디 : " +id+ "<br/>");
    		out.println("비밀번호 : " +pw+ "<br/>");
    		out.println("경로 : " +path+ "<br/>");
    		out.println("</body></html>");
    		
    		out.close();
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	}
    
    }
    


    서블릿 초기화 파라미터 ServletConfig 다른 방법

    어노테이션 이용 (관리자 계정에 사용)

    package kr.gov.httpservlet2;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 아래와 같이 어노테이션을 적용하기 위해서는 web.xml에 기술되어 있는 부분
     * 일단 주석처리함.
     * 주석처리를 해야 아래코드가 적용됨.
     * 어노테이션을 이용해서 직접 초기화 파라미터 값을 지정
     */
    /*
     * 소결론 : 초기화 파라미터를 사용하는 곳은, 보통 관리자 계정을 많이 사용하고,
     * 보통은 web.xml파일에 기술하는것이 바람직함.
     */
    //두번째 방법
    @WebServlet(urlPatterns = {"/InitP"},
    			initParams = {
    					@WebInitParam(name = "id", value = "scott"),
    					@WebInitParam(name = "pw", value = "tiger"),
    					@WebInitParam(name = "path", value = "C:\\workspace-jsp")
    			}
    		
    		)
    public class InitParam extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public InitParam() {
          
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet 호출");
    		
    		String id = this.getInitParameter("id");
    		String pw = this.getInitParameter("pw");
    		String path = this.getInitParameter("path");
    		
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		out.println("<html><head></head><body>");
    		out.println("아이디 : " +id+ "<br/>");
    		out.println("비밀번호 : " +pw+ "<br/>");
    		out.println("경로 : " +path+ "<br/>");
    		out.println("</body></html>");
    		
    		out.close();
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	}
    
    }


    데이터 공유 Servlet Context

     

    하나의 프로젝트 안에 여러 서블릿 파일에서 함께 공유하면서 사용할 수 있도록
    context-param태그를 이용해서 파라미터 값을 설정한다. 
    특정 서블릿 매핑하는 코드가 없는 것을 알 수 있다.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>Chap04_Servlet-3</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 첫번째 방법 -->
    <!--   <servlet>
      	특정 서블릿을 지정하는 코드
      	<servlet-name>initParam</servlet-name>
      	<servlet-class>kr.gov.httpservlet2.InitParam</servlet-class>
      	
      	특정서블릿(kr.gov.httpservlet2.InitParam)에만 적용된는 부분이다. 
      		 초기화 파라미터를 init-param테그를 이용하여 지정한다.
      	<init-param>
      		<param-name>id</param-name>
      		<param-value>admin</param-value>
      	</init-param>
      	
      	<init-param>
      		<param-name>pw</param-name>
      		<param-value>0217</param-value>
      	</init-param>
    	
    	<init-param>
      		<param-name>path</param-name>
      		<param-value>C:\\workspace-jsp</param-value>
      	</init-param>
      	
      </servlet>
      서블릿 매핑코드
      <servlet-mapping>
      	<servlet-name>initParam</servlet-name>
      	<url-pattern>/InitP</url-pattern>
      </servlet-mapping> -->
      
      <!-- 하나의 프로젝트 안에 여러 서블릿파일에서 함깨 공유하면서 사용할수 있도록
      	   context-param테그를 이용해서 파라미터 값을 설정함.
      	   특정 서블릿 매핑하는 코드가 없는 것을 알수 있다, -->
      <context-param>
      	<param-name>id</param-name>
      	<param-value>scott55</param-value>
      </context-param>
        <context-param>
      	<param-name>pw</param-name>
      	<param-value>tiger55</param-value>
      </context-param>
        <context-param>
      	<param-name>path</param-name>
      	<param-value>C:\\workspace-jsp</param-value>
      </context-param>
      
    </web-app>

    this.getServletContext(). getInitParameter() 사용

    package kr.gov.httpservlet3;
    
    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;
    
    /**
     * Servlet implementation class ContextInitParam
     */
    @WebServlet("/ContextIP")
    public class ContextInitParam extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ContextInitParam() {
     
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("doGet() 호출");
    		
    		String id = this.getServletContext().getInitParameter("id");
    		String pw = this.getServletContext().getInitParameter("pw");
    		String path = this.getServletContext().getInitParameter("path");
    		
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		out.println("<html><head></head><body>");
    		out.println("아이디 : " +id+ "<br/>");
    		out.println("비밀번호 : " +pw+ "<br/>");
    		out.println("경로 : " +path+ "<br/>");
    		out.println("</body></html>");
    		
    		out.close();
    		
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	}
    
    }

    같은 패키지에 공유가 되는지 확인

    package kr.gov.httpservlet3;
    
    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;
    
    /**
     * Servlet implementation class AnotherContextInitParamUse
     */
    @WebServlet("/Another")
    public class AnotherContextInitParamUse extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public AnotherContextInitParamUse() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    		String id = this.getServletContext().getInitParameter("id");
    		String pw = this.getServletContext().getInitParameter("pw");
    		String path = this.getServletContext().getInitParameter("path");
    		
    		response.setContentType("text/html; charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		out.println("<html><head></head><body>");
    		out.println("아이디 : " +id+ "<br/>");
    		out.println("비밀번호 : " +pw+ "<br/>");
    		out.println("경로 : " +path+ "<br/>");
    		out.println("</body></html>");
    		
    		out.close();
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }

    공유가 되는 것을 확인할 수 있다.


    웹 어플리케이션 감시 ServletContextListener

     

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