ex)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JDBCTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/project?serverTimezone=UTC";
// serverTimezone=UTC 서버의 시간을 설정 UTC(Coordinated Universal Time:세계 협정시)
// localhost라고 적은 부분은 현재 자신의 컴퓨터가 데이터베이스가 설치된 서버라는 의미의 루프백 IP주소이다.
// 루프백 IP 주소로는 127.0.0.1도 사용할 수 있다.
// 3306은 MySQL의 포트 번호이다.
String id = "root";
String pw = "1234";
Connection conn = null;
Statement stmt = null;
String sql = null;
String name = null, title= null, contents = null;
Scanner sc = new Scanner(System.in);
int menu = 0;
int result = 0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 데이터베이스와 연결하는 드라이버 클래스를 찾아 로드한다.
conn = DriverManager.getConnection(url, id, pw);
// 연결을 관리하는 Connection 객체를 생성한다.
System.out.println("Connection 객체 생성 성공");
stmt = conn.createStatement();
// 질의를 처리하는 객체를 생성한다.
while(true)
{
System.out.println("메뉴를 선택하세요.");
System.out.println("1. 쓰기");
System.out.println("2. 조회");
System.out.println("3. 종료");
System.out.print("선택 : ");
menu = sc.nextInt();
sc.nextLine();
switch(menu)
{
case 1:
System.out.println("이름을 입력하세요.");
name = sc.nextLine();
System.out.println("제목을 입력하세요.");
title = sc.nextLine();
System.out.println("내용을 입력하세요.");
contents = sc.nextLine();
sql = "INSERT INTO board(name, title, contents) VALUES('" + name + "', '" + title + "' , '" + contents + "')";
System.out.println(sql); // 디버깅 용도
result = stmt.executeUpdate(sql); // db에서 데이터의 삽입, 수정, 삭제 관련된 sql을 실행하는 메소드
// 질의가 성공적으로 수행되면 삽입된 개수가 반환된다. 여기에서는 1이 반환.
if(result > 0) System.out.println(result + " 데이터 삽입성공");
break;
case 3:
System.out.println("프로그램을 종료합니다.");
return;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
System.out.println("Connection 객체 생성 실패");
} finally {
try {
if(stmt != null) stmt.close();
if(conn != null) conn.close();
System.out.println("conn.close() 성공");
// Connection 객체를 닫는다.
if(sc != null) sc.close();
} catch (SQLException e) {
System.out.println("conn.close() 에러");
}
}
}
}
CREATE TABLE BOARD(
no int AUTO_INCREMENT PRIMARY KEY,
name varchar(20),
title varchar(200),
contents text,
wTime datetime default CURRENT_TIMESTAMP,
rCnt int default 0
);
- SSL (Secure Sockets Layer)
보안 소켓 계층을 이르는 말로,
인터넷에서 데이터를 안전하게 전송하기 위한 인터넷 통신 규약 보안 프로토콜이다.
인터넷 프로토콜(Internet protocol)이 보안 면에서 기밀성을 유지하지 못한다는 문제를 극복하기 위해 개발되었다.
현재 전세계에서 사용되는 인터넷 상거래 시 요구되는 개인 정보와
크레디트카드 정보의 보안 유지에 가장 많이 사용되고 있는 프로토콜이다.
최종 사용자와 가맹점간의 지불 정보 보안에 관한 프로토콜이라고 할 수 있다.
ex)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JDBCTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/project?serverTimezone=UTC";
// serverTimezone=UTC 서버의 시간을 설정 UTC(Coordinated Universal Time:세계 협정시)
// localhost라고 적은 부분은 현재 자신의 컴퓨터가 데이터베이스가 설치된 서버라는 의미의 루프백 IP주소이다.
// 루프백 IP 주소로는 127.0.0.1도 사용할 수 있다.
// 3306은 MySQL의 포트 번호이다.
String id = "root";
String pw = "1234";
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null; // db에 sql을 더 정형화하여 편리하게 입력하게 함
String sql = null;
String name = null, title= null, contents = null;
Scanner sc = new Scanner(System.in);
int menu = 0;
int result = 0;
ResultSet rs = null;
int no = 0, rCnt = 0;
String wTime = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 데이터베이스와 연결하는 드라이버 클래스를 찾아 로드한다.
conn = DriverManager.getConnection(url, id, pw);
// 연결을 관리하는 Connection 객체를 생성한다.
System.out.println("Connection 객체 생성 성공");
stmt = conn.createStatement();
sql = "INSERT INTO board(name, title, contents) VALUES(?, ?, ?)";
pstmt = conn.prepareStatement(sql);
// 질의를 처리하는 객체를 생성한다.
while(true)
{
System.out.println("메뉴를 선택하세요.");
System.out.println("1. 쓰기");
System.out.println("2. 조회");
System.out.println("3. 종료");
System.out.print("선택 : ");
menu = sc.nextInt();
sc.nextLine();
switch(menu)
{
case 1:
System.out.println("이름을 입력하세요.");
name = sc.nextLine();
System.out.println("제목을 입력하세요.");
title = sc.nextLine();
System.out.println("내용을 입력하세요.");
contents = sc.nextLine();
pstmt.setString(1, name); // 각 순서별 해당 내용 지정
pstmt.setString(2, title);
pstmt.setString(3, contents);
result = pstmt.executeUpdate();
// 질의가 성공적으로 수행되면 삽입된 개수가 반환된다. 여기에서는 1이 반환.
if(result > 0) System.out.println(result + " 데이터 삽입성공");
break;
case 2:
sql = "SELECT * FROM BOARD ORDER BY no desc";
rs = stmt.executeQuery(sql); // select만 수행하는 것
// 질의 결과를 처리한다.
while(rs.next()) // 다음 쿼리 결과값이 있는 경우 true, 아니면 false 반환
{
no = rs.getInt("no");
name = rs.getString("name");
title = rs.getString("title");
contents = rs.getString("contents");
wTime = rs.getString("wTime");
rCnt = rs.getInt("rCnt");
System.out.println("번호 " + no);
System.out.println("이름 " + name);
System.out.println("제목 " + title);
System.out.println("내용 " + contents);
System.out.println("시간 " + wTime);
System.out.println("조회수 " + rCnt);
System.out.println();
}
break;
case 3:
System.out.println("프로그램을 종료합니다.");
return;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
System.out.println("Connection 객체 생성 실패");
} finally {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
System.out.println("conn.close() 성공");
// Connection 객체를 닫는다.
if(sc != null) sc.close();
} catch (SQLException e) {
System.out.println("conn.close() 에러");
}
}
}
}
# JSP 프로젝트 및 jsp 파일 생성 방법
① Eclipse EE에서 File - new - Dynamic Web Project 순으로 생성
② Project name에 HelloJSP를 입력하고 next를 클릭합니다.
③ next를 클릭합니다.
④ Generate web.xml deployment descriptor 체크 후 finish 버튼을 클릭합니다.
⑤ 프로젝트 이름 선택 후 마우스 오른쪽 클릭 - new - JSP File 순으로 클릭합니다.
⑥ 아래의 내용을 입력 후 ctrl + f11 키를 눌러 실행시킨다.
<body>
<%
out.print("Hello JSP<br>");
%>
</body>
// Tip : 이클립스의 기본 웹 브라우저를 크롬으로 바꾸기
① Window - Preferebces를 클릭합니다.
② General - Web Browser - Use external web browser - Chrome순으로 클릭한 후
Apply - Apply and Close를 클릭합니다.
# JSP 구성요소
태그 | 태그명 | 설명 |
<%@ %> | 지시자 | 페이지 속성 |
<%-- --%> | 주석 | 웹브라우저에서 소스보기 해도 보이지 않는다. |
<%! %> | 선언 | 전역변수, 전역메소드 선언 |
<% %> | 스크립트릿 | JAVA코드를 작성 , 선언된 변수나 메소드는 지역변수, 지역메소드이다. |
<%= %> | 표현식 | =뒤의 결과 값을 출력, 메소드인 경우 return값 출력 |
<jsp:action> </jsp:action> | 액션태그 |
# JSP 내장객체
개발자가 객체를 생성하지 않고 바로 사용할 수 있는 객체가 내장객체이다.
# JSP 내장 객체 종류
request, response, pageContext, application, out, page, config, session, exception
- 지시자 : JSP페이지의 전체적인 속성을 지정할 때 사용한다.
① page : 해당 페이지의 전체적인 속성 지정
② include : 별도의 페이지를 현재 페이지에 삽입
③ tablib : 태그라이브러리의 태그 사용
// Tip :사용자가 만든 tag들을 태그라이브러리라고 한다.
이러한 태그라이브러리를 사용하기 위해 taglib지시자를 사용한다.
uri 및 prefix 속성이 있으며,
uri는 태그라이브러리의 위치 값을 가지며,
prefix는 태그를 가리키는 이름 값을 가진다.
- request : 웹브라우저를 통해 서버에 어떤 정보를 요청하는 것을 request라고 한다.
이러한 요청 정보는 request 객체가 관리한다.
// Tip : Request객체 관련 메소드
getContextPath() : 웹어플리케이션의 컨텍스트 패스를 얻는다.
getMethod() : get방식과 post방식을 구분할 수 있다.
getSession() : 세션 객체를 얻는다.
getProtocol() : 해당 프로토콜을 얻는다.
getRequestURL() : 요청 URL을 얻는다.
getRequestURI() : 요청 URI를 얻는다.
getQueryString() : 쿼리스트링을 얻는다.
Q1. out.println() 으로 구구단 출력
A.
<body>
<%
for(int i=2;i<10;i++){
for(int j=1;j<10;j++){
out.println(i+"*"+j+"="+i*j);
{
%>
<br>
<%
{
%>
</body>
Q2. 선언 int i=1;
선언 String str = "ABCDE";
선언 public int sum(int num1, int num2){
return num1 + num2;
}
위에 있는 내용들을 선언하고 각각을 출력하시오.
A.
<body>
<%!
int i =1;
string str="ABCDE";
public int sum(int num1, int num2){
return num1 + num2;
}
%>
<%
out.println(i);
out.println(str);
out.println(sum(1,2));
%>
</body>
Q3. Q2에 있는 내용들을 선언하고 표현식을 이용하여 출력.
A.
<body>
<%!
int i =1;
string str="ABCDE";
public int sum(int num1, int num2){
return num1 + num2;
}
%>
<%=i %>
<%=str %>
<%=sum(1,2) %>
</body>
Q4. int[] iArr = {10,20, 30};
위의 배열을 Arrays의 toString() 메소드를 이용하여 출력하시오.
A.
<%@ page import="java.util.*" %>
<html>
<body>
<%
int[] iArr = {10, 20, 30};
out.println(Arrays.toString(iArr));
%>
</body>
</html>
Q5. 아래의 예시를 보고 jsp로 구현하고 그 결과를 JSPTesterResult.jsp에 출력하시오.
전화번호 옵션으로는 SKT, KT, LG가 있음.
A.
- Test.jsp
<html>
<head>
<title>회원가입</title>
</head>
<body>
<form method = "post" action="JSPTesterResult.jsp">
<table border="1">
<caption>회원가입</caption>
<tr>
<td>
<label for="name">이름</label>
</td>
<td>
<input type="text" name="name" id="name" required>
</td>
</tr>
<tr>
<td>
<label for="id">아이디</label>
</td>
<td>
<input type="text" name="id" id="id" required>
</td>
</tr>
<tr>
<td>
<label for="pw">비밀번호</label>
</td>
<td>
<input type="password" name="pw" id="pw" required>
</td>
</tr>
<tr>
<td>
<label for="pw2">비밀번호 확인</label>
</td>
<td>
<input type="password" name="pw2" id="pw2" required>
</td>
</tr>
<tr>
<td>
<label for="email">이메일</label>
</td>
<td>
<input type="email" name="email" id="email" required>
</td>
</tr>
<tr>
<td>취미</td>
<td>
<input type="checkbox" name="hobby" value="reading" id="reading">
<label for="reading">독서</label>
<input type="checkbox" name="hobby" value="cooking" id="cooking">
<label for="cooking">요리</label>
<input type="checkbox" name="hobby" value="running" id="running">
<label for="running">조깅</label>
<input type="checkbox" name="hobby" value="swimming" id="swimming">
<label for="swimming">수영</label>
<input type="checkbox" name="hobby" value="sleeping" id="sleeping">
<label for="sleeping">취침</label>
</td>
</tr>
<tr>
<td>전공</td>
<td>
<input type="radio" name="major" value="korean" id="korean" required>
<label for="korean">국어</label>
<input type="radio" name="major" value="english" id="english">
<label for="english">영어</label>
<input type="radio" name="major" value="math" id="math">
<label for="math">수학</label>
<input type="radio" name="major" value="design" id="design">
<label for="design">디자인</label>
</td>
</tr>
<tr>
<td>
<label for="mobileCompany">전화번호</label>
</td>
<td>
<select name="mobileCompany" id="mobileCompany">
<option value="SKT">SKT</option>
<option value="KT">KT</option>
<option value="LGU">LGU</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="전송">
<input type="reset" value="초기화">
</td>
</tr>
</table>
</form>
</body>
</html>
- JSPTesterResult.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>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String pw2 = request.getParameter("pw2");
String email = request.getParameter("email");
String[] hobby = request.getParameterValues("hobby");
String major = request.getParameter("major");
switch(major) {
case "korean" :
major = "국어";
break;
case "english" :
major = "영어";
break;
case "math" :
major = "수학";
break;
case "design" :
major = "디자인";
break;
}
String mobileCompany = request.getParameter("mobileCompany");
%>
이름: <%= name %> <br>
아이디: <%= id %> <br>
비밀번호: <%= pw %> <br>
이메일: <%= email %> <br>
취미: <%
for(int i=0;i<hobby.length; i++) {
out.println(hobby[i] + " ");
}
%> <br>
전공: <%= major %> <br>
통신사 : <%= mobileCompany %> <br>
</body>
</html>
Q6. Q5의 비밀번호 유효성 체크를 해보자.
A.
<html>
<head>
<title>회원가입</title>
</head>
<body>
<form method = "post" action="JSPTesterResult.jsp">
<table border="1">
<caption>회원가입</caption>
<tr>
<td>
<label for="name">이름</label>
</td>
<td>
<input type="text" name="name" id="name" required>
</td>
</tr>
<tr>
<td>
<label for="id">아이디</label>
</td>
<td>
<input type="text" name="id" id="id" required>
</td>
</tr>
<tr>
<td>
<label for="pw">비밀번호</label>
</td>
<td>
<input type="password" name="pw" id="pw" required>
</td>
</tr>
<tr>
<td>
<label for="pw2">비밀번호 확인</label>
</td>
<td>
<input type="password" name="pw2" id="pw2" required>
<input type="button" onclick="valiPw()" value="비밀번호 확인">
</td>
</tr>
<tr>
<td>
<label for="email">이메일</label>
</td>
<td>
<input type="email" name="email" id="email" required>
</td>
</tr>
<tr>
<td>취미</td>
<td>
<input type="checkbox" name="hobby" value="reading" id="reading">
<label for="reading">독서</label>
<input type="checkbox" name="hobby" value="cooking" id="cooking">
<label for="cooking">요리</label>
<input type="checkbox" name="hobby" value="running" id="running">
<label for="running">조깅</label>
<input type="checkbox" name="hobby" value="swimming" id="swimming">
<label for="swimming">수영</label>
<input type="checkbox" name="hobby" value="sleeping" id="sleeping">
<label for="sleeping">취침</label>
</td>
</tr>
<tr>
<td>전공</td>
<td>
<input type="radio" name="major" value="korean" id="korean" required>
<label for="korean">국어</label>
<input type="radio" name="major" value="english" id="english">
<label for="english">영어</label>
<input type="radio" name="major" value="math" id="math">
<label for="math">수학</label>
<input type="radio" name="major" value="design" id="design">
<label for="design">디자인</label>
</td>
</tr>
<tr>
<td>
<label for="mobileCompany">전화번호</label>
</td>
<td>
<select name="mobileCompany" id="mobileCompany">
<option value="SKT">SKT</option>
<option value="KT">KT</option>
<option value="LGU">LGU</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="전송">
<input type="reset" value="초기화">
</td>
</tr>
</table>
</form>
<script>
function valiPw() {
var pw = document.getElementById("pw").value;
var pw2 = document.getElementById("pw2").value;
console.log(pw);
console.log(pw2);
if(pw != pw2) {
alert("비밀번호가 다릅니다.");
} else {
alert("비밀번호가 일치합니다.");
}
}
</script>
</body>
</html>
Q7. JSPTest.jsp에서 이름과 나이를 입력받고
JSPTestRequest.jsp에서 나이가 20이상이면
JSPTestPass.jsp로 가서 "성인입니다. 주류구매가 가능 합니다." 라고 출력하고
나이가 20미만이면
JSPTestTeenager.jsp로 가서 "미성년자 입니다. 주류구매가 불가능합니다."라고 출력한다.
그리고 JSPTestPass.jsp와 JSPTestTeenager.jsp에서 각각 입력 받은 이름과 나이도 출력하도록 하자.
A.
- JSPTest.jsp
<html>
<head>
<title>회원가입</title>
</head>
<body>
<form method = "post" action="JSPTesterResult.jsp">
<table border="1">
<caption>회원가입</caption>
<tr>
<td>
<label for="name">이름</label>
</td>
<td>
<input type="text" name="name" id="name" required>
</td>
</tr>
<tr>
<td>
<label for="age">나이/label>
</td>
<td>
<input type="text" name="age" id="age" required>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="전송">
<input type="reset" value="초기화">
</td>
</tr>
</table>
</form>
</body>
</html>
- JSPTestRequest.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>
<%
int age = Integer.parseInt(request.getParameter("age"));
if(age < 20) {
response.sendRedirect("JSPTESTRequestPassNG.jsp");
} else {
response.sendRedirect("JSPTESTRequestPass.jsp");
}
%>
</body>
</html>
- JSPTestPass.jsp
<html>
<head>
<title>회원가입</title>
</head>
<body>
<p>성인입니다. 주류구매가 가능합니다.</p>
</body>
</html>
- JSPTestTeenager.jsp
<html>
<head>
<title>회원가입</title>
</head>
<body>
<p>"미성년자 입니다. 주류구매가 불가능합니다."</p>
</body>
</html>
'Web > JSP' 카테고리의 다른 글
[필기정리]Day75 - Servlet 생명주기, session 등 (0) | 2020.10.13 |
---|---|
[필기정리] Day73 - include file, submit, Servlet, RequestDispatcher 등 (0) | 2020.10.08 |
[필기정리]Day70 - jsp 게시판 만들기 예제 (0) | 2020.10.05 |
[필기정리] Day69 - get, post 방식, insert, select 등 (0) | 2020.10.02 |
[필기정리] Day67-2 - JDBC, 데이터 삭제 SQL 등 (0) | 2020.09.25 |