0503

조성현·2023년 5월 3일
0

init과 service

실행 클래스

package servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletEx01 extends HttpServlet {
	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("ServletEx01 init() 호출");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("ServletEx01 service() 호출");
	}
}

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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>InitServletEx01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>servlet01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
  
</web-app>


=> init은 한 번만 실행되고 service는 호출 받을 때 마다 실행 된다.

초기값을 지정해서 출력해보기

실행 클래스

public class ServletEx01 extends HttpServlet {
	// 초기 데이터
	private String id;
	private String password;

	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("ServletEx01 init() 호출");
		// web.xml에서 초기값을 지정한다
		id = getInitParameter("id");
		password = getInitParameter("password");
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("ServletEx01 service() 호출");
		
		System.out.println("id : " + id);
		System.out.println("p/w : " + password);
	}
}

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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>InitServletEx01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>servlet01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  	<init-param>
  		<param-name>id</param-name>
  		<param-value>tester</param-value>
  	</init-param>
  	<init-param>
  		<param-name>password</param-name>
  		<param-value>123456</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
  
</web-app>


=> 마찬가지로 init은 한 번만 실행된다

laod-on-startup

: 실행 순서를 지정한다 -> 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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>InitServletEx01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  <!-- ServletEx01 -->
  <servlet>
  	<servlet-name>servlet01</servlet-name>
  	<servlet-class>servlet.ServletEx01</servlet-class>
  	<init-param>
  		<param-name>id</param-name>
  		<param-value>tester</param-value>
  	</init-param>
  	<init-param>
  		<param-name>password</param-name>
  		<param-value>123456</param-value>
  	</init-param>
    //									//
  	<load-on-startup>1</load-on-startup>
    //									//
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet01</servlet-name>
  	<url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
  <!-- ServletEx02 -->
  <servlet>
  	<servlet-name>servlet02</servlet-name>
  	<servlet-class>servlet.ServletEx02</servlet-class>
  	//									//
  	<load-on-startup>2</load-on-startup>
    //									//
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet02</servlet-name>
  	<url-pattern>/servlet02</url-pattern>
  </servlet-mapping>
  
</web-app>

filter

front controller

  1. Parameter
    서블릿이름?키=값1 -> 다른 jsp
    서블릿이름?키=값2 -> 다른 jsp
    ex)
    controller?action=view1 -> View1Action view1.jsp
    controller?action=view2 -> View2Action view2.jsp

  2. URL
    값1.do -> 다른 jsp
    값2.do -> 다른 jsp
    ex)
    view1.do -> view1.jsp
    view2.do -> view2.jsp

예제1
Action(interface)
controller?path=form -> FormAction form.jsp
controller?path=form_ok -> FormOKAction form_ok.jsp

컨트롤러를 통해 우편번호 출력하기

!!실행순서 잘 파악하기

ZipcodeController

package controller;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model2.Action;
import model2.ZipcodeAction;
import model2.ZipcodeOkAction;

/**
 * Servlet implementation class ZipcodeController
 */
@WebServlet("/controller")
public class ZipcodeController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		try {
			request.setCharacterEncoding("utf-8");
			
			String path = request.getParameter("path");
			
			Action action = null;
			
			// 페이지 설정
			String url = "/WEB-INF/views/error.jsp";
			if(path == null || path.equals("") || path.equals("zipcode")) {
				action = new ZipcodeAction();
				action.execute(request, response);
				url = "/WEB-INF/views/zipcode.jsp";
			} else if(path.equals("zipcode_ok")) {
				action = new ZipcodeOkAction();
				action.execute(request, response);
				url = "WEB-INF/views/zipcode_ok.jsp";
			}
			// 페이지 보여주기
			RequestDispatcher dispatcher = request.getRequestDispatcher(url);
			dispatcher.forward(request, response);
			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("에러 : " + e.getMessage());
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			System.out.println("에러 : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("에러 : " + e.getMessage());
		}
	}
}

ZipcodeDAO

public class ZipcodeDAO {
	private DataSource dataSource;
	
	public ZipcodeDAO() {

		try {
			// 데이터베이스 접속
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup( "java:comp/env" );
			this.dataSource = (DataSource)envCtx.lookup( "jdbc/mariadb2" );
			
		} catch( NamingException e ) {
			System.out.println( "[에러] " + e.getMessage() );
		}
	}
	
	public ArrayList<ZipcodeTO> listZipcode(String strDong){
		ArrayList<ZipcodeTO> datas = new ArrayList<>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = this.dataSource.getConnection();
			
			String sql = "select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, strDong + "%");
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setZipcode(rs.getString("zipcode"));
				to.setSido(rs.getString("sido"));
				to.setGugun(rs.getString("gugun"));
				to.setDong(rs.getString("dong"));
				to.setRi(rs.getString("ri"));
				to.setBunji(rs.getString("bunji"));
				
				datas.add(to);
			}
		}  catch( SQLException e ) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if( conn != null ) try {conn.close();} catch(SQLException e) {}
			if( pstmt!= null ) try {pstmt.close();} catch(SQLException e) {}
			if( rs != null ) try {rs.close();} catch(SQLException e) {}
		}
		return datas;
	}
}

ZipcodeTO

public class ZipcodeTO {
	private String zipcode;
	private String sido;
	private String gugun;
	private String dong;
	private String ri;
	private String bunji;
	private String seq;
    
    getter/setter 생성
}

Action

package model2;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {
	void execute(HttpServletRequest request, HttpServletResponse response);
}

ZipcodeAction

package model2;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ZipcodeAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
	}
}

ZipcodeOkAction

package model2;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model1.ZipcodeDAO;
import model1.ZipcodeTO;

public class ZipcodeOkAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		String strDong = request.getParameter("dong");
		System.out.println("strDong : " + strDong);
		// to dao
		
		ZipcodeDAO dao = new ZipcodeDAO();
		ArrayList<ZipcodeTO> datas = dao.listZipcode(strDong);
		
		//System.out.println("갯수 : " + datas.size());
		request.setAttribute("datas", datas);
	}
}

context.xml

<?xml version="1.0" encoding="utf-8" ?>
<Context>
	<Resource
		name="jdbc/mariadb2"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="org.mariadb.jdbc.Driver"
		url="jdbc:mariadb://localhost:3306/project"
		username="project"
		password="1234" />
</Context>

zipcode.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

우편번호 검색<br><br>
<form action="controller" method="post">
<input type="hidden" name="path" value="zipcode_ok"/>
동 이름 <input type="text" name="dong"/>
<input type="submit" value="검색"/>
</form>

</body>
</html>

zipcode_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model1.ZipcodeTO" %>
<%@ page import="java.util.ArrayList" %>
<%
	ArrayList<ZipcodeTO> datas = (ArrayList)request.getAttribute("datas");


	StringBuilder sbHtml = new StringBuilder();
	
	sbHtml.append("<table width='800' border='1'>");
	for(ZipcodeTO to : datas) {
		sbHtml.append("<tr>");
		sbHtml.append("		<td>" + to.getZipcode() + "</td>");
		sbHtml.append("		<td>" + to.getSido() + "</td>");
		sbHtml.append("		<td>" + to.getGugun() + "</td>");
		sbHtml.append("		<td>" + to.getDong() + "</td>");
		sbHtml.append("		<td>" + to.getRi() + "</td>");
		sbHtml.append("		<td>" + to.getBunji() + "</td>");
		sbHtml.append("</tr>");
	}
	sbHtml.append("</table>");
	
	out.println(sbHtml);
%>
</body>
</html>

model1을 model2로 바꾸기

0개의 댓글