728x90
글쓰기 페이지는 로그인했을 때만 이동할 수 있게 만들어뒀다.
제목과 내용을 작성하고 첨부파일을 하나 넣을 수 있다.
아래는 jsp에서 컨트롤러로 값을 보내는 코드
이미지 사이즈를 재설정하는 imgscalr-lib와 첨부파일 기능을 만들기 위해서 cos.jar 라이브러리를 다운로드하여 사용했다.
파일을 업로드하기 위해서 form enctype 속성을 "multipart/form-data"로 설정해주었다.
이렇게 설정해주면 폼 값을 보낼때 인코딩하지 않고 값을 보낸다.
// 컨트롤러로 내용을 보낸다.
<script>
function mainSubmit(){
document.fm.action="<%=request.getContextPath()%>이동할 컨트롤러";
document.fm.method="post";
document.fm.enctype="multipart/form-data";
}
</script>
<form name=fm>
<table>
<thead>
<tr>
<th><input id="subject" name="subject" type="text" placeholder="제목을 입력하세요" required></th>
</tr>
</thead>
<tbody>
<tr>
<td><textarea id="content" name="content" placeholder="내용을 입력하세요" required></textarea></td>
</tr>
<tr>
<td id="filePath"> <input name="filename" type="file"> </td>
</tr>
</tbody>
<tfoot>
<tr>
<td>
<button type="submit" onclick="mainSubmit()">등록</button>
<button type="button" onclick="history.back();">취소</button>
</td>
</tr>
</tfoot>
</table>
</form>
아래는 컨트롤러에서 글을 DB에 등록하는 코드
sizeLimit는 등록하는 파일의 용량을 제한한다. 이미지 파일일 경우 이렇게 하면 너무 크다...
이전에 form에서 데이터 타입을 multipart/form-data 보냈기 때문에 이전의 request 영역에서 값을 읽어오는 것과 다르게
MultipartRequest 객체를 생성해 여기서 값을 읽는다.
//작성한 글을 DB에 넣는다.
int sizeLimit = 1024*1024*15;
MultipartRequest multi = new MultipartRequest(request, saveFullPath, sizeLimit, "utf-8", new DefaultFileRenamePolicy());
HttpSession session = request.getSession();
String subject = multi.getParameter("subject");
String content = multi.getParameter("content").replace("\r\n", "<br>");
String id = (String) session.getAttribute("id");
int midx = (int)session.getAttribute("midx");
// 열거자에 저장될 파일을 담는 객체를 생성한다.
Enumeration files = multi.getFileNames();
// 담긴 파일객체의 파일 이름을 얻는다.
String file = (String)files.nextElement();
//저장되는 파일 이름
String fileName = multi.getFilesystemName(file);
//원래 파일 이름
String originFileName = multi.getOriginalFileName(file);
MainDAO mdo = new MainDAO();
int value = mdo.insertMain(subject, content, id, midx, fileName);
PrintWriter out = response.getWriter();
if(value == 1) {
response.sendRedirect(pj+"/main/index.do");
}else{
out.println("<script>alert('글쓰기 실패');</script>");
}
아래는 DAO의 입력 메서드
public int insertMain(String subject, String content, String ID, int midx, String fileName) {
// DB에 글을 넣는다.
int value = 0;
String sql = "insert into main(bidx,subject,content,midx,writer,viewcount,likecount,filename)"
+ "values(bidx_main.nextval,?,?,?,?,?,?,?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2, content);
pstmt.setInt(3, midx);
pstmt.setString(4, ID);
pstmt.setInt(5, 0);
pstmt.setInt(6, 0);
pstmt.setString(7, fileName);
value = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return value;
}
728x90
'노트' 카테고리의 다른 글
2022.06.21 TIL (0) | 2022.06.21 |
---|---|
토이 프로젝트 주식 커뮤니티 만들기(9) - google chart 이용 그래프 그리기 (0) | 2022.06.17 |
토이 프로젝트 주식 커뮤니티 만들기(7) - JSP 로그인 페이지/ 아이디 찾기/ 비밀번호 찾기 (0) | 2022.06.07 |
토이 프로젝트 주식 커뮤니티 만들기(6) - JSP 회원가입 페이지 (0) | 2022.06.05 |
토이 프로젝트 주식 커뮤니티 만들기(5) - 초기화면 생성/JSP 드롭다운 버튼 (0) | 2022.06.03 |