온 코딩

게시판 기능 구현 완료(CSS 구현 전 )1_회원 메인 / 관리자 메인 본문

SEMI PROJECT - 홈페이지 만들기

게시판 기능 구현 완료(CSS 구현 전 )1_회원 메인 / 관리자 메인

SummerON 2021. 6. 8. 18:10

게시판 관련 파일

서블릿, DTO, DAO
게시판 연관 jsp 파일 
그 외 공통파일


회원 게시판 메인

게시판 메인 페이지 - 화면 

brd_main.jsp 

커뮤니티 메인 화면  

1. 검색기능

검색 창 코드 

<div id="searchBoard">
<!-- 검색 창 -->
<form action="../Brd_search" method="get">
<select name="tOrW"><!-- 글제목으로 혹은 작성자로 검색 조건 설정 -->
	<option value="title" selected>글 제목</option>
	<option value="writer">작성자</<option>
</select>
<input type="text" id="inputText" name="search" value="" placeholder="검색어를 입력하세요" />
<input type="submit" id="button" value="검색" /> <!-- 검색 실행 하기(서블릿 : /Brd_test) => 검색 결과창SearchForm  -->
<input type="button" id="button" value="글쓰기" onclick="location.href='writeForm.jsp'" /> <!-- 글쓰기 창으로 이동 -->
</form>
</div>

Brd_search 서블릿에 tOrW(titlle of write)값과 search(검색어) 전달

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		
		BoardDAO dao = new BoardDAO();
		ArrayList<BoardDTO> vResult = new ArrayList<>();
		
		String tOrW =  request.getParameter("tOrW"); //어떤 검색인지 확인
		String search = request.getParameter("search"); //검색어 확인
		
		
		if(tOrW.equals("title")) {
			vResult=dao.brdSearch(search); //타이틀 검색일 경우
		}else {
			vResult=dao.brdSearch(dao.idToNo(search)); //작성자 검색일 경우
		}
		
		HttpSession session =request.getSession();
		session.setAttribute("vResult", vResult);
		
		response.sendRedirect("community/searchForm.jsp");
		
	}

/Brd_search 서블릿의 doGet() 

검색 타입을 확인하고 검색어를 통해 검색함 

작성자 검색일 경우, Board_tbl에 user_id가 아닌 user_no가 저장되어 있음으로 id를 no로 변환하여 검색 

검색된 결과를 ArrayList<dto> vResult에 저장 한 후 검색결과 출력창(community/search.jsp)로 전달 

 

주의점 

원래 페이지 전환할 때, request에 객체를 싣고 requestDispatcher로 페이지 전환을 하려고 했으나 Dispatcher를 사용할 경우 페이지 경로가 바뀌지 않아서 <WebContent - Community - brd_main.jsp - form > 에서 설정한 action 경로인 <../Brd_search>를 다시 사용하지 못함! 

즉, 검색을 한 번밖에 하지 못하는 문제가 생김 

객체 전달 방법을 request에서 session으로 바꾸고 reponse로 페이지 전환 

-> response로 페이지 전환을 하는 경우, 객체 전달이 안 되도 별다른 오류가 안뜨기 때문에 전달값 꼭 확인해주면서 코드 사용하기 

-> session에 너무 많은 값을 저장하면 나중에 객체 사용할 때 헷갈릴까 걱정했는데, 매번 Brd_search서블릿을 사용할 때마다 "vResult"라는 변수에 저장 된 값이 바뀌기 때문에 괜찮을 듯

 

검색 결과 페이지

brd_search.jsp > 출력부분 

<% 
  		ArrayList<BoardDTO> vResult = (ArrayList<BoardDTO>)session.getAttribute("vResult");   // vResult
  	%>
  	<%
  		BoardDTO dto = new BoardDTO();
  		//System.out.println(vResult.get(0).toString());
  		
  		if( vResult.size() > 0){
  			
  			for(int i = 0; i < vResult.size(); i++){
  				dto = vResult.get(i);
  				// System.out.println(dto.toString()); //테스트코드
  	%>
 		<tr align="center">
			<td><%=dto.getBoard_no() %></td>
			<td><a href="brd_detail.jsp?board_no='<%=dto.getBoard_no() %>'"><%=dto.getBoard_title() %></a></td>
			<td><%=bDAO.noToId(dto.getUser_no()) %></td>
			<td><%=dto.getBoard_date() %></td>
			<td><%=dto.getBoard_hits() %></td>
		</tr>
  	<% 		
  		}//for end 
  			}else{
  			System.out.println("결과없음");
	%>
			<tr>
				<td colspan="5">검색 결과가 없습니다.</td>
			</tr>
	<%
			}//else end%>

Same as brd_main.jsp , 윗 부분에 검색창을 넣어 준다.

session에 저장되어 있던 vResult값을 꺼내와서 vResult의 사이즈가 0 이상일 경우 출력을 한다.

 

주의점 

session에 들어간 attribute 값은 모두 object로 저장됨으로 사용할 때 필요한 타입으로 형변환 후 사용한다.

다만, 잘못 형변환을 할 경우 오류가 뜨기 때문에 꼭 session저장 되는 형태와 가져와서 쓰는 형태를 맞춰주어야 한다.

object로 넘어온 session값은 절대 null이 아니다.

그렇기 때문에, 검색 결과가 없는 경우를 찾으려면 if(vResult == null){}이렇게가 아니라 if(vResult >0){ 결과출력 }else{검색 결과 없음}으로 코드를 짜야한다.

 

2. 글 목록 출력

<div align="center" id="clear"><!-- 글 목록 출력 -->
<table class="type11" width="75%" >
  <thead>
  <tr>
    <th width="10%">글 번호</th>
    <th width="40%">제목</th>
    <th width="20%">작성자</th>
    <th width="20%">작성일</th>
    <th width="10%">조회수</th>
  </tr>
  </thead>
  <tbody>
  	<% ArrayList<BoardDTO> vResult = bDAO.brdSelectAll(); %>
  	<%
  		BoardDTO dto = new BoardDTO();
		for(int i = 0; i < vResult.size(); i++){
			dto = vResult.get(i);
			// System.out.println(dto.toString()); //테스트코드
	%>
		<tr align="center">
			<td><%=dto.getBoard_no() %></td><!-- EL태그 공부 필요 -->
			<td><%if(id != null){ %>
			<a href="brd_detail.jsp?board_no=<%=dto.getBoard_no() %>">
			<%=dto.getBoard_title() %></a><%}else{ %>
			<a href="http://localhost:9000/carjava/login.jsp" onclick="alert('로그인 후 사용해주세요.');" >
			<%=dto.getBoard_title() %>
			</a><%} %>
			</td>
			<!-- 상세페이지 각 페이지와 연결-->
			<td><%=bDAO.noToId(dto.getUser_no()) %></td>
			<td><%=dto.getBoard_date().substring(0, 10) %></td>
			<td><%=dto.getBoard_hits() %></td>
		</tr>
	<%} %>

  </tbody>
</table>
</div>

주의점 

1. 상세페이지는 로그인이 되어 있을 경우에만 접근 가능. 

session값에 id가 저장이 되어있을 경우(로그인이 되어있을 경우)에만 이동 

2. 만일 로그인 값이 없을 경우 로그인 페이지로 이동!

 


관리자 게시판 메인

게시판 관리자 메인 페이지 / admin/brd_adminMainDelete.jsp

관리자 메인 페이지의 경우, 모든 게시글에 대한 삭제 버튼이 있음 

주의점 - 관리자가 글 수정 권한은 없음 

 

관리자 검색 서블렛

@WebServlet("/Brd_search_admin")
public class Brd_search_admin extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		BoardDAO dao = new BoardDAO();
		ArrayList<BoardDTO> vResult = new ArrayList<>();
		
		String tOrW =  request.getParameter("tOrW"); //어떤 검색인지 확인
		String search = request.getParameter("search"); //검색어 확인
		
		
		if(tOrW.equals("title")) {
			vResult=dao.brdSearch(search); //타이틀 검색일 경우
		}else {
			vResult=dao.brdSearch(dao.idToNo(search)); //작성자 검색일 경우
		}
		
		HttpSession session =request.getSession();
		session.setAttribute("vResult", vResult);
		session.setAttribute("tOrW", tOrW);
		session.setAttribute("search", search);
		
 
		response.sendRedirect("admin/brd_adminMainSearch.jsp");
	}

 

Comments