1. Controller 에서 글작성 페이지 이동 -> write_view.jsp로 응답 됨
@RequestMapping("/write_view")
public String write_view(Model model) {
logger.info("write_view start..");
return "write_view";
}
2. Write_view.jsp
- submit 선택시 form action="write" method="post" 실행
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="write" method="post">
<table width= "500" border="1">
<tr>
<td> 이름 </td>
<td> <input type="text" name="bName" size = "50"> </td>
</tr>
<tr>
<td> 제목 </td>
<td> <input type="text" name="bTitle" size = "50"> </td>
</tr>
<tr>
<td> 내용 </td>
<td> <textarea name="bContent" rows="10" ></textarea> </td>
</tr>
<tr >
<td colspan="2"> <input type="submit" value="입력">
<a href="list">목록보기</a></td>
</tr>
</table>
</form>
</body>
</html>
3. Controller
- Write_view.jsp에서 받은 파라메터 값을 model.addAttribute("test", request) 를 사용하여 담아놓는다.
@RequestMapping("/write")
public String write(HttpServletRequest request, Model model) {
logger.info("write start..");
model.addAttribute("request", request);
command = new BWriteCommand();
command.execute(model);
return "redirect:list";
}
4. BWriteCommand() 실행
1) Map<String, Object> map = model.asMap();
- Controller에서 model을 통해 전달받은 값을 Map 형식으로 바꿔줌.
- model.addAttribute("test", request -> "key", value);
2) HttpServletRequest request = (HttpServletRequest) map.get("test");
- Map 에 담아둔 값을 다시 request에 꺼내담는다.
package com.oracle.oMVCBoard.command;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.ui.Model;
import com.oracle.oMVCBoard.dao.BDao;
public class BWriteCommand implements BCommand {
@Override
public void execute(Model model) {
Map<String, Object> map = model.asMap();
HttpServletRequest request = (HttpServletRequest) map.get("request");
System.out.println("BWriteCommand의 request : "+request);
System.out.println("BWriteCommand의 map : "+map);
String bName = request.getParameter("bName");
String bTitle = request.getParameter("bTitle");
String bContent = request.getParameter("bContent");
BDao dao = new BDao();
dao.write(bName, bTitle, bContent);
}
}
5. Dao 에서 DB 연결하여 실행
public void write(String bName, String bTitle, String bContent) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = dataSource.getConnection();
String query = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate)"
+ "values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq_currval, 0, 0, sysdate)";
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, bName);
preparedStatement.setString(2, bTitle);
preparedStatement.setString(3, bContent);
int rn = preparedStatement.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
System.out.println("write dataSource-->" + e.getMessage() );
e.printStackTrace();
} finally {
try {
if(preparedStatement != null) preparedStatement.close();
if(connection != null) connection.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
***** 입력만 누르면 끝인데,, 갑분오... 갑자기 오류!!
-> 열을 사용할 수 없다, insert into 부분에 오류가 있는 것이 확실.
-> 컬럼 이름 중 오타 있나 확인 해보니 역시나~!
String query = insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate) values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq_currval, 0, 0, sysdate)
* mvc_board_seq_currval -> mvc_board_seq.currval 으로 수정하면 된다.
수정 후 DAO
public void write(String bName, String bTitle, String bContent) {
Connection conn = null;
PreparedStatement pstmt= null;
try {
conn = dataSource.getConnection();
String sql = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate)"
+ "values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq.currval, 0, 0, sysdate)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, bName);
pstmt.setString(2, bTitle);
pstmt.setString(3, bContent);
int rn = pstmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
System.out.println("write dataSource-->" + e.getMessage() );
e.printStackTrace();
} finally {
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
6. 최종화면 - 방금 입력한 글이 삽입 되어 있는 것을 볼 수 있다.
'IT > SpringDay' 카테고리의 다른 글
02. Spring MVC 게시판 구현⑤ - 답글작성★ (0) | 2022.05.18 |
---|---|
02.spring 게시판 오류 - java.sql.SQLSyntaxErrorException: ORA-00984: column not allowed here (0) | 2022.05.18 |
02. Spring MVC 게시판 구현③ - 게시글 상세정보 (0) | 2022.05.17 |
02. Spring MVC 게시판 구현 오류-javax.naming.NameNotFounudException:Name[jdbc/OracleDB] (0) | 2022.05.17 |
02. Spring MVC 게시판 구현② - 리스트 (0) | 2022.05.17 |