아무튼 개발
article thumbnail
반응형

 

스프링으로 게시판을 만들어 볼 것이다!

그 중에서도 입력창과 수정창, 그리고 데이터를 넘기는 코딩을 알아보겠다.

 

게시판은 내 블로그에서 JSP부터 aJax 까지 많이 다뤄왔다. 그 글을 참고해도 좋고, 오늘은 Spring으로 알아보겠다.

 


 

BoardCommand.java

게시판 웹페이지를 위해 사용할 변수를 선언해준다. + DB 테이블에도 만들었다.

public class BoardCommand {	
	private int boardNum;
	private String subject;
	private String name;
	private String email;
	private String pwd;
	private String content;
	private String ipAddr;
	private String created;
	private int hitCount;
	
	private String mode;
	private String pageNum;

 

+게터, 세터를 모든 변수에 해준다.

 

 

created.jsp

사용자에게 보여질 입력창이다.

스크립트 먼저 알아보겠다.

<title>게 시 판</title>

<script type="text/javascript">
if(f.mode.value=="insert"){			
			f.action = "<%=cp%>/bbs/created.action";
		}else{
			f.action = "<%=cp%>/bbs/updated.action";
		}
		
		f.submit();		
	}
</script>

 

mode는 밑에 나오겠지만 사용자가 입력or수정할 때 모두 created창에 입력된 내용이 같기 때문에

mode로 사용 목적을 구분하는 것이다.

insert는 입력인 경우에 created.action으로 경로를 지정했으며

그 외, 즉 수정할 경우의 경로를 다르게 지정했다.

 

<body>
	<!-- 입력 input창은 생략 -->

    <input type="hidden" name="pageNum" value="${pageNum }">
    <input type="hidden" name="mode" value="${mode }">	

    <c:if test="${mode=='insert' }">
        <input type="button" value=" 등록하기 " class="btn2" onclick="sendIt();"/>
        <input type="reset" value=" 다시입력 " class="btn2" onclick="document.myForm.subject.focus();"/>
        <input type="button" value=" 작성취소 " class="btn2" onclick="javascript:location.href='<%=cp%>/bbs/list.action';"/>		
    </c:if>	

    <c:if test="${mode=='update' }">
        <input type="hidden" name="boardNum" value="${dto.boardNum }">

        <input type="button" value=" 수정하기 " class="btn2" onclick="sendIt();"/>
        <input type="button" value=" 수정취소 " class="btn2" onclick="javascript:location.href='<%=cp%>/bbs/list.action?pageNum=${pageNum }';"/>
    </c:if>

</body>

 

<body> 부분이다.

설명상 화면에 보여질 입력창 부분은 그동안 게시판 블로그글에서 확인할 수 있으니 생략하겠다.

입력창 내용을 써주었다면 위의 부분은 값을 넘겨주고 받는 부분이다.

 

마찬가지로 mode를 2개로 나누어 보여지는 값을 다르게 하였다.

onClick의 경우에도 각각 다른 경로로 이동하게 된다.

 

 

BoardController.java

가장 핵심인 컨트롤러 파일이다!

어노테이션을 사용하여 코딩을 완성하였다.

 

  • 입력창 데이터 주고 받기
@Controller("bbs.boardController")
public class BoardController {
	
	@Resource(name="dao") 
	private CommonDAO dao; 
	
	@RequestMapping(value="/bbs/created.action",method= {RequestMethod.GET, RequestMethod.POST})
	public String created(BoardCommand command, HttpServletRequest request) throws Exception{
		
		if(command==null||command.getMode()==null||command.getMode().equals("")) {			
			request.setAttribute("mode", "insert");			
			return "board/created";
		}
		
		int boardNumMax = dao.getIntValue("bbs.boardNumMax");
		
		command.setBoardNum(boardNumMax + 1);
		command.setIpAddr(request.getRemoteAddr());
		
		dao.insertData("bbs.insertData", command);
		
		return "redirect:/bbs/list.action";
	}

 

먼저 지난 글에서도 설명했듯이 @Controller 어노테이션을 입력하였다.

 

@Resource

객체 생성한 것을 가져오는 어노테이션이다.

@Autowired 과 @Qualifier을 합친 것과 같은 효과이다.

 

@RequestMapping)

어떤 경로가 오냐에 따라 다른 메소드가 실행되도록 어노테이션을 입력해주었다.

받은 데이터가 없거나 지정한 mode값이 없다면

mode에 insert값을 넣어 위에서 보았던 created.jsp로 보내게 되는 것이다.

 

정상적으로 실행된다면 boardNumMax값을 넣어주며 이는 밑의 xml파일에서 sql을 확인할 수 있다.

set으로 입력창에서 넘어오지않았던 남은 값들을 너어주었다.

 

return값에는 현재 데이터를 '입력'하는 것이기 때문에 redirect로 경로를 지정한다.

 

  • 수정창 화면 구현
	@RequestMapping(value="/bbs/updated.action",method= {RequestMethod.GET})
	public String updateForm(HttpServletRequest request) throws Exception{ 
		
		int boardNum = Integer.parseInt(request.getParameter("boardNum"));
		String pageNum = request.getParameter("pageNum");
		
		BoardCommand dto = (BoardCommand)dao.getReadData("bbs.readData", boardNum);
		
		if(dto==null) {
			return "redirect:/bbs/list.action?pageNum=" + pageNum;
		}
		
		request.setAttribute("dto",dto);
		request.setAttribute("mode", "update");
		request.setAttribute("pageNum", pageNum);
		
		return "board/created";
	}

 

GET 방식으로 value안의 경로가 오면 메소드가 실행된다.

수정이기 때문에 기존의 값들을 받기 위해 getParameter를 입력해주었다.

 

또한 DB에 담은 데이터를 dto로 가져왔다.

dto에 값이 없다면 리스트로 나가도록 경로를 주었다.

 

created.jsp 경로로 가면서 모드값을 update로 가져가므로

jsp파일에서 mode에 따라 수정창이 나오게 되는 것이다.

 

@RequestMapping(value="/bbs/updated.action",method= {RequestMethod.POST})
	public String updateSubmit(BoardCommand command, HttpServletRequest request) throws Exception{
		
		dao.updateData("bbs.updateData", command);
        
		return "redirect:/bbs/list.action?pageNum=" + command.getPageNum();
	}

 

나아가 수정을 실제로 처리하는 코딩이다.

데이터를 받아야 하므로 command를 추가로 해주었다.

 

수정도 마찬가지로 리다이렉트해야하기 때문에 return값에 redirect로 주었다.

또한 어떤 글을 수정할 것인지 알아야 하므로 pageNum을 함께 가지고 간다.

 

 

sqlMap.xml

SQL문을 통해 DB에 값을 넣어주는 곳

<sqlMap namespace="bbs">

<select id="boardNumMax" resultClass="int">
	select nvl(max(boardNum),0) from sbbs
</select>

<insert id="insertData" parameterClass="com.bbs.BoardCommand">
	insert into sbbs (boardNum,name,pwd,email,subject,content,ipAddr,hitCount,created) values 
	(#boardNum#,#name#,#pwd#,#email#,#subject#,#content#,#ipAddr#,0,sysdate)
</insert>

 

코딩에서 계속 보았듯이, sql문을 입력해준다.

namespace의 값과 각각의 sql의 id는 예를 들면, bbs.insertData와 같이 호출하게 되는 것이다.

원하는 sql을 입력해주어 컨트롤러에서 호출한다.

 

이를 통해 DB에도 값이 들어가게 된다.

 

 

 

3월 23일 수요일 수업🌝
반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...