14.Java Servlet/DB 연동
2022. 8. 2. 18:01ㆍJAVA
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 |