ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210712_1~210713_1(SpringBoot)
    Spring 2021. 7. 12. 18:00

    https://sas-study.tistory.com/274

    스프링과 스프링부트의 차이점 참고

     

     

    와! 스프링부트!

    war방식으로 생성해서 실제로 tomcat 서버에 배포했을때 실행이 가능하다.

    1) boot 프로젝트 생성

    2) pom.xml

    라이브러리 추가

    	<!-- 외부 레포지토리 추가 -->
    	<repositories>
    		<repository>
    			<id>ojdbc14</id>
    			<name>oracle.com</name>
    			<url>http://maven.geomajas.org</url>
    		</repository>
    	</repositories>
    	
    	
    	<dependencies>
    	<!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    	
    	
    	<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    	
    	
    	<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>9.0.50</version>
    </dependency>

     

    3) SpringBoot1Application.java

    실행클래스에 인코딩 추가

    	@Bean //인코딩
    	public HttpMessageConverter<String> responseBConverter(){
    		
    		return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    	}
    	//인코딩때문에
    	public CharacterEncodingFilter characterEncodingFilter() {
    		CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    		characterEncodingFilter.setEncoding("UTF-8");
    		characterEncodingFilter.setForceEncoding(true);
    		return characterEncodingFilter;
    	}

    4) application.properties

    기본환경 설정

    #===server setting
    server.port=8888
    server.tomcat.uri-encoding=UTF-8
    
    #===view resolver
    #spring.mvc.view.prefix=/WEB-INF/views/
    #spring.mvc.view.suffix=.jsp
    
    #===dataSource setting
    spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
    spring.datasource.username=jspuser
    spring.datasource.password=1234

    기본설정


    주의) Autowired 자동주입 방속을 사용할때 구현 클래스로 변수를 만들자

            인터페이스로 만들면 구현메서드를 찾지 못하더라..왜?

    요청작업단위

    1-1. 글쓰기 폼

    매핑계획 /board/writeBoard.do(GET방식) ===> writeBoard() ===>WEB-INF/board/writeBoard.jsp 

    1) Mapper : X

    2) Dao : X

    3) Service : X

    4) Controller : O

    package com.example.demo;
    
    import java.util.ArrayList;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    @RequestMapping("/board") // board/writeForm.do 의 경로가 된다.
    public class BoardController {
    	
    	private int recordsForPage = 5;
    	
    	@Autowired
    	BoardServiceImpl boardService;
    	
    	//로그
    	private static final Logger logger = 
    			LoggerFactory.getLogger(BoardController.class);
    	
    	// 요청단위 본격적인 매핑 메서드들이 추가됨
    	
    	// 글 입력폼
    	// 매핑계획/writeBoard.do ===> writeBoard() ===>board/writeBoard.jsp
    	@RequestMapping(value = "/writeBoard.do", method = RequestMethod.GET)
    	public String writeBoard(Model model,BoardBean boardBean) {
    		logger.debug("writeForm called!!!");
    		
    		model.addAttribute("boardBean",boardBean); //뷰 폼값 자동 매핑
    		
    		return "writeBoard";
    	}

    5) View(JSP) : O

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@page import="java.io.*, java.text.*" %>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>글입력하기</title>
    </head>
    <body>
    <c:url var="insertUrl" value="writeBoard.do"/>
    <sf:form modelAttribute="boardBean" method="POST" action="${insertUrl}">
    이름 : <sf:input path="name" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="name" cssClass="error"/><br>
    이메일 : <sf:input path="mail" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="mail" cssClass="error"/><br>
    제목 : <sf:input path="subject" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="subject" cssClass="error"/><br>
    내용 : <sf:textarea path="memo" size="200" cssStyle="width:350px; height:100px;" maxlength="200"/>&nbsp;
    <sf:errors path="memo" cssClass="error"/><br>
    <input type="submit" value="등록하기">
    
    
    
    </sf:form>
    
    </body>
    </html>

     


    1-2. 글쓰기 처리

    매핑계획 /board/writeBoard.do(POST방식) ===> writeBoardOk() ===>WEB-INF/board/writeBoardOk.jsp 

    1) Mapper : O

    package com.example.demo;
    
    import java.util.ArrayList;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Result;
    import org.apache.ibatis.annotations.Results;
    import org.apache.ibatis.annotations.Select;
    
    
    
    
    @Mapper
    public interface BoardMapper {
    
    	//sql 상수 
    	//연결 @ 어노테이션
    	// 호출함수
    	// 글입력처리
    	final String INSERT = "insert into spring_board (id, subject, name, created_date, mail, memo, hits) "
    			+ " values (seq_id.nextval, #{subject}, #{name}, sysdate, #{mail}, #{memo}, 0 ) ";
    
    	@Insert(INSERT)
    	void insertBoard(BoardBean boardBean);

    2) Dao : O

    package com.example.demo;
    
    import java.util.ArrayList;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BoardDaoImpl  {
    	
    	@Autowired
    	private BoardMapper boardMapper;
    	//매퍼클라이언트
    
    	
    	public void insertBoard(BoardBean boardBean) {
    		
    		boardMapper.insertBoard(boardBean);
    
    	}

    3) Service : O

    package com.example.demo;
    
    import java.util.ArrayList;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BoardServiceImpl  {
    //business layer 용도
    	
    	@Autowired
    	private BoardDaoImpl boardDao ;
    
    	//글쓰기
    	
    	public void insertBoard(BoardBean boardBean) {
    		boardDao.insertBoard(boardBean);
    		
    	}

    4) Controller : O

    	//글쓰기 처리
    	@RequestMapping(value = "/writeBoard.do", method = RequestMethod.POST)
    	public String writeBoardOk(Model model,BoardBean boardBean) {
    		logger.debug("writeFormOk called!!!");
    		boardService.insertBoard(boardBean);
    		model.addAttribute("result",1); //뷰 폼값 자동 매핑
    		
    		return "writeBoardOk";
    	}

    5) View(JSP) : O

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<c:if test="${result==1}">
    		<script type="text/javascript">
    			alert('글이 입력되었습니다.')
    			location.href = 'listBoard.do?current_page=1'
    		</script>
    	</c:if>
    </body>
    </html>

     


    2. 글 목록

    매핑계획 /board/listBoard.do(POST방식) ===> listBoardOk() ===>WEB-INF/board/listBoard.jsp

    1) Mapper : O

    	//글 목록갯수
    		final String SELECT_CNT_ALL = "SELECT count(1) FROM SPRING_BOARD";
    		//전체 글 갯수를 조회
    		@Select(SELECT_CNT_ALL)
    		int getTotalCnt();
    		
    		//글목록 - 일부 반환
    		final String SELECT_PAGE=
    				"SELECT * FROM (select a.*, ceil(rownum/ #{rowsPerPage}) as page "
    				+ "FROM ( SELECT id, subject, name, created_date, mail, memo, hits "
    				+ "FROM spring_board order by id desc )a )b WHERE b.page = #{page}";
    		// #{속성} : preparedStatement , ${속성} : Statement
    		//BoardBean 의 속성들과 동일한 이름으로 #{mail} 등을 지정해야 한다.
    		@Select(SELECT_PAGE)
    		@Results( id= "queryResult", value= {
    				@Result(property = "id", column="ID"),
    				@Result(property = "subject", column="SUBJECT"),
    				@Result(property = "name", column="NAME"),
    				@Result(property = "created_date", column="CREATED_DATE"),
    				@Result(property = "mail", column="MAIL"),
    				@Result(property = "memo", column="MEMO"),
    				@Result(property = "hits", column="HITS")
    		})
    			ArrayList<BoardBean> getList(@Param("page") int page, @Param("rowsPerPage") int rowsPerPage);

    2) Dao : O

    	public int getTotalCnt() {
    		// TODO Auto-generated method stub
    		boardMapper.getTotalCnt();
    		return boardMapper.getTotalCnt();
    	}
    
    	
    	public ArrayList<BoardBean> getList(int nStartPage, int list_num) {
    		// TODO Auto-generated method stub
    		return boardMapper.getList(nStartPage, list_num);
    	}

    3) Service : O

    	public int getTotalCnt() {
    		// TODO Auto-generated method stub
    		return boardDao.getTotalCnt();
    	}
    
    	
    	public ArrayList<BoardBean> getList(int nStartPage, int list_num) {
    		// TODO Auto-generated method stub
    		return boardDao.getList(nStartPage, list_num);
    	}

    4) Controller : O

    	//글목록
    	@RequestMapping(value = "/listBoard.do", method = RequestMethod.GET)
    	public String listBoard(Model model, @RequestParam("current_page") String current_page) {
    		logger.debug("listBoard called!!!");
    	      int totcnt = boardService.getTotalCnt();
    	      ArrayList arraylist = boardService.getList(Integer.parseInt(current_page), 5);
    	      model.addAttribute("totalCnt",totcnt);
    	      model.addAttribute("current_page", current_page);//글을 작성후에는 처음 페이지로 돌아간다.
    	      model.addAttribute("boardList", arraylist);
    		
    		return "listBoard";
    	}

    5) View(JSP) : O

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="s" uri="http://www.springframework.org/tags"%>
    <%@page session="false"%>
    <%@page
    	import="com.example.demo.BoardBean, java.util.ArrayList, java.util.Properties, java.io.IOException,
        java.io.FileInputStream, com.example.demo.PageNumberingManager "%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>목록</title>
    </head>
    <body>
    
    	<c:set var="current_page" value="${current_page}" />
    	<c:set var="total_cnt" value="${totalCnt}" />
    	<%
    		int c_page = Integer.parseInt((String) (pageContext.getAttribute("current_page")));
    	pageContext.setAttribute("c_page", c_page);
    	%>
    
    	<table cellspacing=1 width=700 border=0>
    		<tr>
    			<td>총 게시물 수 <c:out value="${totalCnt}" /></td>
    			<td><p align="right">
    					페이지 :
    					<c:out value="${current_page}" /></td>
    		</tr>
    	</table>
    
    	<table cellspacing=1 width=700 border=1>
    		<tr>
    			<td width=50><p align="center">번호</p></td>
    			<td width=100><p align="center">이름</p></td>
    			<td width=320><p align="center">제목</p></td>
    			<td width=100><p align="center">등록일</p></td>
    			<td width=100><p align="center">조회수</p></td>
    		</tr>
    
    		<c:forEach var="board" items="${boardList}">
    			<tr>
    				<td width=50><p align="center">${board.id}</p></td>
    				<td width=100><p align="center">${board.name}</p></td>
    				<td width=320><p align="center">
    <%-- 			<a href="viewWork.do?memo_id=${board.id}&current_page=
    				<c:out value="${current_page}"/>&searchStr=None"title="${board.memo}"> --%>
    				<a href="viewWork.do?memo_id=${board.id}&current_page=
    				<c:out value="${current_page}"/>&searchStr=None"title="${board.memo}">
    				<c:out value="${board.subject}" /></a></p></td>
    				<td width=100><p align="center"><c:out value="${board.created_date}" />
    					</p></td>
    				<td width=100><p align="center"><c:out value="${board.hits}" />
    					</p></td>
    			</tr>
    		</c:forEach>
    		
    		<!-- 페이징 -->
    		<%
    			int rowsPerPage =5; //가져올 데이터 갯수
    		int total_cnt = ((Integer)(pageContext.getAttribute("total_cnt"))).intValue();
    		
    		//전체 페이지
    		int total_pages = PageNumberingManager.getInstance().getTotalPage(total_cnt, rowsPerPage);
    		pageContext.setAttribute("t_pages",total_pages);
    		%>
    	</table>
    	
    <table cellspacing=1 width=700 border=1 >
    	<tr>
    	<td align="center">
    	<c:forEach var="i" begin="1" end="${t_pages}">
    	<a href="listBoard.do?current_page=${i}">
    	[
    	<b><c:if test="${i==c_page}"></c:if>
    	${i}
    	<c:if test="${i==c_page}"></c:if></b>
    	]</a>
    	</c:forEach>
    	</td>
    	</tr>
    	</table>
    	
    	<table width=700>
    	<tr>
    	<td><input type="button" value="글쓰기" onclick="window.location='writeBoard.do'"></td>
    	<td><form name="searchString" method="post" action="searchWithSubject.do">
    	<p align="center"><input type="Text" name="searchStr" size="50" maxlength="50">
    	<input type="submit" value="글찾기"></p></form>
    </td>
    </tr>	
    	</table>
    
    </body>
    </html>

     

    3. 글보기

    매핑계획 /boardviewBoard.do(GET방식) ===> writeBoard() ===>WEB-INF/board/viewBoard.jsp 

    1) Mapper : O

    		//글 보기
    		final String SELECT_BY_ID = "SELECT id, subject, name, created_date, mail, memo, hits "
    				+ " FROM spring_board where id=#{id}";
    		
    		@Select(SELECT_BY_ID)
    		@ResultMap("queryResult") //위에사용한 @Results 에 id를 만들어놓으면 다음과같이 재사용할수있다.
    		BoardBean getView(@Param("id") String id);

    2) Dao : O

    	public BoardBean getView(String id) {
    		// TODO Auto-generated method stub
    		// 조회수증가
    		boardMapper.hitup(id);
    		return boardMapper.getView(id);
    	}

    3) Service : O

    	public BoardBean getView(String id) { 
    		// TODO Auto-generated method stub
    		return boardDao.getView(id);
    	}

    4) Controller : O

    	   @RequestMapping(value = "/viewBoard.do", method = RequestMethod.GET)
    	   public String viewBoard(
    			   @RequestParam("memo_id") String memo_id,
    			   @RequestParam("current_page") String current_page,
    			   @RequestParam("searchStr") String searchStr,
    			   Model model
    			   ) {
    		   logger.info("viewWork called!");
    		   BoardBean boardBean = boardService.getView(memo_id);
    		   
    		   model.addAttribute("memo_id",memo_id);
    		   model.addAttribute("current_page",current_page);
    		   model.addAttribute("searchStr",searchStr);
    		   model.addAttribute("boardBean",boardBean);
    		   return "viewBoard";

    5) view : viewBoard.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <c:set var="memo_id" value="${memo_id}"/>
        <c:set var="current_page" value="${current_page}"/>
        <c:set var="searchStr" value="${searchStr}"/>
        
    
    <html>
    <head>
    <meta charset="UTF-8">
    <title>글보기</title>
    </head>
    
    <%
    String searchStr = (String) (pageContext.getAttribute("searchStr"));
    %>
    <script type="text/javascript">
    function boardlist(){
    	var s = "<%=searchStr%>"
    	if(s=="None")
    		location.href='/board/listBoard.do?current_page=${current_page}';
    	else
    location.href='/board/listSearchBoard.do?current_page=${current_page}&searchStr=${searchStr}';
    		}
    
    function boardmodify(){
    location.href='/board/updateBoard.do?memo_id=${memo_id}&current_page=${current_page}';
    		}
    		
    function boarddelete(){
    location.href='/board/deleteBoard.do?memo_id=${memo_id}&current_page=${current_page}';
    		}
    </script>
    
    <table cellspacing=0 cellpadding=5 border=1 width=500>
    <tr><td><b>조회수</b></td><td><c:out value="${boardBean.hits}"/></td></tr>
    <tr><td><b>이름</b></td><td><c:out value="${boardBean.name}"/></td></tr>
    <tr><td><b>이메일</b></td><td><c:out value="${boardBean.mail}"/></td></tr>
    <tr><td><b>제목</b></td><td><c:out value="${boardBean.subject}"/></td></tr>
    <tr><td><b>내용</b></td><td width=350><c:out value="${boardBean.memo}"/></td></tr>
    </table>
    <table cellspacing=0 cellpadding=0 border=0 width=500>
    <tr><td>
    <input type="button" value="수정" onclick="javascript:boardmodify()">
    <input type="button" value="목록" onclick="javascript:boardlist()">
    <input type="button" value="삭제" onclick="javascript:boarddelete()">
    </td></tr>
    </table>
    
    </html>

    4-1. 글수정폼

    매핑계획 /updateBoard.do(GET방식) ===> getEditView() ===>WEB-INF/board/updateBoard.jsp 

    1) Mapper : O

    		//글수정
    		final String UPDATE_BY_ID = "UPDATE spring_board set subject = #{subject}, mail = #{mail}, "
    				+ "memo = #{memo} WHERE id=#{id}";
    		@Update(UPDATE_BY_ID)
    		void updateBoard(BoardBean boardBean);

    2) Dao : O

    	public BoardBean getEditView(String id) {
    		// TODO Auto-generated method stub
    		return boardMapper.getView(id);
    	}

    3) Service : O

    	public BoardBean getEditView(String id) {
    		// TODO Auto-generated method stub
    		return boardDao.getEditView(id);
    	}

    4) Controller : O

    	   //글수정. 특정페이지 수정을 위한 내용 출력 폼
    	   @RequestMapping(value = "/updateBoard.do", method = RequestMethod.GET)
    	   public String updateBoard(
    			   @RequestParam("memo_id") String memo_id,
    			   @RequestParam("current_page") String current_page,
    			   Model model
    			   ) {
    		   logger.info("updateBoard called!");
    		   BoardBean boardBean = boardService.getEditView(memo_id);
    
    		   model.addAttribute("memo_id",memo_id);
    		   model.addAttribute("current_page", current_page);
    		   model.addAttribute("boardBean", boardBean);
    		   return "updateBoard";
    	   }

    5) view --updateBoard.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@page import="java.io.*, java.text.*" %>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <script language="javascript">
    function writeCheck(){
    	var form = document.modifyform;
    	if(!form.dbsubject.value){
    		alert("제목을 적어주세요");
    		form.dbsubject.focus();
    		return;
    	}
    	if(!form.dbmemo.value){
    		alert("내용을 적어주세요");
    		form.dbmemo.focus();
    		return;
    	}
    	form.submit();
    }
    function boardlist(){
    	location.href='/board/listBoard.do?current_page=${current_page}';
    }
    </script>
    
    <meta charset="UTF-8">
    <title>글수정하기</title>
    </head>
    <body>
    <c:url var="updateUrl" value="updateBoardOk.do"/>
    <sf:form modelAttribute="boardBean" method="POST" action="${updateUrl}">
    <table width=400 border=1 cellspacing=0 cellpadding=5>
    <%--modelAttribute로 데이터를 넘기는데, 추가적인 정보를 넘기기위해서 hidden field를 사용함--%>
    <input type="hidden" name="memo_id" value="${memo_id}">
    <input type="hidden" name="current_page" value="${current_page}">
    <tr>
    
    <td><b>이름</b></td>
    <%--이름은 readonly 처리 --%>
    <td><sf:input readonly="true" path="name" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="name" cssClass="error"/><br></td>
    </tr>
    <tr>
    <td><b>이메일</b></td>
    <td><sf:input path="mail" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="mail" cssClass="error"/><br></td>
    </tr>
    <tr>
    <td><b>제목</b></td>
    <td><sf:input path="subject" size="50" maxlength="50"/>&nbsp;
    <sf:errors path="subject" cssClass="error"/><br></td>
    </tr>
    <tr>
    <td><b>내용</b></td>
    <td><sf:textarea path="memo" size="200" cssStyle="width:350px; height:100px;" maxlength="200"/>&nbsp;
    <sf:errors path="memo" cssClass="error"/><br></td>
    </tr>
    </table>
    
    <table>
    <tr>
    <td><input type="submit" value="수정하기">
    <input type="button" value="목록" onclick="javascript:boardlist()">
    </td>
    </tr>
    </table>
    </sf:form>
    
    </body>
    </html>

    4-2 글수정처리

    매핑계획 /updateBoard.do(GET방식) ===> updateBoard() ===>WEB-INF/board/updateBoardOk.jsp 

    1) Mapper : O

    		//글수정
    		final String UPDATE_BY_ID = "UPDATE spring_board set subject = #{subject}, mail = #{mail}, "
    				+ "memo = #{memo} WHERE id=#{id}";
    		@Update(UPDATE_BY_ID)
    		void updateBoard(BoardBean boardBean);

    2) Dao : O

    	public void updateBoard(BoardBean boardBean) {
    		// TODO Auto-generated method stub
    		boardMapper.updateBoard(boardBean);
    	}

    3) Service : O

    	public void updateBoard(BoardBean boardBean) {
    		// TODO Auto-generated method stub
    		boardDao.updateBoard(boardBean);
    		
    	}

    4) Controller : O

    	   //글수정. 특정페이지 수정을 위한 내용 출력 폼
    	   @RequestMapping(value = "/updateBoardOk.do", method = RequestMethod.POST)
    	   public String updateBoardOk(
    			   BoardBean boardBean,
    			   @RequestParam("memo_id") int memo_id,
    			   @RequestParam("current_page") String current_page,
    			   Model model
    			   ) {
    		   logger.info("updateBoardOk called!");
    		   boardBean.setId(memo_id);
    		   boardService.updateBoard(boardBean);
    		   model.addAttribute("current_page", current_page);
    		   model.addAttribute("memo_id", memo_id);
    		   return "updateBoardOk";
    	   }

    5) view -- updateBoardOk.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Context-Type" content="text/html" charset="UTF-8">
    <meta http-equiv="refresh" content="3;url=/board/viewBoard.do?
    memo_id=${memo_id}&current_page=${current_page}&searchStr=None">
    <title>글수정처리</title>
    </head>
    <body>
    <c:out value="${memo_id}"/>번 글이 수정되었습니다.
    </body>
    </html>

    5. 글삭제

    매핑계획 /deleteBoard.do(GET방식) ===> deleteBoard() ===>WEB-INF/board/deleteBoard.jsp 

    1) Mapper : O

    		// 글삭제
    		final String DELETE_BY_ID = "DELETE FROM spring_board WHERE id=#{id}";

    2) Dao : O

    	public void deleteBoard(int id) {
    		// TODO Auto-generated method stub
    		boardMapper.deleteBoard(id);
    	}

    3) Service : O

    	public void deleteBoard(int id) {
    		// TODO Auto-generated method stub
    		boardDao.deleteBoard(id);
    	}

    4) Controller : O

    	   //글삭제 컨트롤파일 bbsController+ 매핑 @ 어노테이션 매핑을 사용함
    	   @RequestMapping(value="/deleteBoard.do", method=RequestMethod.GET)
    	   public String deleteBoard(
    			   @RequestParam("memo_id") int memo_id,
    			   @RequestParam("current_page") String current_page,
    			   Model model) {
    		   logger.info("deleteBoard called!");
    
    		   boardService.deleteBoard(memo_id);
    		   //페이지를 다시조회한다.
    		   model.addAttribute("totalCnt", new Integer(boardService.getTotalCnt()));
    		   model.addAttribute("current_page", current_page);
    		   model.addAttribute("memo_id", memo_id);
    		   
    		   return "deleteBoard";
    		   //글삭제는 뷰가 없다..근데 만듬
    	   }

    5) View --deleteBoard.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <meta http-equiv="refresh"
    	content="3;url=/board/listBoard.do?
    current_page=${current_page}&searchStr=None">
    <title>글삭제</title>
    </head>
    <body>
    	<c:out value="${memo_id}" />
    	번 글이 삭제되었습니다.
    </body>
    </html>

    6. 글검색

    매핑계획 /boardviewBoard.do(GET방식) ===> writeBoard() ===>WEB-INF/board/viewBoard.jsp 

    1) Mapper : O

    		// 글검색 갯수
    		final String SELECT_CNT_BY_SUBJECT = "select count(1) from spring_board where"
    				+ " subject like '%'||'${searchThis}'||'%'";
                    // 해당 주제의 관련글 갯수를 조회
    		@Select(SELECT_CNT_BY_SUBJECT)
    		int getTotalCntBySubject(@Param("searchThis") String includingThis);
    
    		// 글검색
    		final String SELECT_ROWS_BY_SUBJECT = "SELECT * FROM (select a.*, ceil(rownum/ #{rowsPerPage}) as page "
    				+ "FROM ( SELECT id, subject, name, created_date, mail, memo, hits "
    				+ "FROM spring_board where subject like '%'||'${likeThis}'||'%' "
    				+ " order by id desc )a )b WHERE b.page = #{page}";
    
    		// 해당 주제의 관련글 조회
    		@Select(SELECT_ROWS_BY_SUBJECT)
    		@ResultMap("queryResult")
    
    		public ArrayList<BoardBean> getSearchedList(@Param("page") int page, @Param("rowsPerPage") int rowsPerPage,
    				@Param("likeThis") String strSearchThis);

    2) Dao : O

    	public int getTotalCntBySubject(String search) {
    		// TODO Auto-generated method stub
    		return boardMapper.getTotalCntBySubject(search);
    	}
    
    	public ArrayList<BoardBean> getSearchedList(int nStartPage, int list_num, String strSearchThis) {
    		// TODO Auto-generated method stub
    		return boardMapper.getSearchedList(nStartPage, list_num, strSearchThis);
    	}

    3) Service : O

    	public int getTotalCntBySubject(String search) {
    		// TODO Auto-generated method stub
    		return boardDao.getTotalCntBySubject(search);
    	}
    
    	public ArrayList<BoardBean> getSearchedList(int nStartPage, int list_num, String strSearchThis) {
    		// TODO Auto-generated method stub
    		return boardDao.getSearchedList(nStartPage, list_num, strSearchThis);
    	}

    4) Controller : O

    	   //글검색 메소드를 지정하지않으면 POST,GET 둘다 가능하다
    	   @RequestMapping(value="/listSearchBoard.do", method = RequestMethod.POST)
    	   public String listSearchBoard(@RequestParam("searchStr") String searchStr, Model model) {
    		   //redirect
    		   return listSearched("1", searchStr, model); //처음에는 1페이지만 보여줌
    	   }
    	   //검색된 상태에서 특정 페이지로 이동하기
    	   @RequestMapping(value="/listSearchBoard.do", method=RequestMethod.GET)
    	   public String listSearched(
    			   @RequestParam("pageForView")String pageForView,
    			   @RequestParam("searchStr") String searchStr,
    			   Model model) {
    		   logger.info("listSearched called!");
    
    		   // 익스플로러에서 주소부분 인코딩때문에
    //		   String searchStr2="";
    //		   try {
    //			searchStr2 = URLDecoder.decode(searchStr,"EUC-KR");
    //		} catch (UnsupportedEncodingException e) {
    //			// TODO Auto-generated catch block
    //			e.printStackTrace();
    //		}
    //		   
    //		   int searchCnt = boardService.getTotalCntBySubject(searchStr2);
    //		   ArrayList searchList = boardService.getSearchedList(pageForView, 5, searchStr2);
    //		   
    //		   model.addAttribute("searchCnt", searchCnt);
    	
    //		   try {
    //				searchStr = URLEncoder.encode(searchStr,"EUC-KR");
    //			} catch (UnsupportedEncodingException e) {
    //				// TODO Auto-generated catch block
    //				e.printStackTrace();
    //			}
    //			model.addAttribute("searchStr",searchStr) ; // 페이징 때문에 계속 몰고 다닌다. 
    //			model.addAttribute("pageForView",pageForView) ; 
    //			model.addAttribute("boardList",searchList) ; 
    //			
    //			return "searchBoard";
    //		}
    		   
    		   model.addAttribute("totalCnt", new Integer(boardService.getTotalCntBySubject(searchStr)));
    		   model.addAttribute("searchedList", boardService.getSearchedList(Integer.parseInt(pageForView), 5, searchStr));
    		   model.addAttribute("pageForView", Integer.parseInt(pageForView));
    		   model.addAttribute("searchStr", searchStr);
    		   
    
    		   return "listSearchBoard";
    	   
    	   }

    5. View -- listSearchBoard.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="s" uri="http://www.springframework.org/tags"%>
    <%@page session="false"%>
    <%@page
    	import="com.example.demo.BoardBean, java.util.ArrayList, java.util.Properties, java.io.IOException,
        java.io.FileInputStream, com.example.demo.PageNumberingManager "%>
    <!DOCTYPE >
    <html>
    <head>
    <meta charset="UTF-8">
    <title>목록</title>
    </head>
    <body>
    
    
    	<c:set var="total_cnt" value="${totalCnt}" />
    	<c:set var="searchString" value="${searchStr}" />
    	<c:set var="pageForView" value="${pageForView}" />
    	<%
    	int total_cnt = ((Integer)(pageContext.getAttribute("total_cnt"))).intValue();
    	String searchStr = (String)pageContext.getAttribute("searchString");
    	int rowsPerPage =5;
    	int total_pages = PageNumberingManager.getInstance().getTotalPage(total_cnt, rowsPerPage);
    	pageContext.setAttribute("t_pages", total_pages);
    	%>
    
    	<table cellspacing=1 width=700 border=0>
    		<tr>
    			<td>총 게시물 수 <c:out value="${totalCnt}" /></td>
    			<td><p align="right">
    					페이지 :
    					<c:out value="${t_pages}" /></td>
    		</tr>
    	</table>
    
    	<table cellspacing=1 width=700 border=1>
    		<tr>
    			<td width=50><p align="center">번호</p></td>
    			<td width=100><p align="center">이름</p></td>
    			<td width=320><p align="center">제목</p></td>
    			<td width=100><p align="center">등록일</p></td>
    			<td width=100><p align="center">조회수</p></td>
    		</tr>
    
    		<c:forEach var="board" items="${searchedList}">
    			<tr>
    				<td width=50><p align="center">${board.id}</p></td>
    				<td width=100><p align="center">${board.name}</p></td>
    				<td width=320><p align="center">
    <%-- 			<a href="viewWork.do?memo_id=${board.id}&current_page=
    				<c:out value="${current_page}"/>&searchStr=None"title="${board.memo}"> --%>
    				<a href="viewBoard.do?memo_id=${board.id}&current_page=
    				<c:out value="${current_page}"/>&searchStr=None"title="${board.memo}">
    				<c:out value="${board.subject}" /></a></p></td>
    				<td width=100><p align="center"><c:out value="${board.created_date}" />
    					</p></td>
    				<td width=100><p align="center"><c:out value="${board.hits}" />
    					</p></td>
    			</tr>
    		</c:forEach>
    
    
    	</table>
    	
    <table cellspacing=1 width=700 border=1 >
    	<tr>
    	<td align="center">
    	<c:forEach var="i" begin="1" end="${t_pages}">
    	<a href="listSearchBoard.do?pageForView=${i}&searchStr=<c:out value="${searchStr}"/>">
    	[
    	<b><c:if test="${i==c_page}"></c:if>
    	${i}
    	<c:if test="${i==c_page}"></c:if></b>
    	]</a>
    	</c:forEach>
    	</td>
    	</tr>
    	</table>
    	
    	<table width=700>
    	<tr>
    	<td><input type="button" value="전체목록으로돌아가기" onclick="window.location='listBoard.do?current_page=1'"></td>
    
    </tr>	
    	</table>
    
    </body>
    </html>

     

    'Spring' 카테고리의 다른 글

    210709_1(Spring3_MyBatis 글목록부터)  (0) 2021.07.09
    210708_1(Spring3_MyBatis)  (0) 2021.07.08
    210707_1(Springmvc+iBatis, xml을 이용하는방법)  (0) 2021.07.07
    210706_1(iBatis)  (0) 2021.07.06
    210705_2(iBatis)  (0) 2021.07.05
Designed by Tistory.