JSP #5

jjinny_0609·2023년 3월 24일
0

JSP

목록 보기
5/6
post-custom-banner

form태그

기본값(get)

post는 값이 주소창에 표시되지 않는걸 확인할 수 있다.

게시판 내용을 DB에 넘기기

[예제_게시판]
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;를 해보면

method="post" 사용으로 mysql에 한글이 깨지는 경우

11~14까지 글씨가 깨진것을 확인 할 수있는데
post방식으로 받아오면 기존 적용해둔 utf-8이 적용이 안되기 때문에 한글이 깨지는걸 방지하기 위해선

request.setCharacterEncoding("utf-8");	

아래 코드를 꼭 작성해주어야 한다.


입력후 화면으로 넘어가기

// insert 한 후 게시판 목록 리스트 화면(viewBoardList.jsp)으로 이동하라고 응답
		response.sendRedirect("viewBoardlist.jsp");


한개의 Form에서 여러개의 Submit 사용하기

https://kutar37.tistory.com/entry/%ED%95%9C%EA%B0%9C%EC%9D%98-Form%EC%97%90%EC%84%9C-%EC%97%AC%EB%9F%AC%EA%B0%9C-Submit-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
위 링크를 참고


글 수정

게시판 메인(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>
profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :
post-custom-banner

0개의 댓글