본문 바로가기

웹 프로그래밍/JSP

[JSP] jsp에서 .do (컨트롤러)로 파라미터 보내는 방법 2 가지

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>