기본값(get)
post는 값이 주소창에 표시되지 않는걸 확인할 수 있다.
[예제_게시판]
insertBoard.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>
<form action="insertBoardServer.jsp" method="post">
<table border="1">
<tr>
<td>제목</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea rows="10" cols="30" name="content"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="글쓰기"></td>
</tr>
</table>
</form>
</body>
</html>
insertBoardServer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8"); // 값을 받아온걸 post로 받았기 때문에 그걸 풀어주는 코드
String title = request.getParameter("title");
String content = request.getParameter("content");
// JDBC 드라이버 로딩(mysql)
Class.forName("com.mysql.jdbc.Driver");
// java api에 db를 연결하기 위한 객체
Connection conn = null;
// workbench에서 sql을 작성한 후 (ctrl+enter)
// sql문장을 작성을 하고, 그 sql문장을 실행을 위한 객체
PreparedStatement pstmt = null;
// select의 결과를 DBMS에서 java로 저장하기 위한 객체
ResultSet rs = null;
try{
String jdbcDriver ="jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "insert into board(title,content) values(?,?)";
pstmt = conn.prepareStatement(query);
pstmt.setString(1,title); // 첫번째 물음표에는 title을 넣어라
pstmt.setString(2,content); // 두번째 물음표에는 content값을 넣어라.
pstmt.executeUpdate(); // insert가 정상적으로 처리
out.println("DB 연결 성공");
// insert 한 후 게시판 목록 리스트 화면(viewBoardList.jsp)으로 이동하라고 응답
response.sendRedirect("viewBoardlist.jsp");
// 데이터가 있을때까지 반복 -> 데이터가 있으면(true), 데이터가 없으면(false)값을 리턴하기 때문에
// = 값이 있으면 넘겨줌
}catch(SQLException ex){
// out.println(ex);
out.println("DB 연결 실패");
}finally{
if(conn!=null){conn.close();}
}
%>
</body>
</html>
값을 입력하고
DB 연결된 것 까지 확인
mysql에서 select * from board;를 해보면
11~14까지 글씨가 깨진것을 확인 할 수있는데
post방식으로 받아오면 기존 적용해둔 utf-8이 적용이 안되기 때문에 한글이 깨지는걸 방지하기 위해선
request.setCharacterEncoding("utf-8");
아래 코드를 꼭 작성해주어야 한다.
// insert 한 후 게시판 목록 리스트 화면(viewBoardList.jsp)으로 이동하라고 응답
response.sendRedirect("viewBoardlist.jsp");
게시판 메인(viewboradlist.jsp)
게시판 내용을 보기위한 페이지(viewBoardDetail.jsp)
[예제 코드_viewBoardDetail.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form>
<!-- 게시판 윗 부분은 반복하지 않아도 되므로 밖으로 빼줘서 처리해줌 -->
<%
int no = Integer.parseInt(request.getParameter("no"));
// JDBC 드라이버 로딩(mysql)
Class.forName("com.mysql.jdbc.Driver");
// java api에 db를 연결하기 위한 객체
Connection conn = null;
// workbench에서 sql을 작성한 후 (ctrl+enter)
// sql문장을 작성을 하고, 그 sql문장을 실행을 위한 객체
PreparedStatement pstmt = null;
// select의 결과를 DBMS에서 java로 저장하기 위한 객체
ResultSet rs = null;
// 연결하기
// 드라이버 매니저에게 Connection 객체를 달라고 요청한다.
// Connection을 얻기 위해 필요한 데이터(url,아이디,비밀번호)
try{
String jdbcDriver ="jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "select * from board where no = ?"; // excuteQuery
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, no); //첫번째 물음표에는 no값을 넣어라
rs = pstmt.executeQuery();
if(rs.next()){
%>
<table border="1">
<tr>
<td colspan="2">
<%-- 번 호 : <input type="text" name="no" value="<%=rs.getInt("no") %> readonly> --%>
번 호 : <%=rs.getInt("no") %><input type="hidden" name="no" value="<%=rs.getInt("no") %>">
조회수 : <%=rs.getInt("count") %>
좋아요 : <%=rs.getInt("good") %>
</td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title" value="<%=rs.getString("title") %>"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea rows="10" name="content" cols="30"><%=rs.getString("content") %></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="수정" formaction="modifyBoard.jsp">
<input type="submit" value="삭제" formaction="removeBoard.jsp">
</td>
</tr>
<%
}
out.println("DB 연결 성공");
}catch(SQLException ex){
out.println("DB 연결 실패");
}finally{
if(conn!=null){conn.close();}
}
%>
</table>
</form>
</body>
</html>
modifyBoard.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% // request한 데이터가 한글일 때 깨지는 현상 방지 ( post 방식으로 보낼 경우 필요함 )
request.setCharacterEncoding("utf-8");
// input에서 받아온 데이터를 저장
int no = Integer.parseInt(request.getParameter("no"));
String title = request.getParameter("title");
String content = request.getParameter("content");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
String jdbcDriver = "jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "update board set title=?, content=? where no = ?";
pstmt = conn.prepareStatement(query);
pstmt.setString(1,title);
pstmt.setString(2,content);
pstmt.setInt(3,no);
pstmt.executeUpdate();
response.sendRedirect("viewBoardDetail.jsp?no="+no);
} catch(SQLException ex){
out.println(ex);
out.println("DB 연결 실패");
} finally {
if(conn != null){
conn.close();
}
}
%>
</body>
</html>
14번 수정후 수정버튼 눌러보기
14번 수정된 모습
viewBoardDetail 게시판 제목을 눌러서 들어가 8번을 삭제
삭제된 모습
remove.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% // request한 데이터가 한글일 때 깨지는 현상 방지 ( post 방식으로 보낼 경우 필요함 )
request.setCharacterEncoding("utf-8");
// input에서 받아온 데이터를 저장
int no = Integer.parseInt(request.getParameter("no"));
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
// ResultSet rs = null;
PreparedStatement pstmt = null;
try {
String jdbcDriver = "jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "delete from board where no = ?";
pstmt = conn.prepareStatement(query);
pstmt.setInt(1,no);
pstmt.executeUpdate();
response.sendRedirect("viewBoardlist.jsp"); //+no
} catch(SQLException ex){
out.println(ex);
out.println("DB 연결 실패");
} finally {
if(conn != null){
conn.close();
}
}
%>
</body>
</html>
위까지 만든 내용 정리
insertMember.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>
<form action="insertMemberServer.jsp" method="post">
<table>
<tr><td>아이디</td></tr>
<tr><td><input type="text" name="id"></td></tr>
<tr><td>비밀번호</td></tr>
<tr><td><input type="password" name="pswd"></td></tr>
<tr><td>이름</td></tr>
<tr><td><input type="text" name="name"></td></tr>
<tr><td>생년월일</td></tr>
<tr>
<td>
<input type="text" name="year" placeholder="년(4자)">
<select name="month">
<option value="">월</option>
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
</select>
<input type="text" name="day" placeholder="일">
</td>
</tr>
<tr>
<td>성별</td>
</tr>
<tr>
<td>
<select name="gender">
<option value="">성별</option>
<option value="m">남자</option>
<option value="f">여자</option>
<option>선택안함</option>
</select>
</td>
</tr>
<tr>
<td>이메일</td>
</tr>
<tr>
<td>
<input type="text" name="email">
</td>
</tr>
<tr>
<td>연락처</td>
</tr>
<tr>
<td>
<input type="text" name="phone">
</td>
</tr>
<tr>
<td><input type="submit" value="가입하기"></td>
</tr>
</table>
</form>
</body>
</html>
insertMemberServer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//한글 깨짐 방지(post방식 일때)
request.setCharacterEncoding("utf-8");
// 아이디
String id = request.getParameter("id");
// 비밀번호
String password = request.getParameter("password");
// 이름
String name = request.getParameter("name");
// 생년월일
String birthday = request.getParameter("year")+request.getParameter("month")+request.getParameter("day");
// 성별
String gender = request.getParameter("gender");
// 이메일
String email = request.getParameter("email");
// 연락처
String phone = request.getParameter("phone");
// JDBC 드라이버 로딩(mysql)
Class.forName("com.mysql.jdbc.Driver");
// java api에 db를 연결하기 위한 객체
Connection conn = null;
// workbench에서 sql을 작성한 후 (ctrl+enter)
// sql문장을 작성을 하고, 그 sql문장을 실행을 위한 객체
PreparedStatement pstmt = null;
// select의 결과를 DBMS에서 java로 저장하기 위한 객체
ResultSet rs = null;
try{
String jdbcDriver ="jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "insert into member values(? ,? ,? ,? ,? ,?, ?);";
pstmt = conn.prepareStatement(query);
pstmt.setString(1,id); // 첫번째 물음표에는 id값을 넣어라
pstmt.setString(2,password); // 두번째 물음표에는 password값을 넣어라.
pstmt.setString(3,name); // 세번째 물음표에는 name 값을 넣어라
pstmt.setString(4,birthday); // 네번째 물음표에는 birthday 값을 넣어라.
pstmt.setString(5,gender); // 다섯번째 물음표에는 gender 값을 넣어라.
pstmt.setString(6,email); // 여섯번째 물음표에는 email 값을 넣어라.
pstmt.setString(7 ,phone); // 일곱번째 물음표에는 phone 값을 넣어라.
pstmt.executeUpdate(); // insert가 정상적으로 처리
out.println("DB 연결 성공");
// insert 한 후 게시판 목록 리스트 화면(viewBoardList.jsp)으로 이동하라고 응답
// response.sendRedirect("viewBoardlist.jsp");
// 데이터가 있을때까지 반복 -> 데이터가 있으면(true), 데이터가 없으면(false)값을 리턴하기 때문에
// = 값이 있으면 넘겨줌
}catch(SQLException ex){
out.println(ex);
out.println("DB 연결 실패");
}finally{
if(conn!=null){conn.close();}
}
%>
</body>
</html>
가입하기를 하면 db에 값이 들어감.
loginServer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// JDBC 드라이버 로딩(mysql)
Class.forName("com.mysql.jdbc.Driver");
// java api에 db를 연결하기 위한 객체
Connection conn = null;
// workbench에서 sql을 작성한 후 (ctrl+enter)
// sql문장을 작성을 하고, 그 sql문장을 실행을 위한 객체
PreparedStatement pstmt = null;
// select의 결과를 DBMS에서 java로 저장하기 위한 객체
ResultSet rs = null;
// 연결하기
// 드라이버 매니저에게 Connection 객체를 달라고 요청한다.
// Connection을 얻기 위해 필요한 데이터(url,아이디,비밀번호)
try{
String id = request.getParameter("id");
String password = request.getParameter("password");
String jdbcDriver ="jdbc:mysql://localhost:3306/naver_1?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "select * from member where id = ? and pswd= ? "; // excuteQuery
pstmt = conn.prepareStatement(query);
pstmt.setString(1, id); //첫번째 물음표에는 id값을 넣어라
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next()){ // select 결과가 1건 있음(로그인 해도 됨)
// session영역에 user_id변수에 id값을 저장
session.setAttribute("user_id",id);
// 메인페이지로 이동(index.jsp)
response.sendRedirect("index.jsp"); //index,jsp로 이동
}else{ // select 결과 없음(로그인 하면 안됨)
// 회원가입페이지로 이동(insertMember.jsp)
response.sendRedirect("insertMebmer.jsp");
}
out.println("DB 연결 성공");
}catch(SQLException ex){
out.println("DB 연결 실패");
}finally{
if(rs!=null){conn.close();}
if(conn!=null){conn.close();}
}
%>
</body>
</html>
로그아웃을 위한 jsp
logOutServer.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>
<%
session.invalidate();
%>
</body>
</html>