1. .do 뒤에 파라미터로 직접 써서 보낼 수 있다.
location.href = "/TotalManagement/boardListDetail.do?no=7";
location.href = "detail.jsp?no=" + boardNO + "&type=list";
~~~.do 뒤에 파라미터가 붙어와도, bean.properties에서 해당 컨트롤러를 잘 찾는다.
2. form 태그로 보낼 수 있다. 아래는 form 태그로 보내는 예시다
jsp 에서 .do로 파라미터 보내기
-> form 태그로 담아서 보내고
컨트롤러(java)에서 request.getParameter("name") 하면 됨.
아래의 코드에서
writeForm.jsp에 form 태그 내용을
WriteProcessController.java로 날려서, 해당 java 파일에서 request.getParameter로 받을 수 있음
(그런데 예제에는 multi객체를 썼네. 비슷한거 많으니 프로젝트 코드 찾아보삼)
TotalManagement 프로젝트 안에 있음.
writeFormController.java
package kr.ac.kopobank;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WriteFormController implements Controller{
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return "/jsp/board/writeForm.jsp";
}
}
writeForm.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>
<link rel="stylesheet" href="/TotalManagement/css/layout.css">
<link rel="stylesheet" href="/TotalManagement/css/board.css">
<script>
function doWrite(){
let f = document.wForm;
if(f.title.value == ''){
alert('제목을 입력하세요.')
f.title.focus();
return false;
}
/* if(f.writer.value == ''){
alert('글쓴이를 입력하세요.')
f.writer.focus();
return false;
} */
if(f.content.value == ''){
alert('내용을 입력하세요.')
f.content.focus();
return false;
}
// 파일 확장자 체크
if(checkExt(f.attachfile1)) {
return false;
}
if(checkExt(f.attachfile2)) {
return false;
}
return true;
}
function checkExt(obj) {
let forbidName = ['exe', 'bat', 'java', 'js', 'class', 'jsp'];
let fileName = obj.value;
let ext = fileName.substring(fileName.lastIndexOf('.')+1);
for(let i = 0; i < forbidName.length; i++) {
if(forbidName[i] == ext) {
alert('[' + ext + '] 확장자는 파일 업로드 정책에 위배됩니다');
return true;
}
}
return false;
}
function doList(){
location.href = "list.jsp";
}
// 고전적 이벤트 모델
window.onload = function(){ // body 까지 읽고 난 후에 실행될 부분...
let btn = document.getElementById("btnList");
btn.onclick = function(){
alert('click...')
location.href = "list.jsp"
}
}
</script>
</head>
<body>
<header>
<jsp:include page="/jsp/include/topMenue.jsp"/>
</header>
<section>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div class="custom-breadcrumns border-bottom">
<div class="container">
<a href="/TotalManagement/index.jsp">KOPO BANK</a>
<span class="mx-3 icon-keyboard_arrow_right"></span>
<span class="current">Q&A</span>
</div>
</div>
<div align = "center">
<!-- <hr width = "80%">
<h2>게시물 등록폼</h2>
<hr width = "80%"> -->
<br>
<form action = "<%= request.getContextPath() %>/writeProcess.do" method = "post" name ="wForm" onsubmit="return doWrite()"
enctype = "multipart/form-data"> <!-- url에 정보를 담지 않으려면, post 방식으로 보내야 한다. -->
<table border = "1" style = "width : 80%">
<tr>
<th width = "23%">제목</th>
<td><input type = "text" name = "title" size = "50"></td> <!-- name = value 형태로 보내야하니, name 속성을 반드시 정한다. -->
</tr>
<tr>
<th>글쓴이</th>
<td>${ userVO.id }</td>
<input type="hidden" name="writer" value ="${ userVO.id }">
<!-- <td><input type = "text" name = "writer" size = "50"></td> required = "required" 할 수도 있음. -->
<!-- <td><input type = "text" name = "writer" size = "50" value = ${ userVO.id} readonly ></td> -->
</tr>
<tr>
<th>내용</th>
<td>
<textarea rows="7" cols="60" name="content"></textarea>
</td>
</tr>
<tr>
<th>첨부파일</th>
<td>
<input type="file" name="attachfile1"><br>
<input type="file" name="attachfile2"><br>
</td>
</tr>
</table>
<!-- <button type = "submit"></button> -->
<input type = "submit" value = "등록">
<!-- <input type = "button" value = "목록" onclick="doList()"> 인라인 이벤트 모델(?) -->
<input type = "button" value = "목록" id = "btnList">
</form>
<br>
<br>
</div>
</section>
<footer>
<jsp:include page="/jsp/include/footer.jsp"/>
</footer>
</body>
</html>
writeProcessController.java
package kr.ac.kopobank;
import java.io.File;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import kr.ac.kopobank.board.dao.BoardDAO;
import kr.ac.kopobank.board.file.vo.BoardFileVO;
import kr.ac.kopobank.board.vo.BoardVO;
import kr.ac.kopobank.util.KopoFileNamePolicy;
public class WriteProcessController implements Controller{
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// POST 방식으로 받으면, 인코딩 설정을 해야 한다.
request.setCharacterEncoding("utf-8");
String saveFolder = "D:/workspace/web/web-workspace/Mission-WEB/WebContent/upload";
//String saveFolder = "C:/dev/workspace/totalManage/TotalManagement/WebContent/upload";
MultipartRequest multi = new MultipartRequest(
request,
saveFolder,
1024 * 1024 * 3,
"utf-8",
new KopoFileNamePolicy()
);
// 1단계 : 게시물 저장(t_board)
String title = multi.getParameter("title");
String writer = multi.getParameter("writer");
String content = multi.getParameter("content");
BoardDAO dao = new BoardDAO();
int boardNo = dao.selectBoardNo();
// 게시물 번호 추출(seq_t_board_no)
BoardVO board = new BoardVO();
board.setTitle(title);
board.setWriter(writer);
board.setContent(content);
board.setNo(boardNo);
dao.insertBoard(board);
// 2단계 : 첨부파일 저장(t_board_file)
Enumeration<String> files = multi.getFileNames();
while(files.hasMoreElements()) {
String fileName = files.nextElement();
File f = multi.getFile(fileName);
if(f != null) {
String fileOriName = multi.getOriginalFileName(fileName);
String fileSaveName = multi.getFilesystemName(fileName);
int fileSize = (int)f.length();
BoardFileVO fileVO = new BoardFileVO();
fileVO.setFileOriName(fileOriName);
fileVO.setFileSaveName(fileSaveName);
fileVO.setFileSize(fileSize);
fileVO.setBoardNo(boardNo); // 외래키에 해당 게시물번호
dao.insertFile(fileVO);
}
}
return "/jsp/board/writeProcess.jsp";
}
}
writeProcess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script>
alert('게시판에 등록되었습니다');
/* location.href = "/TotalManagement/jsp/board/boardList.jsp"; */
location.href = "/TotalManagement/boardList.do";
</script>
'웹 프로그래밍 > JSP' 카테고리의 다른 글
[JSP] .do 패턴에서 갑자기 페이지가 뜨지 않으면 bean.properties를 의심하라. (0) | 2020.08.16 |
---|---|
[JSP] MultipartRequest를 이용한 파일 업로드 예제 (0) | 2020.07.27 |
[JSP] form 태그로 파일을 보내는 방법 (0) | 2020.07.23 |
[JSP] 해석 순서( jsp >> javascript ) : JSTL 등의 jsp 코드는 주석처리되어 화면에 안보임 (0) | 2020.07.23 |
[JSP] JSTL의 c 라이브러리 중 choose 태그를 사용하는 방법(if, else if, else) (0) | 2020.07.22 |