[21.10.05] 게시판 연습#1

yed·2021년 10월 5일
0

게시판 구조

게시판1,2,3...jsp 여러개 <-> 게시판servlet 하나 <-> DB

게시판servlet 안에서는 insert.do, select.do 등 여러경로가 존재한다

@WebServlet("*.do")

  • *.do : ~.do 로 선언된 HTTP호출에 대해 반응함

보안을 위해 직접적으로 jsp경로에 접근하는게 아니라
servlet을 호출해서 jsp파일을 돌려주는 간접접근 방식울 사용해야함
web-inf 폴더에 존재한 클라이언트 경로에는 서버가 없으면 접근이 불가능해서 주소만으론 들어갈 수 없음

<index.jsp>

<jsp:forward page="list.do"></jsp:forward>

welcome-file : 서버가 없어도 접속할 수 있는 사이트의 시작점. 메인화면. filter에서 여러개의 경로로 지정할 수 있다

index.jsp 호출 -> list.do 호출 -> db에서 전체 데이터 가져오기 -> list.jsp에 보여줌 -> index.jsp에서 포워딩

그래서 index.jsp라는 웰컴경로만으로 주소노출없이 데이터 표현가능


private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	List<BoardVO> list=dao.select();
	String path=BOARD_URL+LIST+EXTENSION;
		
	RequestDispatcher dispatcher=request.getRequestDispatcher(path);
	request.setAttribute("list", list);
	dispatcher.forward(request, response);
}//end list()

<list.jsp>

게시판 메인은 db에서 데이터를 가져와 table로 표현한다.
가독성을 위해 jstl을 사용함!

<tbody>
 <c:forEach var="vo" items="${list }">
  <tr>
   <td>${vo.bno }</td>
   <td>${vo.title }</td>
   <td>${vo.userid }</td>
   <td>${vo.cdate }</td>
  </tr>
 </c:forEach>
</tbody>

  • jsp로 데이터를 주거나 jsp페이지를 불러올땐 get방식
  • jsp에서 servlet으로 데이터를 보내 저장할땐 post방식

if문으로 여러 jsp페이지 중 연결되는 메소드를 호출한다

String requestURI = request.getRequestURI();
String requestMethod=request.getMethod();
System.out.println("호출 경로 : "+requestURI);
System.out.println("호출 방식 : "+requestMethod);
		
if(requestURI.contains(REGISTER+SERVER_EXTENSION)) {
	System.out.println("register 호출 확인");
	if(requestMethod.equals("GET")) {
		registerGET(request, response);
	}else if(requestMethod.equals("POST")) {
		registerPOST(request, response);
	}
}

페이지를 이동하거나 <a>태그로 서블릿에 이동하는 경우 get방식이 사용된다

private void registerGET(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	String path=BOARD_URL+REGISTER+EXTENSION;
	RequestDispatcher dispatcher=request.getRequestDispatcher(path);
	dispatcher.forward(request, response);
}//end registerGET()

jsp에서 데이터를 받아 DB에 데이터를 저장하는 경우 post방식이 사용된다.

get방식과 post방식의 경로는 동일하지만 method로 구분할 수 있다.

private void registerPOST(HttpServletRequest request, HttpServletResponse response) throws IOException {
	String userid=request.getParameter("userid");
	String title=request.getParameter("title");
	String content=request.getParameter("content");
	BoardVO vo=new BoardVO(0, title, content, userid, "");
	System.out.println(vo);
		
	int result=dao.insert(vo);
	if(result==1) {
		PrintWriter out=response.getWriter();
		out.print("<head>"+"<meta charset='UTF-8'"+"</head>");
		out.print("<script>alert('게시물 등록 성공');</script>");
		out.print("<script>location.href='"+MAIN+EXTENSION+"';</script>");
	}
}//end registerPOST()
profile
6개월 국비과정 기록하기

0개의 댓글

관련 채용 정보