JSP & Servlet_실습

KTH·2022년 9월 24일
0

JSP_Servlet

목록 보기
1/1

[setCharacterEncoding, setContentType 정리]

  1. request.setCharacterEncoding("UTF-8");
  • POST 방식에서만 사용
  • 서블릿에서 POST 방식으로 정보를 서버에 전달해줄 때 사용
  • FROM 태그에서 입력한 값을 전송할 때 GET/POSET 방식으로 나뉘는데 POST 방식으로 보내는 값이 한글일 경우 한글이 제대로 출력되지 않는 경우가 발생하는데 이를 방지하기 위해 사용
  • GET 방식에서 사용 하려면 설정 필요(톰켓의 경우 기본적으로 UTF-8 문자코드가 적용 되어 있어 자동으로 한글 처리를 해줌)
    => 설정 방법
<server.xml 파일>
< Connector 
    connectionTimeout="20000" 
    port="8080" 
    protocol="HTTP/1.1" 
    redirectPort="8443" 
    useBodyEncodingForURI="true"/>
   
=> useBodyEncodingForURI 또는 URIEncoding 사용 
  1. response.setCharacterEncoding("UTF-8");
  • GET/POST 방식 둘 다 가능
  • 서블릿에서 직접 브라우저에 출력해줄 때 사용
  • 서블릿에서 화면에 직접 출력하기 위해서는 out.print를 사용 하는데 이때 out.print("안녕")을 출력하면 "안녕"이 출력되는 것이 아닌 물음표(???)가 출력 됨, 이러한 것을 해결하기 위해 사용
  1. response.setContentType("text/html;charset=utf-8");
  • GET/POST 방식 둘 다 가능
  • 서블릿에서 직접 브라우저에 출력해줄 때 사용
  • 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문에 브라우저에게 사용할 문자 코드가 무엇인지를 알려주기 위해 사용
  • 사용하지 않았을 경우 한글이 제대로 출력되지 않고 '뀖땖' 처럼 이상한 형태로 출력 됨
  1. 파일 업로드/다운로드
    enctype="multipart/form-data" : 파일 전달하기 위해 필수 요소!!
	enctype="multipart/form-data" 형식으로 전송된 데이터는 request.getParameter()와 같은 메서드로는 접근 할 수 없다.
	서블릿 3.0에 새롭게 추가된 Part 인터페이스를 사용해서 접근해야 한다.
	
	<접근 방식>
	- 1. HttpServletRequest, getContentType()을 이용해서 "multipart/form-data" 인지 확인한다.
	- 2. "multipart/form-data"인 경우
	  => HttpServletRequest의 getParts()나 getPart(name) 메서드를 이용해서 Part를 구한다.
	  => Part의 Content-Disposition 헤더가 "filename="을 포함하면, 파일로 처리한다.
	  => "filename="을 포함하지 않으면 파라미터로 처리한다.
  • HTML 영역

accept : 업로드 파일 종류, 미지정 할 경우 모든 파일
-ex : .txt, .xlsx, .jpg(확장명 기재);

capcure : 모바일 디바이스에 적용
- user : 전면 카메라 사용
- enviroment : 후면 카메라 사용

files : 파일을 선택하면, 선택된 파일 목록을 fileList 객체 형태로 files 속성에 저장됨
선택된 파일목록을 가져오려면 files 속성을 참고하면 됨

multiple : 다중 파일 업로드, 값(value)이없으며 기재하면 true값을 잦음

required : form이 전송될때 필수 선택여부를 지원하는 속성, 이속성을 지정할 경우
파일을 선택하지 않고 form을 전송할 경우 파일을 선택하라는 메세지가 나옴, boolean

value : 서택한 파일의 경로, 다중파일 선택의 경우 첫번째 파일을 기준으로 함
악의적인 사용 방지를 위해 "C:\fakepth\"가 포함됨
<enctype="multipart/form-data" : 파일 전달하기 위해 필수 요소!!>

<form name = "fn"  action="fu" method="post" enctype="multipart/form-data"> 
		<input type="file"  name="uploadFile" id="uploadFile" multiple required>
		<input type="button" name="btnFile" id="btnFile" value="다중파일선택">
	</form>
  • JavaScript(JS) 영역
$().ready(function(){
	
	$("#uploadFile").on("change",function(ev){
		const filesList = this.files;

		fn.method = "post";
		fn.action = "fu";
		fn.submit();

	}); // e:$(#btnFile)

});
  • Servlet 영역
<파일업로드>
- 서블릿 3.0에서는 InputStream이나 외부 라이브러리를 사용하지 않고도 웹 브라우저가 업로드한 파일을 읽어올 수 있는 기능이 추가 되었음
1. HttpServletRequest의 getPart()메서드를 이용해서 업로드 데이터 접근
2. 서블릿이 multipart() 데이터를 처리할 수 있도록 설정
	--> @MultipartConfig 애노테이션을 사용하거나
    --> web.xml에서 < multipart-config > 태그 사용

@MultipartConfig(

1. location = "업로드할 파일의 저장 폴더 로컬절대 경로", 
--> 파일 업로드 시에 임시 저장 디렉터리를 지정한다. 자료형(String)
2. maxFileSize = -1(무한대), 
--> 업로드할 파일의 최대 크기를 지정한다. 자료형(long)
3. maxRequestSize = -1 // ==> request 시에 최대 크기를 지정한다. 자료형(long)
4. fileSizeThreshold = 1024
--> fileUpload 시에 메모리에 저장되는 임시 파일 크기를 정의, 자료형(int)
)
==============================================================================
@MultipartConfig(
		maxFileSize = 1024*1024*5, // 5m
		maxRequestSize = 1024*1024*5 // 50m
		)

@WebServlet("/fu")
public class FileUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
    public FileUpload() {

    }

//	String file = "C:\\파일경로\\파일명";
//	
//	//----------- 파일의 이름 및 경로-------------------------------------
//	String fileName = file.getName(); // 경로를 제외한 파일 이름
//	String parentFolder = file.getParent(); // 파일을 제외한 경로
//	String fileAllName = file.getPath(); // 경로를 포함한 파일이름
//	String filePath = file.getAbsolutePath(); // 파일의 경로
//	
//	out.write("<p>파일명: " + fileName +"<br />");
//	out.write("폴더경로: " + parentFolder +"<br />");
//	out.write("전체경로: " + fileAllName +"<br />");
//	out.write("절대경로: " + filePath +"<p/>");
//	
//	//------------------확인------------------------------
//	File folder = new  File("데이터파일 위치 경로");
//	out.write("<p>파일존재여부: " + file +"<br />");
//	out.write("폴더존재여부: " + folder.exists() +"<br />");
//	out.write("디렉토리여부: " + folder.isDirectory() +"<br />");
//	out.write("디렉토리여부: " + file.isDirectory() +"<p/>");
//	
//	File[] files = folder.listFiles();
   
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String firstName=""; 
		String exName = "";
		String orgName = "";
		String folderName ="파일폴더경로";

		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter(); // 브라우저에 값을 출력하기 위함
		
		// 업로드된 파일은 getPart()를 통해 받는다.
		//Part part = request.getPart("uploadFile"); // 받아오는 파일명과 같아야함, requset.getParameter()와 동일 사용법

		//-----------------파일 하나만 등록하는 경우--------------------------------------------------
//		   out.print(part.getSubmittedFileName()); //전송된 파일의 이름값 출력
//		   String ContentType = part.getHeader("Content-Disposition"); // part.getHeader("Content-Disposition");에 filename=을 포함하고 있으면 파일에 해당하므로 업로드한 파일 데이터를 처리
	   
		   //------------- part.getSumittedFileName(); 만들시 사용
//		   int hpos = ContentType.indexOf("filename") + 10; // filename의 인덱스 값 구하는 곳 
//		   String orgName= ContentType.substring(hpos).trim(); // 맨앞 " 제외하고 맨위 글자 까지 가져 오는 것 //
//		   //orgName = "자바 작명 규칙.txt\"".substring(0,"자바 작명규칙.txt\" ..indexof("\""));
//		   orgName = orgName.substring(0, orgName.indexOf("\"")); // 맨마지막 " 제외
	   
		   //------------- 여러개 파일 값 -----------------------------------------------
		   Collection<Part>parts = request.getParts(); // 여러개 파일 받아오는 것
		   for(Part part : request.getParts()) { // 요청된 파일의 갯수 만큼 반복

			   orgName = part.getSubmittedFileName(); // 요청된 파일의 이름 가져오는 것
//			   System.out.println(orgName);

			   firstName = orgName.substring(0,orgName.lastIndexOf(".")); // 파일 앞 이름 => 01_JSP&Servlet1
			   exName = orgName.substring(orgName.indexOf(".")); // 파일 뒤쪽 이름 => .pdf
//			   System.out.println(firstName + " " + exName);
//		   String filePath = folderName + "\\" + orgName; // 파일 저장 경로 = 폴더명 : 파일원본이름
//		   String filePath;
			   File file = new File(folderName + "\\" + orgName); // folderName \ orgName
//		   String fileName = "";
			   String regName = orgName; // 데이터베이스에 저장할 파일명, 새로운 파일을 추가할때 원본 이름을 저장하기 위함
  
			   int cnt =1; // 파일명 변경을 위한 변수
			   while(file.exists()) { // 파일이 존재할 경우 반복 abcdef.txt = 파일 있는지 ? => abcdef1.txt(중복) => abcdef2.txt(중복) => 저장

				   regName = firstName + cnt++ + exName; // 중복되는 파일이 있는 경우 숫자를 붙여줘서 파일 중복을 없앤다
				   file = new File(folderName + "\\" + regName);
//			   out.write(folderName + "\\" + regName);
			   }
 
			  part.write(folderName + "\\" + regName);
			  out.print("<a href='fd?filename=" + regName + "'>파일다운로드("+ regName +")</a><br>" ); // 파일 다운로드
		   }

		   //out.print(orgName.substring(orgName.indexOf("."))); // orgName을 기준으로 확장자명 앞 .위치 까지 찾기
//		   out.print(orgName);

	}

}

<파일다운로드>
- 파일 다운로드 시 한글 및 특수문자 깨짐 처리(브라우저별로 다름)
 String encodingFileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
 String encodingFileName = new String(fileNameOrg.getBytes("UTF-8"));

====================================================================================
@WebServlet("/fd")
public class FileDownLoad extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public FileDownLoad() {

    }

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

		String fileName = request.getParameter("filename");
		String folder = "C:\\Users\\KoTaehoon\\Desktop\\cloud_edu\\JSP_Servlet\\study\\FileTest\\src\\main\\webapp\\fileupload\\"; // 파일 업로드한 폴더 DownLoadPath
		String filePath = folder + fileName;

		// 파일 이름이 한글일 경우를 대비해 URF-8로 인코딩함
		String encodingFileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");

//		request.setCharacterEncoding("UTF-8");
//		response.setContentType("text/html;charset=UTF-8");

		byte[] b = new byte[4096]; // 4kb
		FileInputStream fileInputStream = new FileInputStream(filePath); // 다운 받은 파일 경로 

		String sMimeType = getServletContext().getMimeType(filePath);
		if(sMimeType == null) {
			sMimeType = "application/octet-stream";
		}

		// 다운 로드 받을 수 있게 설정(파일 MINE 타입 얻어오기)
		response.setContentType(sMimeType);
		response.setHeader("Content-Disposition", "attachment; filename=" + encodingFileName); // 다운받을 때 원본 파일 이름과 같은 것 다운 받게 하는 것

		ServletOutputStream stream = response.getOutputStream();
		int read;
		while((read = fileInputStream.read(b,0,b.length))!= -1) { // -1 데이터 최대 크기 지정
			stream.write(b,0,read);
		}	
	}

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

	}
}
  1. JDBC(Java DataBase Connectivity)
  • 자바에서 데이터 관련된 작업을 처리할 때 사용하는 API

3.1 JDBC 구조

  • JSP를 포함한 자바 어플리케이션에서 데이터베이스를 사용할 때 데이터베이스 종류에 상관없이 JDBC API를 이용해서 데이터베이스에 접근
  • JDBC API를 사용하면 DBMS에 알맞은 JDBC 드라이버만 있으면 어떤 데이터베이스라도 사용 가능
  • MySQL, ORACLE, MS-SQL 등 주요 DBMS에 맞는 JDBC 드라이버 제공

3.2 JDBC 드라이버 준비

  • mysql-connector-java-bin.jar 파일 다운로드 -> WebContent/WEB-INF/lib 폴더에 다운받은 JDBC 파일 복사

3.3 JDBC 프로그래밍 코딩 방법
3.3.1 실행 순서
-> 1. JDBC 드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
-> 2. 데이터베이스 커넥션 설정
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
-> 3. 쿼리 실행을 위한 Statement 객체 생성
stmt = conn.createStatement();
-> 4. 쿼리 실행
rs=stmt.excuteQuery(query);
-> 5. 쿼리 실행 결과 사용
while(rs.next(){
rs.getString("");
}
-> 6. Statement 종료
if(rs!=null) try {rs.close();} catch(SQLException ex){}
if(stmt!=null) try {conn.close();} catch(SQLException ex){}
-> 7. 데이터베이스 커넥션 종료
if(conn!=null)try{conn.close();} catch(SQLException ex){}

<!DOCTYPE html>
<html lang="ko">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Servlet : 데이터 전송 예제 1</title>
      <link href="style.css" rel="stylesheet" />
      <script src="https://code.jquery.com/jquery-3.6.1.js"></script>
      <script src="mem_regForm.js"></script>
  </head>
  <body>
        <div id="container">
          <h4>회원가입</h4>
          <form name="fn" action="./rsd/" method="get" enctype="multipart/form-data">
              <table>
                  <caption>
                      회원가입을 위한 양식 문서
                  </caption>
                  <colgroup>
                      <col>
                      <col>
                  </colgroup>
                  <tbody>
                      <tr>
                          <th>
                              <label for="temail">이메일</label>
                          </th>
                          <td>
                              <input type="text" name="temail" id="temail" minlength="5" maxlength="50" value="" />
                          </td>
                      </tr>
                      <tr>
                          <th>
                              <label for="tname">이름</label>
                          </th>
                          <td>
                              <input type="text" name="tname" id="tname" minlength="2" maxlength="20" value="" />
                          </td>
                      </tr>
                      <tr>
                          <th>
                              <label for="tpwd">비밀번호</label>
                          </th>
                          <td>
                              <input type="password" name="tpwd" id="tpwd" minlength="8" maxlength="16" value="" />
                          </td>
                      </tr>
                      <tr>
                          <th>
                              <label for="tpwd2">비밀번호 확인</label>
                          </th>
                          <td>
                              <input type="password" name="tpwd2" id="tpwd2" minlength="8" maxlength="16" value="" />
                          </td>
                      </tr>
                      <tr>
                          <th>
                              취미
                          </th>
                          <td>
                              <input type="checkbox" name="thobby" id="thobby1" value="1" />
                              <label for="thobby1">운동</label>
                              <input type="checkbox" name="thobby" id="thobby2" value="2" />
                              <label for="thobby2">독서</label>
                              <input type="checkbox" name="thobby" id="thobby3" value="3" />
                              <label for="thobby3">낚시</label>
                              <input type="checkbox" name="thobby" id="thobby4" value="4" />
                              <label for="thobby4">등산</label>
                              <input type="checkbox" name="thobby" id="thobby5" value="5" />
                              <label for="thobby5">음악감상</label>
                          </td>
                      </tr>
                      <tr>
                          <th>
                              <label for="taddr">거주지역</label>
                          </th>
                          <td>
                              <select name="taddr">
                                  <option value="">== 거주지역 선택 ==</option>
                                  <option value="부산">부산광역시</option>
                                  <option value="대구">대구광역시</option>
                                  <option value="인천">인천광역시</option>
                                  <option value="광주">광주광역시</option>
                                  <option value="대전">대전광역시</option>
                                  <option value="울산">울산광역시</option>
                                  <option value="서울">서울특별시</option>
                                  <option value="제주">제주특별자치도</option>
                                  <option value="경기">경기도</option>
                                  <option value="강원">강원도</option>
                                  <option value="충북">충청북도</option>
                                  <option value="충남">충청남도</option>
                                  <option value="경북">경상북도</option>
                                  <option value="경남">경상남도</option>
                                  <option value="잔북">전라북도</option>
                                  <option value="전남">전라남도</option>
                              </select>
                          </td>
                      </tr>
                  </tbody>
                  <tfoot>
                      <tr>
                          <td colspan="2">
                              <span id="btnReg">회원가입</span>
                              <span>가입취소</span>
                          </td>
                      </tr>
                  </tfoot>
              </table>
          </form>
          <div id="resultArea">
          	<table>
          		<thead>
          			<th>이름</th><th>이메일</th><th>취미</th><th>거주지</th><th>가입일</th>
          		</thead>
          		<tbody>
          		</tbody>
          		<tfoot></tfoot>
          	</table>
          </div>
        </div>  
  </body>
</html>

$().ready(function() { // jQery 시작

  var passChk = false;
  $("#btnReg").on("click",function(ev){
      if(fn.temail.value=="") {
          alert("비밀번호는 반드시 입력해야 합니다.");
          fn.temail.focus();
          return;
      }
      if(fn.tname.value=="") {
          alert("이름은 반드시 입력해야 합니다.");
          fn.tname.focus();
          return;
      }
      if(fn.tpwd.value=="") {
          alert("비밀번호는 반드시 입력해야 합니다.");
          fn.tpwd.focus();
          return;
      }
      if(fn.tpwd2.value=="") {
          alert("확인을 위한 비밀번호도 반드시 입력해야 합니다.");
          fn.tpwd2.focus();
          return;
      }
      if($("input:checked").length==0) {
          alert("취미는 하나 이상을 선택하셔야 합니다.");
          return;
      }
      if(fn.taddr.value=="") {
          alert("거주지를 선택해 주세요.");
          return;
      }

    	fn.method="get"; // 전송할 타입(get/post)
      fn.action = "/jdbcCtr/JDBCCtr"; // 이동할 페이지(회원가입)
      fn.submit();

  });//e:$("form").on("submit")

		var select_obj = '';

      $('input[type="checkbox"]:checked').each(function (index) {
		if (index != 0) {
              select_obj += ',';
          }
          select_obj += $(this).val();
      });

      //alert(select_obj);
	var jsonList;
  $.ajax({
	        url: "/prjJDBCList/JDBCList", // 해당 서블릿 주소
	        data:{ // htlm value 값 (변수명 : 전달할 value 값)
	            start : 0,
				len : 2,
				temail:fn.temail.value, 
	            tname:fn.tname.value,
				tpwd: fn.tpwd.value,
				thobby: select_obj,
				taddr : fn.taddr.value
	        },
	        method:"GET",
	        dataType: "text",/*json / text / html / xml / csv */

	        success : function(jsonData) { // 서블릿에서 넘어오는 값의 변수 값과 동일하게 선언해야함

	            jsonList=JSON.parse(jsonData);
				//console.log(jsonList);

				var keyName = ["fname","femail","fhobby","faddr","fdate"]; // JSON 키 값 가져 오기
				for(var i =0;i<jsonList.length;i++){
				var $tr = $("<tr></tr>");
					for(var j= 0;j<keyName.length;j++){
						var $td = $("<td></td>");
						$td.append(jsonList[i][keyName[j]]);
						$tr.append($td);
					}
					$("#resultArea tbody").append($tr);
				}
	        },
	        error:function(request,status,error){
	            console.log("code:"+request.status);
	            console.log("message:"+request.responseText);
	            console.log("error:"+error);
			}
		});

  $("#pwd2").on("keypress",function(){ // 비밀번호 일치 확인
      passChk=false;
      if(fn.tpwd.value==fn.tpwd2.value) passChk=true;
      console.log(passChk);
  });//e:$("#pwd2").on("keypress");
});//e:$().ready();
package com.JDBCList;

import java.sql.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

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("/JDBCList")
public class JDBCList extends HttpServlet {
	private static final long serialVersionUID = 1L;

  public JDBCList() {
      super();
      // TODO Auto-generated constructor stub
  }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String start = request.getParameter("start");
		String len = request.getParameter("len");
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
//			out.print("드라이브 로딩 성공<br>");
			String url = "jdbc:mysql://localhost:3307/jdbc_test?severTimezone=UTC";
			String user = "root";	// 연결 DB 사용자명
			String passwd = "gwang_1";	// 연결 DB 비밀번호

			Connection conn = DriverManager.getConnection(url, user, passwd);
//			out.print("MySQL 연결 성공<br>");

			String sql = "select fidx, femail, fname, fpass, fhobby, faddr, fdate from tmember limit "+ start+", "+ len+ ";";
			PreparedStatement pstmt = conn.prepareStatement(sql);
			ResultSet rs = pstmt.executeQuery(sql);
			String prtTag = "";
			String rsFidx,rsEmail, rsName, rsHobby, rsAddr,rsDate;
			prtTag="[";
			while(rs.next()) { // db 쿼리 실행 결과 출력을 위해 사용
			rsFidx = rs.getString("fidx");
			rsName = rs.getString("fname");
			rsEmail =  rs.getString("femail");	// 해당 컬럼의 값 출력
			rsHobby = rs.getString("fhobby");
			rsAddr = rs.getString("faddr");
			rsDate = rs.getString("fdate");
			prtTag += "{\"fidx\" : \""+rsFidx+"\", \"fname\" : \""+rsName+"\", \"fhobby\" : \""+rsHobby+"\", \"faddr\" : \""+rsAddr+"\", \"femail\" : \""+rsEmail+"\", \"fdate\" : \""+rsDate+"\"},";

			}
			prtTag = prtTag.substring(0, prtTag.length()-1); // 마지막 , 제외 
			prtTag = prtTag+"]";
			out.println(prtTag);
			System.out.println(prtTag);

		}  catch (ClassNotFoundException e) { // 드라이버 로딩, Class.forName("com.mysql.jdbc.Driver"); 에 대한 에러 처리
//			out.println("ClassNotFoundException:"+e.getMessage());
			System.out.println("ClassNotFoundException:"+e.getMessage());
		}  catch (SQLException e) { // 서버 처리부, conn = DriverManager.getConnection(url, user, passwd); PreparedStatement pstmt = conn.prepareStatement(sql);에 대한 에러 처리
//			out.println("SQLException:"+e.getMessage());
			System.out.println("SQLException:"+e.getMessage());
		}  
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}
}
package com.jdbcCtr;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

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

// JDBC 필요 객체 import
import java.sql.*;
//import java.sql.Connection;
//import java.sql.DriverManager;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;

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

  public JDBCCtr() {

  }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
//		
		String strEmail = request.getParameter("temail");
		String strName = request.getParameter("tname");
		String strPwd = request.getParameter("tpwd");
		String[] arrHobby = request.getParameterValues("thobby");
		String strHobby = String.join(",", arrHobby); // 배열값으로 가져오는 hobby 문자열로 변경
		String strAddr = request.getParameter("taddr");
//		
		String url = "jdbc:mysql://localhost:3307/jdbc_test?severTimezone=UTC"; // 해당DB정보/DB주소/DB TABLE명?severTimezone=UTC
		String user = "root";	// 연결 DB 사용자명
		String passwd = "gwang_1";	// 연결 DB 비밀번호

		try { 
			Class.forName("com.mysql.jdbc.Driver"); // 자바에서 MySQL을 사용하기 위한 드라이버 설정, 드라이브 로딩
			out.print("드라이버 로딩 성공");

			Connection conn = null;
			conn = DriverManager.getConnection(url, user, passwd);
			String sql = "insert into tmember(femail,fname,fpass,fhobby,faddr,fdate) "
					+ "values('"+strEmail+"','"+strName+"','"+strPwd+"','"+strHobby+"','"+strAddr+"',SYSDATE())";
			System.out.println(sql);
			// String sql = "insert into tmember(femail,fname,fpass,fhobby,faddr,fdate) values('1','2','3','1,2','부산',SYSDATE());";
			// String sql = "delete from tmember where idx = 1";
			// String sql = "update tmember set femail='123@13', fname='홍길동', fpass='1234', fhobby='1,2,3,4,5', faddr='부산' where fidx=2;";


			PreparedStatement pstmt = conn.prepareStatement(sql); // 데이터베이스 스테이트먼트 생성
			int rowCnt = pstmt.executeUpdate(); // select문을 제외한 쿼리문 실행
			System.out.println(rowCnt);

		}  catch (ClassNotFoundException e) { // 드라이버 로딩, Class.forName("com.mysql.jdbc.Driver"); 에 대한 에러 처리
//			out.println("ClassNotFoundException:"+e.getMessage());
			System.out.println("ClassNotFoundException:"+e.getMessage());
		}  catch (SQLException e) { // 서버 처리부, conn = DriverManager.getConnection(url, user, passwd); PreparedStatement pstmt = conn.prepareStatement(sql);에 대한 에러 처리
//			out.println("SQLException:"+e.getMessage());
			System.out.println("SQLException:"+e.getMessage());
		}  
//		out.print(sql);
	}

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

0개의 댓글