본문 바로가기

카테고리 없음

52/servlet/MVCmodel2/init()/load-on-startup

HttpServlet

                  service

                                    get / post 상관없이 무조건 호출

                  doGet

                                    get방식

                  doPost

                                    post방식

                  init

                                    생성자 비슷 : 1회만 호출

                  destory

 

 

파라메터 방식

http://localhost:8080/프로젝트명/서블릿명?커맨드=값1   => 뷰1

http://localhost:8080/프로젝트명/서블릿명?커맨드=값2   => 뷰2

 

URI방식

http://localhost:8080/프로젝트명/서블릿명/값1.do   => 뷰1

http://localhost:8080/프로젝트명/서블릿명/값2.do   => 뷰2

 

1.

http://localhost:8080/프로젝트명/controller?action=view1           View1Action     view1.jsp

http://localhost:8080/프로젝트명/controller?action=view2           View2Action     view2.jsp

 

                                                                                                    Action

http://localhost:8080/프로젝트명/controller?action=form            GugudanAction             gugudan.jsp

http://localhost:8080/프로젝트명/controller?action=form_ok      GugudanOKAction        gugudan_ok.jsp

 

 

파일질라

GugudanEx02_1.7z - mvc

GugudanEx02_2.7z - source 전부

 

 

 

 


HttpServlet 상속

 

HttpServlet 을 상속받는 클래스는 doGet 과 doPost를 오버라이드 할 수 있다

클래스 생성시 Browse에서 HttpServlet 상속받기


<%@ 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>

<form action="./form_ok" method="get">
데이터1 <input type="text" name="data1" />
<input type="submit" value="전송" />
</form>

<form action="./form_ok" method="post">
데이터1 <input type="text" name="data1" />
<input type="submit" value="전송" />
</form>

</body>
</html>

form.jsp

 

위의 form은 get방식

아래의 form은 post방식이다

 

form클래스에서 실행

 

 

package servlet1;

import java.io.IOException;
import java.io.PrintWriter;

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
	// service는 get post 방식 상관없이 무조건호출(많이쓰이지는 않음)
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		// 입력처리
		req.setCharacterEncoding("utf-8");
		
		String data1 = req.getParameter("data1");
		
		// 출력처리
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf-8' />");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet : " + data1);
		out.println("</body>");
		out.println("</html>");
		
		out.close();
	}
}

ServletEx01.java

서블릿 클래스

<?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>ServletEx02</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>servlet1</servlet-name>
  	<servlet-class>servlet1.ServletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet1</servlet-name>
  	<url-pattern>/form_ok</url-pattern>
  </servlet-mapping>
</web-app>

web.xml

 

get방식
post방식

현재 서블릿클래스에서 호출하는 방식은 service방식이다

service방식은 get과 post를 상관하지않고 호출시킬수있지만

보안상의 이유로 많이 쓰이지는 않음

 

servlet클래스와 form클래스 web.xml을 연결할수 있다

 

1.web.xml에서 url 패턴을 원하는 경로로 지정

2. form클래스에서 action을 url패턴에서 지정해준 경로로 지정

 

 


package servlet1;

import java.io.IOException;
import java.io.PrintWriter;

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

public class ServletEx02 extends HttpServlet {
	
	// doget(get방식 호출 / ctrl + 엔터)
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf-8' />");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet : get 호출");
		out.println("</body>");
		out.println("</html>");
		
		out.close();
	}
	
	// dopost(post방식 호출 / ctrl + 엔터)
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf-8' />");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet : post 호출");
		out.println("</body>");
		out.println("</html>");
		
		out.close();
	}
}

ServletEx02.java

서블릿클래스

<?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>ServletEx02</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>servlet1</servlet-name>
  	<servlet-class>servlet1.ServletEx02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet1</servlet-name>
  	<url-pattern>/form_ok</url-pattern>
  </servlet-mapping>
</web-app>

web.xml

 

get방식
post방식

 

service 방식이 아닌 get방식post방식을 따로 만들어주어 실행 시킬수 있다

( doget / dopost 입력후 ctrl + enter 로 추가시키면 됨 )

 


package servlet1;

import java.io.IOException;
import java.io.PrintWriter;

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

public class ServletEx03 extends HttpServlet {
	//service가 아닌 get과post 통합호출
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp)  {
		// TODO Auto-generated method stub
		try {
			req.setCharacterEncoding("utf-8");
			
			String data1 = req.getParameter("data1");
			
			resp.setContentType("text/html; charset=utf-8");
			
			PrintWriter out = resp.getWriter();
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset='utf-8' />");
			out.println("</head>");
			out.println("<body>");
			out.println("Hello Servlet : 통합 호출 : " + data1);
			out.println("</body>");
			out.println("</html>");
			
			out.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러]" + e.getMessage());
		}
	}
}

ServletEx03.java

서블릿클래스

 

<?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>ServletEx02</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>servlet1</servlet-name>
  	<servlet-class>servlet1.ServletEx03</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servlet1</servlet-name>
  	<url-pattern>/form_ok</url-pattern>
  </servlet-mapping>
</web-app>

web.xml

 

get
post

통합요청방식

 

get방식과 post방식을로 소스코드를 2개를 작성할 필요없이

하나로 통합해 작성할 수 있음

 


 

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Gugudan1 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf-8' />");
		out.println("</head>");
		out.println("<body>");
		for(int i=1; i<=9; i++) {
		out.println("1 * " + i + " = " + (1 * i) + "<br>");
		}
		out.println("</body>");
		out.println("</html>");
		
		out.close();
	}
}

Gugudan1.java

서블릿클래스

 

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Gugudan2 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf-8' />");
		out.println("</head>");
		out.println("<body>");
		for(int i=1; i<=9; i++) {
		out.println("2 * " + i + " = " + (2 * i) + "<br>");
		}
		out.println("</body>");
		out.println("</html>");
		
		out.close();
	}
}

Gugudan2.java

서블릿클래스

 

<?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>GugudanEx01</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>gugudan1</servlet-name>
  	<servlet-class>servlet.Gugudan1</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>gugudan1</servlet-name>
  	<url-pattern>/gugudan/1dan</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>gugudan2</servlet-name>
  	<servlet-class>servlet.Gugudan2</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>gugudan2</servlet-name>
  	<url-pattern>/gugudan/2dan</url-pattern>
  </servlet-mapping>

   
</web-app>

web.xml

 

Gugudan1.java
Gugudan2.java

 

구구단 form문 없이 서블릿클래스로 실행

(service방식)

 


package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Gugudan extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		
		String dansu = req.getRequestURI().replaceAll("/GugudanEx01/gugudan", "");
		
		if(dansu.equals("/*") || dansu.equals("/1dan")) {
			
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset='utf-8' />");
			out.println("</head>");
			out.println("<body>");
			for(int i=1; i<=9; i++) {
			out.println("1 * " + i + " = " + (1 * i) + "<br>");
			}
			out.println("</body>");
			out.println("</html>");
			
		} else if(dansu.equals("/2dan")){
			
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<meta charset='utf-8' />");
			out.println("</head>");
			out.println("<body>");
			for(int i=1; i<=9; i++) {
			out.println("2 * " + i + " = " + (2 * i) + "<br>");
			}
			out.println("</body>");
			out.println("</html>");
		}
		
	}
}

Gugudan.java

서블릿클래스

 

<?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>GugudanEx01</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>gugudan</servlet-name>
  	<servlet-class>servlet.Gugudan</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>gugudan</servlet-name>
  	<url-pattern>/gugudan/*</url-pattern>
  </servlet-mapping>

   
</web-app>

web.xml

 

1단
2단

 

클래스를 나누지 않고 한 클래스로 실행

 


package servlet2;

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

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

// 한 페이지 내에서 구구단문출력
public class Gugudan extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) {
		// TODO Auto-generated method stub

		try {
			req.setCharacterEncoding("utf-8");
			
			String startdan = req.getParameter("startdan");
			String enddan = req.getParameter("enddan");
			
			resp.setContentType("text/html; charset=utf-8");
			
			StringBuilder sbHtml = new StringBuilder();
			sbHtml.append("<!DOCTYPE html>");
			sbHtml.append("<html>");
			sbHtml.append("<head>");
			sbHtml.append("<meta charset='utf-8' />");
			sbHtml.append("</head>");
			sbHtml.append("<body>");
			sbHtml.append("<form action='./gugudan.do' method='post' >");
			sbHtml.append("시작단 <input type='text' name='startdan' />");
			sbHtml.append(" ~ ");
			sbHtml.append("끝단 <input type='text' name='enddan' />");
			sbHtml.append("<input type='submit' value='구구단 출력' />");
			sbHtml.append("</form>");
			
			if(startdan != null && enddan != null) {
				sbHtml.append("<br>결과 : <br>");
				
				int iStartdan = Integer.parseInt(startdan);
				int iEnddan = Integer.parseInt(enddan);
				
				sbHtml.append("<table border='1' width='800'>");
				for(int i=iStartdan; i<=iEnddan; i++) {
					sbHtml.append("<tr>");
					for(int j=1; j<=9; j++) {
						sbHtml.append("<td>" + i + "X" + j + "=" + (i*j) + "</td>");
					}
					sbHtml.append("</tr>");
				}
				sbHtml.append("</table>");
			}
			
			sbHtml.append("</body>");
			sbHtml.append("</html>");
			
			PrintWriter out = resp.getWriter();
			out.println(sbHtml.toString());
			out.close();
			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		}
	}
}

servlet2 패키지의 Gugudan.java

서블릿 클래스

 

통합호출doProcess의 throw구문을 삭제하고 내부에서 try catch를 잡아준다

 

<?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>GugudanEx01</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>gugudan</servlet-name>
  	<servlet-class>servlet2.Gugudan</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>gugudan</servlet-name>
  	<url-pattern>/gugudan.do</url-pattern>
  </servlet-mapping>

   
</web-app>

web.xml

 


데이터베이스를 연결해 servlet클래스로 우편번호 검색기 만들기

 

db연결시 필수사항

1. META-INF 폴더에 context.xml 집어넣기

2. lib폴더에 db연결 jar집어넣기 

 

 

package model1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class ZipcodeDAO {
	private DataSource dataSource;
	
	public ZipcodeDAO() {
		// TODO Auto-generated constructor stub
		
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup("java:comp/env");
			DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb2");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		}
	}
	
	public ArrayList<ZipcodeTO> listZipcode(String strDong){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> zipcodeLists = new ArrayList<>();
		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"));
				
				zipcodeLists.add(to);
			}
		}catch(SQLException e) {
			System.out.println("[에러] : " + e.getMessage());
		}finally {
			if(pstmt != null) try{pstmt.close();} catch(SQLException e){}
			if(rs != null) try{rs.close();} catch(SQLException e){}
			if(conn != null)try { conn.close();} catch(SQLException e){}
		}
		
		
		return zipcodeLists;
	}
}

ZipcodeDAO

 

 

package model1;

public class ZipcodeTO {
	private String zipcode;
	private String sido;
	private String gugun;
	private String dong;
	private String ri;
	private String bunji;
	
	public String getZipcode() {
		return zipcode;
	}
	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}
	public String getSido() {
		return sido;
	}
	public void setSido(String sido) {
		this.sido = sido;
	}
	public String getGugun() {
		return gugun;
	}
	public void setGugun(String gugun) {
		this.gugun = gugun;
	}
	public String getDong() {
		return dong;
	}
	public void setDong(String dong) {
		this.dong = dong;
	}
	public String getRi() {
		return ri;
	}
	public void setRi(String ri) {
		this.ri = ri;
	}
	public String getBunji() {
		return bunji;
	}
	public void setBunji(String bunji) {
		this.bunji = bunji;
	}
	
}

ZipcodeTO

 

 

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

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

import model1.ZipcodeDAO;
import model1.ZipcodeTO;

public class servletEx01 extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp){
		// TODO Auto-generated method stub
		
		try {
			req.setCharacterEncoding("utf-8");
			
			String strDong = req.getParameter("dong");
			
			resp.setContentType("text/html; charset=utf-8");
			
			StringBuilder sbHtml = new StringBuilder();
			sbHtml.append("<!DOCTYPE html>");
			sbHtml.append("<html>");
			sbHtml.append("<head>");
			sbHtml.append("<meta charset='utf-8' />");
			sbHtml.append("</head>");
			sbHtml.append("<body>");
			sbHtml.append("<form action='./zipcodesearch.do' method='post' >");
			sbHtml.append("동이름 <input type='text' name='dong' />");
			sbHtml.append("<input type='submit' value='우편번호 검색' />");
			sbHtml.append("</form>");
			
			if(strDong != null) {
				sbHtml.append("<br>결과 : <br>");
				ZipcodeDAO dao = new ZipcodeDAO();
				ArrayList<ZipcodeTO> zipcodeLists = dao.listZipcode("도화");
				sbHtml.append("데이터 갯수: " + zipcodeLists.size());
			}
			
			sbHtml.append("</body>");
			sbHtml.append("</html>");
			
			PrintWriter out = resp.getWriter();
			out.println(sbHtml.toString());
			out.close();
			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		}
	}
}

servletEx01.java

 

 

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

context.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>ZipcodeSearchEx01</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>zipcodeserch</servlet-name>
  	<servlet-class>servlet.servletEx01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>zipcodeserch</servlet-name>
  	<url-pattern>/zipcodeserch.do</url-pattern>
  </servlet-mapping>
  
</web-app>

web.xml

 

 


어노테이션(Annotation) 기법

어노테이션이란 프로젝트 생성시 web.xml을 생성하는 체크박스

를 체크해 web.xml로 맵핑을 할 필요없이 서블릿 클래스안에서 맵핑을 할수 있는것을 말한다.


 

package servlet1;

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;

// 어노테이션 기법 = web.xml 에서 servlet 맵핑을 할 필요 없음

@WebServlet( { "/servlet/*" } ) // 요청 url / ({"/servlet1", "/servlet2"}) 도 가능
public class ServletEx01 extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) {
		// TODO Auto-generated method stub
		System.out.println("doProcess 호출");
	}
}

ServletEx01.java

서블릿 클래스

 

 

@WebServlet 을 import시켜 ( { " " } ) 의 따옴표안에 web.xml에서 썼던 맵핑의 url패턴을 넣어주면

web.xml없이도 서블릿 실행가능

 

({"/servlet1", "/servlet2"}) 처럼 맵핑을 여러개 할 수있음


 

위의 어노테이션을 수기로 작성할수도 있지만 eclipse의 기능을통해

 자동으로 @WebServlet 구문이 생성되는 클래스를 만들 수 있음.

 

1.

패키지 안에 클래스 생성시 Servlet이라는 클래스 생성

 

2.

Class name에 원하는이름 넣고 Next

 

3.

URL mappings안에있는 ServletEx03 클릭 후 Edit.. 클릭

 

4.

url 패턴 입력하기

 

5.

Constructors from superclass 체크 해제,

doGet, doPost 체크

 

package servlet2;

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;

/**
 * Servlet implementation class ServletEx03
 */
@WebServlet("/servlet3/*")
public class ServletEx03 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
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
	}

}

생성시 기본 디폴트값

(예시로 만든 클래스)

 

 

 

package servlet2;

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;

/**
 * Servlet implementation class ServletEx02
 */
@WebServlet( urlPatterns = {"/servlet2/*"} )
public class ServletEx02 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
		System.out.println("123");
	}

}

ServletEx02.java

 

doGet과 doPost를 통합하는 Process를 만든다

 또한 doGet과 doPost에 doProcess(request, response); 코드를 넣어준다

 

디폴트값의 클래스에서 @WebServlet 은 하나의 맵핑만 할수있지만

ServletEx02 에서 @WebServlet( urlPatterns = { "/servlet2/*" } )

이코드로 작성하면 여러개의 맵핑을 할 수 있음.

ex) @WebServlet( urlPatterns = { "/servlet1/*", "/servlet2/*"  } )

 

 


 

 

package servlet1;

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;

// init 과 loadOnStartup
@WebServlet( urlPatterns = { "/servlet1" }, loadOnStartup = 1 )
public class ServletEx01 extends HttpServlet {
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init() 호출");
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doProcess() 호출");
	}
}

 

init() / loadOnStartup

 

서블릿은 브라우저에서 최초요청시 init() 메서드를 실행한 후 메모리에 저장되어 기능을 수행한다.

서블릿은 init() 메서드를 이용해서 필요한 초기화 작업을 수행한다.

따라서 최초요청에 대해 실행시간이 길어질수 있는 단점이 있다

이 단점을 보완하기위해 생긴 기능이 loadOnStartup 기능이다.

 

init() = init() 메서드는 최초 요청시에만 호출하는 메서드이다, 필요한 초기화 작업 수행

loadOnStartup = 톰캣이 실행될때 같이실행되어 속도가 빨라짐

(지정한 숫자가 0보다 크면 톰켓 컨테이너가 실행되면서 서블릿 초기화

지정한 숫자는 우선순위, 작은숫자부터 먼저 초기화)

init()은 톰캣과 같이실행

새로고침을 해도 doProcess는 호출되지만 init()메서드는 호출x

 


모델 2 구조와 MVC 패턴

모델2 구조(518p)

 

MVC패턴(518p)

 

- 컨트롤러 = 서블릿

- 모델 = DAO, TO, 자바빈

- 뷰 = JSP

- 사용자 = 웹 브라우저, 휴대폰 등..


WEB-INF 폴더안에

views폴더를 만들고 view클래스를 집어넣는다

(WEB-INF 폴더는 보안구역/ 직접view클래스로 실행시 에러)

컨트롤러 클래스에서 경로를 직접 지정해주어야함

 

<%@ 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>


<form action="./controller" method="get">
데이터 <input type="text" name="data" />
<input type="submit" value="전송" />
</form>

<form action="./controller" method="post">
<input type="hidden" name="action" value="view1" />
데이터 <input type="text" name="data" />
<input type="submit" value="전송" />
</form>

</body>
</html>

form.jsp

 

package servlet;

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.View1Action;
import model2.View2Action;
import model2.ViewAction;

/**
 * Servlet implementation class ControllerEx01
 */
@WebServlet("/controller")
public class ControllerEx01 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 action = request.getParameter("action");
			//System.out.println(action);
			
			
			String url = "";
			
			// 다형성(부모의 오버라이드)
			ViewAction viewAction = null;
			if( action == null || action.equals("") || action.equals("view1")) {
				
				viewAction = new View1Action();
				viewAction.execute(request, response);
						
				url = "/WEB-INF/views/view1.jsp";
				
			} else if(action.equals("view2")){
				
				viewAction = new View2Action();
				viewAction.execute(request, response);
				
				url = "/WEB-INF/views/view2.jsp";
				
			} else {
				url = "/WEB-INF/views/error.jsp";
			}
			
			RequestDispatcher dispatcher = request.getRequestDispatcher(url);
			dispatcher.forward(request, response);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

ControllerEx01.java

컨트롤러

 

 

package model2;

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

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

ViewAction.java

모델

interface 클래스생성

 

 

package model2;

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

public class View1Action implements ViewAction {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("View111Action 호출");
	}

}

View1Action.java

모델

 

 

package model2;

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

public class View2Action implements ViewAction {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("View222Action 호출");
	}

}

View2Action.java

모델

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String data = (String)request.getAttribute("data");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello view1.jsp : <%=data %>
</body>
</html>

view1.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>
Hello view2.jsp
</body>
</html>

view2.jsp

 

form.jsp 실행
view1Action
View2Action

 

모델 클래스들이 상속받는 이유는

다형성(부모의 오버라이드) 과 execute가 아닌 다른 메서드로 호출할수 있기때문

 


model2 로 구구단출력

package servlet;

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.GugudanAction;
import model2.GugudanOKAction;

/**
 * Servlet implementation class ControllerEx01
 */
@WebServlet("/controller")
public class ControllerEx01 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 action = request.getParameter("action");
			
			String url = "";
			Action gAction = null;
			
			if(action == null || action.equals("") || action.equals("gugudan")) {
				gAction = new GugudanAction();
				gAction.execute(request, response);
				
				url = "/WEB-INF/views/gugudan.jsp";
			}else if(action.equals("gugudan_ok")){
				gAction = new  GugudanOKAction();
				gAction.execute(request, response);
				
				url = "/WEB-INF/views/gugudan_ok.jsp";
			}else {
				
			}
			
			RequestDispatcher dispatcher = request.getRequestDispatcher(url);
			dispatcher.forward(request, response);
			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

ControllerEx01.java

컨트롤러

 

 

package model2;

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

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

Action.java

모델

 

interface클래스 생성

 

package model2;

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

public class GugudanAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("GugudanAction 호출");
	}

}

GugudanAction.java

모델

 

package model2;

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

public class GugudanOKAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("GugudanOKAction 호출");
		
		// 받기 gugudan.jsp에서..
		String startdan = request.getParameter("startdan");
		String enddan = request.getParameter("enddan");
		
		// 로직
		
		
		// 넘기기 gugudan_ok로..
		request.setAttribute("startdan", startdan);
		request.setAttribute("enddan", enddan);
	}

}

GugudanOKAction.java

모델

 

 

<%@ 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>
gugudan.jsp<br>

<form action="./controller" method="post">
<input type="hidden" name="action" value="gugudan_ok" />
시작단 <input type="text" name="startdan" />
~
끝단 <input type="text" name="enddan" />
<input type="submit" value="구구단 출력" />
</form>

</body>
</html>

gugudan.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String startdan = (String)request.getAttribute("startdan");
	String enddan = (String)request.getAttribute("enddan");
	
	int iStartDan = Integer.parseInt(startdan);
	int iEndDan = Integer.parseInt(enddan);
	
	StringBuilder sbHtml = new StringBuilder();
	sbHtml.append("<table border='1' width='800'>");
	for(int i=iStartDan; i<=iEndDan; i++) {
		sbHtml.append("<tr>");
		for(int j=1; j<=9; j++) {
			sbHtml.append("<td>" + i + "X" + j + "=" + (i*j) + "</td>");
		}
		sbHtml.append("</tr>");
	}
	sbHtml.append("</table>");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
gugudan_ok.jsp<br>
<%=sbHtml.toString() %>
</body>
</html>

gugudan_ok.jsp