14.Java Servlet/DB 연동

2022. 8. 2. 18:01JAVA

2022.08.02.화


1.Servlet

 -입력 Data 얻기

1)get방식

package com.controller;

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("/LoginController")
public class LoginController extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		//서버 console에 출력
		System.out.println("LoginController>>>>>>>>>>");
		//http://localhost:8090/app2/LoginController?userid=aaa&passwd=1234
		
		//입력데이터 얻는 메서드
		//get방식 기본적으로 한글처리됨
		String userid = request.getParameter("userid");
		String passwd = request.getParameter("passwd");
											//값없으면 null 반환
		String passwd2 = request.getParameter("passwd2");
		
		System.out.println(userid + " " + passwd);
		
	}

}

2)post방식

package com.controller;

import java.io.IOException;
import java.util.Arrays;

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("/LoginController2")
public class LoginController2 extends HttpServlet {
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		//서버 console에 출력
		System.out.println("LoginController2>>>>>>>>>>");
		
		//입력데이터 얻는 메서드
		//post방식 기본적으로 한글처리 안됨 -> 한글 출력되도록 코드구현 필요
		request.setCharacterEncoding("utf-8");
		String userid = request.getParameter("userid");
		String passwd = request.getParameter("passwd");
											//값없으면 null 반환
		String passwd2 = request.getParameter("passwd2");
		
		//배열 return
		String[] hobbies = request.getParameterValues("hobby");
		
		System.out.println(userid + " " + passwd);
		System.out.println(Arrays.toString(hobbies));
	}

}

 -Servlet Life Cycle

→처음 요청시 Servlet 생성(Init → doGet)

→다음 요청시 이미 생성된 Servlet 재사용(doGet)

※heap 메모리에 Servlet 하나만 올라가 있음

※여러 사용자가 인스턴스(Servlet) 변수 공유 가능

→공유하지 않고 사용하려면 doGet 메서드 안에 로컬변수 선언하면 됨

package com.controller;

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

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("/TestController")
public class TestController extends HttpServlet 
{
	//Servlet 한번만 생성 -> list 변수도 한번만 생성
	//=>여러 사용자가 변수를 공유할 수 있음
	ArrayList<String> list = new ArrayList<String>();
	
	@Override
	public void destroy() 
	{
		System.out.println("destroy");
	}

	@Override
	public void init(ServletConfig config) throws ServletException 
	{
		System.out.println("init");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		//여러 사용자가 공유할 목적인 경우 : 인스턴스변수로 선언
		//공유하지 않고 로컬 형대로 사용 목적인 경우 : doGet method 안에 로컬변수로 선언
		ArrayList<String> list2 = new ArrayList<String>();
		System.out.println("doGet");
		list.add("hello");
		System.out.println(list);
		list2.add("hello2");
		System.out.println(list2);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}
}

 -Parameter

1)초기화 parameter

→Web.xml에서 name/value 쌍으로 값을 설정하고 특정 서블릿에서 참조

→getInitParameter(name) 메서드로 값 얻을 수 있음

package com.controller;

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;

public class HelloController extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		System.out.println("HelloController");
		
		//<context-param>으로 설정된 컨텍스트 파라미터는
		//ServletContext의 getInitParameter(name)으로 사용
		//모든 서블릿 사용 가능
		String mesg = getServletContext().getInitParameter("mesg");
		String mesg2 = getServletContext().getInitParameter("mesg2");
		
		System.out.println(mesg + " " + mesg2);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		doGet(request, response);
	}

}

2)context parameter

→Web.xml에서 name/value 쌍으로 값을 설정하고 모든 서블릿에서 참조

→getServletContext().getInitParameter(name) 메서도로 값 얻을 수 있음

package com.controller;

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;

public class TestController extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		System.out.println("TestController");
		//<context-param>으로 설정된 컨텍스트 파라미터는
		//ServletContext의 getInitParameter(name)으로 사용
		//모든 서블릿 사용 가능
		String mesg = getServletContext().getInitParameter("mesg");
		String mesg2 = getServletContext().getInitParameter("mesg2");
		System.out.println(mesg + " " + mesg2);				
		
		//<init-param>으로 설정된 초기화 파라미터는 
		//ServletConfig의 getInitParameter(name) 사용
		//특정 서블릿만 사용 가능
		String driver = getInitParameter("jdbc.driver");
		String userid = getInitParameter("jdbc.userid");
		System.out.println(driver + " " + userid);
		
		//응답처리 ==> html작성
		 response.setContentType("text/html; charset=utf-8");
		 PrintWriter out = response.getWriter();
		 
		 out.print("<html><body>");
		 out.print("driver : " + driver + "<br>");
		 out.print("userid : " + userid);
		 out.print("</body></html>");
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		doGet(request, response);
	}

}
//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">

<!-- 컨텍스트 파라미터 -->
<context-param>
	<param-name>mesg</param-name>
	<param-value>helloworld</param-value>
</context-param>
<context-param>
	<param-name>mesg2</param-name>
	<param-value>helloworld2</param-value>
</context-param>
<!-- 컨텍스트 파라미터 -->

<servlet>
	<servlet-name>TestController</servlet-name>
	<servlet-class>com.controller.TestController</servlet-class>
	<!-- 초기화 파라미터 -->
	<init-param>
	<param-name>jdbc.driver</param-name>
	<param-value>oralce.jdbc.dirver.OracleDriver</param-value>
	</init-param>
	<init-param>
	<param-name>jdbc.userid</param-name>
	<param-value>SCOTT</param-value>
	</init-param>
	<!-- 초기화 파라미터 -->
</servlet>
<servlet>
	<servlet-name>HelloController</servlet-name>
	<servlet-class>com.controller.HelloController</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>TestController</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloController</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

</web-app>

2.DB연동

 -드라이버를 Dynamic Web 프로젝트의 webapp/WEBINF/lib에 복사

 -서비스 + DAO + DB 연동

 

-Servlet

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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 com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

@WebServlet("/list")
public class DeptListController extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		DeptService service = new DeptServiceImpl();
		List<DeptDTO> list = service.list();
		for(DeptDTO dept : list)
			System.out.println(dept);
		
		//응답처리
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		out.print("<table border = '1'>");
		out.print("<tr>");
		out.print("<th>부서번호</th>");
		out.print("<th>부서명</th>");
		out.print("<th>부서위치</th>");
		out.print("</tr>");
		
		for(DeptDTO dept : list)
		{
			out.print("<tr>");
			out.print("<td>"+dept.getDeptno()+"</td>");
			out.print("<td>"+dept.getDname()+"</td>");
			out.print("<td>"+dept.getLoc()+"</td>");
			out.print("</tr>");
		}
		
		out.print("</table>");
		out.print("<a href='writeFrom.jsp'>글쓰기</a>");
		out.print("</body><html>");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		
		doGet(request, response);
	}

}
package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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 com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

@WebServlet("/write")
public class DeptWriteController extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		String deptno = request.getParameter("deptno");
		String dname = request.getParameter("dname");
		String loc = request.getParameter("loc");
//		System.out.println(deptno + dname + loc);
		
		DeptService service = new DeptServiceImpl();
		int num = service.write(new DeptDTO(Integer.parseInt(deptno), dname, loc));
		
		//응답처리
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		if(num == 1)
		{
			out.print("부서등록 성공");
			out.print("<a href='list'>목록</a>");
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		
		doGet(request, response);
	}

}

-DAO

package com.dao;

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

import com.dto.DeptDTO;

public class DeptDAO 
{
	//부서등록
	public int write(Connection con, DeptDTO dto)
	{
		int num = 0;
		PreparedStatement pstmt = null;
		try 
		{
			String sql = "INSERT INTO dept (deptno, dname, loc) values(?, ?, ?)";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, dto.getDeptno());
			pstmt.setString(2, dto.getDname());
			pstmt.setString(3, dto.getLoc());
			
			num = pstmt.executeUpdate();
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		
		return num;
	}
	
	public List<DeptDTO> list(Connection con) 
	{
		//DeptDTO 누적용
		List<DeptDTO> list = new ArrayList<DeptDTO>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try 
		{
			String sql = "SELECT deptno, dname, loc FROM dept order by deptno desc";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			while( rs.next())
			{
				 int deptno = rs.getInt("deptno");
				 String dname = rs.getString("dname");
				 String loc = rs.getString("loc");
				 
				 DeptDTO dto = new DeptDTO(deptno, dname, loc);
				 list.add(dto);
			}
		} 
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(rs != null) rs.close();
				if(pstmt != null) pstmt.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		return list;
	}
}

-DTO

package com.dto;

public class DeptDTO 
{
	private int deptno;
	private String dname;
	private String loc;
	
	public DeptDTO() {}
	public DeptDTO(int deptno, String dname, String loc) 
	{
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}
	public String toString() 
	{
		return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
	}
	//getter
	public int getDeptno() { return deptno; }
	public String getDname() { return dname; }
	public String getLoc() { return loc; }
	//setter
	public void setDeptno(int deptno) { this.deptno = deptno; }
	public void setDname(String dname) { this.dname = dname; }
	public void setLoc(String loc) { this.loc = loc; }
}

-Service

package com.service;

import java.util.List;

import com.dto.DeptDTO;

public interface DeptService 
{
	//목록보기
	public List<DeptDTO> list();
	public int write(DeptDTO dto);
}
package com.service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService 
{
	//4가지 정보 설정
	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String userid = "SCOTT";
	String passwd = "TIGER";
	
	public DeptServiceImpl()
	{
		try { Class.forName(driver); } 
		catch (ClassNotFoundException e) { e.printStackTrace(); }
	}
	
	
	@Override
	public List<DeptDTO> list() 
	{
		Connection con = null;
		List<DeptDTO> list = null;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			DeptDAO dao = new DeptDAO();
			list = dao.list(con);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		return list;
	}


	@Override
	public int write(DeptDTO dto) 
	{
		Connection con = null;
		int num = 0;
		try 
		{
			con = DriverManager.getConnection(url, userid, passwd);
			
			DeptDAO dao = new DeptDAO();
			num = dao.write(con, dto);
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try 
			{
				if(con != null) con.close();
			} 
			catch (SQLException e) 
			{
				e.printStackTrace();
			}
		}
		
		return num;
	}

}

-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>
<h1>부서등록</h1>
<form action="write">
부서번호:<input type="text" name="deptno"><br>
부서명:<input type="text" name="dname"><br>
부서위치:<input type="text" name="loc"><br>
<input type="submit" value="저장">
</form>
<a href="list">목록</a>
</body>
</html>

'JAVA' 카테고리의 다른 글

16.Servlet JSP 위임/MVC  (0) 2022.08.04
15.Java 경로/Scope/JSP  (0) 2022.08.03
13.Java Wep Application/Servlet  (0) 2022.08.01
12.Java JDBC  (0) 2022.07.26
11.Java String/StringBuilder/날짜데이터/Wrapper클래스/컬렉션(Collection API)  (0) 2022.07.18