현재 버전

게시판 페이징 관련


HomePageController.java

@RequestMapping("/virtualHomePage/virtualMemberBulletinBoard")
	public String virtualMemberBulletinBoard(Model model, HttpServletRequest request, @RequestParam(defaultValue = "1") int page) {
		System.out.println("------------ virtualMemberBulletinBoardList() ------------");		
		String vId = request.getParameter("vId");
		VDAO dao = new VDAO();
		int totalMemberListCnt = dao.MemberBBSList(vId);
		MemberPagination memberPagination = new MemberPagination(totalMemberListCnt, page);		
		int startIndex = memberPagination.getStartIndex();
		int pageSize = memberPagination.getPageSize();
		System.out.println("전체글 수 : " + memberPagination.getTotalMemberListCnt() + " | 현재 페이지 : " + memberPagination.getPage() + " | 시작 페이지 : "	+ memberPagination.getStartPage() + " | 마지막 페이지 : " + memberPagination.getEndPage() + " "); // 확인용
		MemberBoardService boardService = new MemberBoardService();
		ArrayList<VVO> MemberList = boardService.memberNoticeBoardList(startIndex, pageSize, vId);
		System.out.println("vId = "+vId);
		model.addAttribute("MemberList", MemberList);
		model.addAttribute("memberPagination", memberPagination);
		return "BulletinBoard/virtualMemberBulletinBoard";
	}



VDAO.java

public ArrayList<VVO> MemberList (int startIndex, int pageSize, String vId){
		ArrayList<VVO> MemberListVVO = new ArrayList<VVO>();
		try {
			conn = getConnection();
			//String MemberBbsListSql = "SELECT * FROM virtual_bbs where vId='"+vId+ "' ORDER BY vGroup DESC, vStep ASC OFFSET ? ROWS FETCH FIRST ? ROWS ONLY ";
			String MemberBbsListSql = "SELECT virtual_bbs.* FROM( SELECT virtual_bbs.* FROM virtual_bbs WHERE vid = ? ORDER BY vGroup DESC, vStep ASC) virtual_bbs OFFSET ? ROWS FETCH FIRST ? ROWS ONLY";
			preparedStatement = conn.prepareStatement(MemberBbsListSql);
			preparedStatement.setString(1, vId);
			preparedStatement.setInt(2, startIndex); 
			preparedStatement.setInt(3, pageSize);
			resultSet = preparedStatement.executeQuery();
			
			while(resultSet.next()){
				int vNo = resultSet.getInt("vNo"); 
				vId = resultSet.getString("vId");
				String vSubject = resultSet.getString("vSubject"); 
				String vContent = resultSet.getString("vContent"); 
				Timestamp vDate = resultSet.getTimestamp("vDate"); 
				int vHit = resultSet.getInt("vHit"); 
				int vGroup = resultSet.getInt("vGroup"); 
				int vStep = resultSet.getInt("vStep"); 
				int vIndent = resultSet.getInt("vIndent");
				VVO MemberVbbsVVO = new VVO(vNo, vId, vSubject, vContent, vDate, vHit, vGroup, vStep, vIndent);
				MemberListVVO.add(MemberVbbsVVO);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeDB();
		}
		return MemberListVVO;
	}
	
	public int MemberBBSList(String vvId) {
		int MemberTotal = 0;
		try {
			conn = getConnection();
			String userBBSListSql = "SELECT count(*) FROM virtual_bbs WHERE vId = ?";
			preparedStatement = conn.prepareStatement(userBBSListSql);
			preparedStatement.setString(1, vvId);
			resultSet = preparedStatement.executeQuery();
			if(resultSet.next()) {
				 MemberTotal = resultSet.getInt(1);
			}
		}catch(SQLException se) {
			se.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			closeDB();
		}
		return MemberTotal;
	}


MemberPagination.java

package com.spring.virtualCommand;

public class MemberPagination {
	private int pageSize = 10; // 페이지 당 보여지는 게시글의 최대 개수
	private int blockSize = 5; // 페이징된 버튼의 블럭당 최대 개수
	private int page = 1; // 현재 페이지
	private int block = 1; // 현재 블럭
	private int totalMemberListCnt; // 총 게시글 수
	private int totalPageCnt; // 총 페이지 수
	private int totalBlockCnt; // 총블럭 수
	private int startPage = 1; // 블럭 시작 페이지
	private int endPage = 1; // 블럭 마지막 페이지
	private int startIndex = 0; // DB에서 어디서 부터 select할지
	private int preBlock; // 이전 블럭의 마지막 페이지
	private int nextBlock; // 다음 블럭의 시작 페이지
	
	public MemberPagination(int totalMemberListCnt, int page) {
		setPage(page); // 현재 페이지 세팅
		setTotalMemberListCnt(totalMemberListCnt); // 총 게시글 수 세팅
		
		if(totalMemberListCnt == 0) { 
			// 총 게시글이 0일때 시작 페이지 1, 끝 페이지 1, 현재 페이지 1, 총 페이지 수 1, 반환시키고 종료
			setEndPage(1);
			setPage(1);
			setTotalPageCnt(1);
			return;
		}
		
		// 총 페이지 수
		setTotalPageCnt((int)Math.ceil((double)(totalMemberListCnt) / pageSize));
		// 총 블럭 수
		setTotalBlockCnt((int)Math.ceil((double)(totalPageCnt) / blockSize));
		// 현재 블록
		setBlock((int)Math.ceil((double)(page) / blockSize));
		// 블록 시작 페이지
		setStartPage((block - 1) * blockSize + 1);
		// 블록 마지막 페이지
		setEndPage(startPage + blockSize - 1);
		// 블록 마지막 페이지는 무조건 정해져 있지 않으므로
		if(totalPageCnt < endPage) this.endPage = totalPageCnt;
		// 이전 블럭 (클릭 시 이전 블록의 마지막 페이지를 가져와야 한다. 
		// ex) 11~28에서 이전 클릭 시 10을 가져와야 한다.
		setPreBlock(((block - 1) * blockSize));
		// 1에서 이전 블록을 누르면 오류가 나므로
		if(preBlock < 1) this.preBlock = 1;
		// 다음 블럭 ( 클릭 시 다음 블럭 첫 번째 페이지를 불러와야 한다.)
		setNextBlock((block * blockSize) + 1);
		// 다음 블럭을 눌렸는데 전체 페이지 수가 끝났을 때
		if(nextBlock > totalBlockCnt) this.nextBlock = totalPageCnt;
		// DB 접근 시작 index
		setStartIndex((page - 1) * pageSize);
	}
	
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getBlockSize() {
		return blockSize;
	}
	public void setBlockSize(int blockSize) {
		this.blockSize = blockSize;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getBlock() {
		return block;
	}
	public void setBlock(int block) {
		this.block = block;
	}
	
	public int getTotalMemberListCnt() {
		return totalMemberListCnt;
	}

	public void setTotalMemberListCnt(int totalMemberListCnt) {
		this.totalMemberListCnt = totalMemberListCnt;
	}

	public int getTotalPageCnt() {
		return totalPageCnt;
	}
	public void setTotalPageCnt(int totalPageCnt) {
		this.totalPageCnt = totalPageCnt;
	}
	public int getTotalBlockCnt() {
		return totalBlockCnt;
	}
	public void setTotalBlockCnt(int totalBlockCnt) {
		this.totalBlockCnt = totalBlockCnt;
	}
	public int getStartPage() {
		return startPage;
	}
	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}
	public int getEndPage() {
		return endPage;
	}
	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}
	public int getStartIndex() {
		return startIndex;
	}
	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}
	public int getPreBlock() {
		return preBlock;
	}
	public void setPreBlock(int preBlock) {
		this.preBlock = preBlock;
	}
	public int getNextBlock() {
		return nextBlock;
	}
	public void setNextBlock(int nextBlock) {
		this.nextBlock = nextBlock;
	}
	
}

여기는 딱히 오류가 없는거 같습니다.


MemberBoardService.java

package com.spring.virtualCommand;

import java.util.ArrayList;

import com.spring.virtualDAO.VDAO;
import com.spring.virtualVO.VVO;

public class MemberBoardService {
	public ArrayList<VVO> memberNoticeBoardList(int startIndex, int pageSize, String vId){
		VDAO dao = new VDAO();
		return dao.MemberList(startIndex, pageSize, vId);
	}
}



virtualBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>자유 게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>
		
		<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div class = "bbsListDivStyle" align = "center">
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">작성자</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${list}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center"><a href = "/virtualHomePage/virtualMemberBulletinBoard?vId=${vbbs.vId}">${vbbs.vId}</a></td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
								<tr>
									<td align = "right" colspan = "5" style = "border-bottom:none;">
										<br/>
										<c:if test = "${empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton" id = "logincheck" onClick = "locheck()" ><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
										<c:if test="${not empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton"><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
									</td>
								</tr>
							</table>
							<div>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne 1}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=1"><button class = "listPagingbutton">처음</button></a>
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getPreBlock()}"><button class = "listPagingbutton">⏪</button></a>
									</c:if>
								</c:if>
								
								<c:forEach begin="${pagination.startPage}" end = "${pagination.endPage}" var = "pageNum">
									<a href = "/virtualHomePage/virtualBulletinBoard?page=${pageNum}"><button class = "listPagingbutton">${pageNum}</button></a>
								</c:forEach>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne pagination.totalPageCnt}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getNextBlock()}&Member?=$"><button class = "listPagingbutton">⏩</button></a>
										<a href ="/virtualHomePage/virtualBulletinBoard?page=${pagination.getTotalPageCnt()}"><button class = "listPagingbutton">마지막</button></a>
									</c:if>
								</c:if> 
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>




virtualMemberBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>

<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div>
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${MemberList}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center">${vbbs.vId}</td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
							</table>
							
							<div>
								
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne 1}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=1&vid=${MemberList.vId}"><button class = "listPagingbutton">처음</button></a>
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getPreBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏪</button></a>
										</c:if>
									</c:if>
									
									<c:forEach begin="${memberPagination.startPage}" end = "${memberPagination.endPage}" var = "pageNum">
										<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${pageNum}&vid=${MemberList.vId}"><button class = "listPagingbutton">${pageNum}</button></a>
									</c:forEach>
									
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne memberPagination.totalPageCnt}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getNextBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏩</button></a>
											<a href ="/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getTotalPageCnt()}&vid=${MemberList.vId}"><button class = "listPagingbutton">마지막</button></a>
										</c:if>
									</c:if> 
								
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>



 

전체 게시판 보기에서는 페이징 하면 오류가 없이 작동을하는데


 

작성자를 클릭하여 페이지를 이동하여 선택한 작성자의 게시글만 볼려고 하는 페이징 게시판은 500에러가 발생하네요....


sql문 자체를 잘못인가 하여 sql Developer로 직접 작성하여 실행 하였을 땐 정상작동을 합니다.

에러 문구

------------ virtualBulletinBoardList() ------------
전체글 수 : 3 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
------------ virtualMemberBulletinBoardList() ------------
전체글 수 : 2 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
vId = mint4098
1월 14, 2021 2:42:48 오후 org.apache.catalina.core.ApplicationDispatcher invoke
심각: 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

1월 14, 2021 2:42:48 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: 경로 []의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [java.lang.NumberFormatException: For input string: "vId"]을(를) 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)



혹시 해결 방법  아시는 분 계시나요??

이틀 째 해결 방법  찾고 있는데.... 모르겠네요 




수정 이력

2021-01-14 14:52:18 에 아래 내용에서 변경 됨 #2

HomePageController.java

@RequestMapping("/virtualHomePage/virtualMemberBulletinBoard")
	public String virtualMemberBulletinBoard(Model model, HttpServletRequest request, @RequestParam(defaultValue = "1") int page) {
		System.out.println("------------ virtualMemberBulletinBoardList() ------------");		
		String vId = request.getParameter("vId");
		VDAO dao = new VDAO();
		int totalMemberListCnt = dao.MemberBBSList(vId);
		MemberPagination memberPagination = new MemberPagination(totalMemberListCnt, page);		
		int startIndex = memberPagination.getStartIndex();
		int pageSize = memberPagination.getPageSize();
		System.out.println("전체글 수 : " + memberPagination.getTotalMemberListCnt() + " | 현재 페이지 : " + memberPagination.getPage() + " | 시작 페이지 : "	+ memberPagination.getStartPage() + " | 마지막 페이지 : " + memberPagination.getEndPage() + " "); // 확인용
		MemberBoardService boardService = new MemberBoardService();
		ArrayList<VVO> MemberList = boardService.memberNoticeBoardList(startIndex, pageSize, vId);
		System.out.println("vId = "+vId);
		model.addAttribute("MemberList", MemberList);
		model.addAttribute("memberPagination", memberPagination);
		return "BulletinBoard/virtualMemberBulletinBoard";
	}



VDAO.java

public ArrayList<VVO> MemberList (int startIndex, int pageSize, String vId){
		ArrayList<VVO> MemberListVVO = new ArrayList<VVO>();
		try {
			conn = getConnection();
			//String MemberBbsListSql = "SELECT * FROM virtual_bbs where vId='"+vId+ "' ORDER BY vGroup DESC, vStep ASC OFFSET ? ROWS FETCH FIRST ? ROWS ONLY ";
			String MemberBbsListSql = "SELECT virtual_bbs.* FROM( SELECT virtual_bbs.* FROM virtual_bbs WHERE vid = ? ORDER BY vGroup DESC, vStep ASC) virtual_bbs OFFSET ? ROWS FETCH FIRST ? ROWS ONLY";
			preparedStatement = conn.prepareStatement(MemberBbsListSql);
			preparedStatement.setString(1, vId);
			preparedStatement.setInt(2, startIndex); 
			preparedStatement.setInt(3, pageSize);
			resultSet = preparedStatement.executeQuery();
			
			while(resultSet.next()){
				int vNo = resultSet.getInt("vNo"); 
				vId = resultSet.getString("vId");
				String vSubject = resultSet.getString("vSubject"); 
				String vContent = resultSet.getString("vContent"); 
				Timestamp vDate = resultSet.getTimestamp("vDate"); 
				int vHit = resultSet.getInt("vHit"); 
				int vGroup = resultSet.getInt("vGroup"); 
				int vStep = resultSet.getInt("vStep"); 
				int vIndent = resultSet.getInt("vIndent");
				VVO MemberVbbsVVO = new VVO(vNo, vId, vSubject, vContent, vDate, vHit, vGroup, vStep, vIndent);
				MemberListVVO.add(MemberVbbsVVO);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeDB();
		}
		return MemberListVVO;
	}
	
	public int MemberBBSList(String vvId) {
		int MemberTotal = 0;
		try {
			conn = getConnection();
			String userBBSListSql = "SELECT count(*) FROM virtual_bbs WHERE vId = ?";
			preparedStatement = conn.prepareStatement(userBBSListSql);
			preparedStatement.setString(1, vvId);
			resultSet = preparedStatement.executeQuery();
			if(resultSet.next()) {
				 MemberTotal = resultSet.getInt(1);
			}
		}catch(SQLException se) {
			se.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			closeDB();
		}
		return MemberTotal;
	}


MemberPagination.java

package com.spring.virtualCommand;

public class MemberPagination {
	private int pageSize = 10; // 페이지 당 보여지는 게시글의 최대 개수
	private int blockSize = 5; // 페이징된 버튼의 블럭당 최대 개수
	private int page = 1; // 현재 페이지
	private int block = 1; // 현재 블럭
	private int totalMemberListCnt; // 총 게시글 수
	private int totalPageCnt; // 총 페이지 수
	private int totalBlockCnt; // 총블럭 수
	private int startPage = 1; // 블럭 시작 페이지
	private int endPage = 1; // 블럭 마지막 페이지
	private int startIndex = 0; // DB에서 어디서 부터 select할지
	private int preBlock; // 이전 블럭의 마지막 페이지
	private int nextBlock; // 다음 블럭의 시작 페이지
	
	public MemberPagination(int totalMemberListCnt, int page) {
		setPage(page); // 현재 페이지 세팅
		setTotalMemberListCnt(totalMemberListCnt); // 총 게시글 수 세팅
		
		if(totalMemberListCnt == 0) { 
			// 총 게시글이 0일때 시작 페이지 1, 끝 페이지 1, 현재 페이지 1, 총 페이지 수 1, 반환시키고 종료
			setEndPage(1);
			setPage(1);
			setTotalPageCnt(1);
			return;
		}
		
		// 총 페이지 수
		setTotalPageCnt((int)Math.ceil((double)(totalMemberListCnt) / pageSize));
		// 총 블럭 수
		setTotalBlockCnt((int)Math.ceil((double)(totalPageCnt) / blockSize));
		// 현재 블록
		setBlock((int)Math.ceil((double)(page) / blockSize));
		// 블록 시작 페이지
		setStartPage((block - 1) * blockSize + 1);
		// 블록 마지막 페이지
		setEndPage(startPage + blockSize - 1);
		// 블록 마지막 페이지는 무조건 정해져 있지 않으므로
		if(totalPageCnt < endPage) this.endPage = totalPageCnt;
		// 이전 블럭 (클릭 시 이전 블록의 마지막 페이지를 가져와야 한다. 
		// ex) 11~28에서 이전 클릭 시 10을 가져와야 한다.
		setPreBlock(((block - 1) * blockSize));
		// 1에서 이전 블록을 누르면 오류가 나므로
		if(preBlock < 1) this.preBlock = 1;
		// 다음 블럭 ( 클릭 시 다음 블럭 첫 번째 페이지를 불러와야 한다.)
		setNextBlock((block * blockSize) + 1);
		// 다음 블럭을 눌렸는데 전체 페이지 수가 끝났을 때
		if(nextBlock > totalBlockCnt) this.nextBlock = totalPageCnt;
		// DB 접근 시작 index
		setStartIndex((page - 1) * pageSize);
	}
	
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getBlockSize() {
		return blockSize;
	}
	public void setBlockSize(int blockSize) {
		this.blockSize = blockSize;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getBlock() {
		return block;
	}
	public void setBlock(int block) {
		this.block = block;
	}
	
	public int getTotalMemberListCnt() {
		return totalMemberListCnt;
	}

	public void setTotalMemberListCnt(int totalMemberListCnt) {
		this.totalMemberListCnt = totalMemberListCnt;
	}

	public int getTotalPageCnt() {
		return totalPageCnt;
	}
	public void setTotalPageCnt(int totalPageCnt) {
		this.totalPageCnt = totalPageCnt;
	}
	public int getTotalBlockCnt() {
		return totalBlockCnt;
	}
	public void setTotalBlockCnt(int totalBlockCnt) {
		this.totalBlockCnt = totalBlockCnt;
	}
	public int getStartPage() {
		return startPage;
	}
	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}
	public int getEndPage() {
		return endPage;
	}
	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}
	public int getStartIndex() {
		return startIndex;
	}
	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}
	public int getPreBlock() {
		return preBlock;
	}
	public void setPreBlock(int preBlock) {
		this.preBlock = preBlock;
	}
	public int getNextBlock() {
		return nextBlock;
	}
	public void setNextBlock(int nextBlock) {
		this.nextBlock = nextBlock;
	}
	
}

여기는 딱히 오류가 없는거 같습니다.


MemberBoardService.java

package com.spring.virtualCommand;

import java.util.ArrayList;

import com.spring.virtualDAO.VDAO;
import com.spring.virtualVO.VVO;

public class MemberBoardService {
	public ArrayList<VVO> memberNoticeBoardList(int startIndex, int pageSize, String vId){
		VDAO dao = new VDAO();
		return dao.MemberList(startIndex, pageSize, vId);
	}
}



virtualBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>자유 게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>
		
		<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div class = "bbsListDivStyle" align = "center">
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">작성자</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${list}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center"><a href = "/virtualHomePage/virtualMemberBulletinBoard?vId=${vbbs.vId}">${vbbs.vId}</a></td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
								<tr>
									<td align = "right" colspan = "5" style = "border-bottom:none;">
										<br/>
										<c:if test = "${empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton" id = "logincheck" onClick = "locheck()" ><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
										<c:if test="${not empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton"><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
									</td>
								</tr>
							</table>
							<div>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne 1}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=1"><button class = "listPagingbutton">처음</button></a>
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getPreBlock()}"><button class = "listPagingbutton">⏪</button></a>
									</c:if>
								</c:if>
								
								<c:forEach begin="${pagination.startPage}" end = "${pagination.endPage}" var = "pageNum">
									<a href = "/virtualHomePage/virtualBulletinBoard?page=${pageNum}"><button class = "listPagingbutton">${pageNum}</button></a>
								</c:forEach>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne pagination.totalPageCnt}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getNextBlock()}&Member?=$"><button class = "listPagingbutton">⏩</button></a>
										<a href ="/virtualHomePage/virtualBulletinBoard?page=${pagination.getTotalPageCnt()}"><button class = "listPagingbutton">마지막</button></a>
									</c:if>
								</c:if> 
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>




virtualMemberBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>

<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div>
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${MemberList}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center">${vbbs.vId}</td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
							</table>
							
							<div>
								
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne 1}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=1&vid=${MemberList.vId}"><button class = "listPagingbutton">처음</button></a>
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getPreBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏪</button></a>
										</c:if>
									</c:if>
									
									<c:forEach begin="${memberPagination.startPage}" end = "${memberPagination.endPage}" var = "pageNum">
										<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${pageNum}&vid=${MemberList.vId}"><button class = "listPagingbutton">${pageNum}</button></a>
									</c:forEach>
									
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne memberPagination.totalPageCnt}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getNextBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏩</button></a>
											<a href ="/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getTotalPageCnt()}&vid=${MemberList.vId}"><button class = "listPagingbutton">마지막</button></a>
										</c:if>
									</c:if> 
								
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>



 

전체 게시판 보기에서는 페이징 하면 오류가 없이 작동을하는데


 

작성자를 클릭하여 페이지를 이동하여 선택한 작성자의 게시글만 볼려고 하는 페이징 게시판은 500에러가 발생하네요....



에러 문구

------------ virtualBulletinBoardList() ------------
전체글 수 : 3 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
------------ virtualMemberBulletinBoardList() ------------
전체글 수 : 2 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
vId = mint4098
1월 14, 2021 2:42:48 오후 org.apache.catalina.core.ApplicationDispatcher invoke
심각: 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

1월 14, 2021 2:42:48 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: 경로 []의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [java.lang.NumberFormatException: For input string: "vId"]을(를) 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)



혹시 해결 방법  아시는 분 계시나요??

이틀 째 해결 방법  찾고 있는데.... 모르겠네요 



2021-01-14 14:49:02 에 아래 내용에서 변경 됨 #1

HomePageController.java

@RequestMapping("/virtualHomePage/virtualMemberBulletinBoard")
	public String virtualMemberBulletinBoard(Model model, HttpServletRequest request, @RequestParam(defaultValue = "1") int page) {
		System.out.println("------------ virtualMemberBulletinBoardList() ------------");		
		String vId = request.getParameter("vId");
		VDAO dao = new VDAO();
		int totalMemberListCnt = dao.MemberBBSList(vId);
		MemberPagination memberPagination = new MemberPagination(totalMemberListCnt, page);		
		int startIndex = memberPagination.getStartIndex();
		int pageSize = memberPagination.getPageSize();
		System.out.println("전체글 수 : " + memberPagination.getTotalMemberListCnt() + " | 현재 페이지 : " + memberPagination.getPage() + " | 시작 페이지 : "	+ memberPagination.getStartPage() + " | 마지막 페이지 : " + memberPagination.getEndPage() + " "); // 확인용
		MemberBoardService boardService = new MemberBoardService();
		ArrayList<VVO> MemberList = boardService.memberNoticeBoardList(startIndex, pageSize, vId);
		System.out.println("vId = "+vId);
		model.addAttribute("MemberList", MemberList);
		model.addAttribute("memberPagination", memberPagination);
		return "BulletinBoard/virtualMemberBulletinBoard";
	}



VDAO.java

public ArrayList<VVO> MemberList (int startIndex, int pageSize, String vId){
		ArrayList<VVO> MemberListVVO = new ArrayList<VVO>();
		try {
			conn = getConnection();
			//String MemberBbsListSql = "SELECT * FROM virtual_bbs where vId='"+vId+ "' ORDER BY vGroup DESC, vStep ASC OFFSET ? ROWS FETCH FIRST ? ROWS ONLY ";
			String MemberBbsListSql = "SELECT virtual_bbs.* FROM( SELECT virtual_bbs.* FROM virtual_bbs WHERE vid = ? ORDER BY vGroup DESC, vStep ASC) virtual_bbs OFFSET ? ROWS FETCH FIRST ? ROWS ONLY";
			preparedStatement = conn.prepareStatement(MemberBbsListSql);
			preparedStatement.setString(1, vId);
			preparedStatement.setInt(2, startIndex); 
			preparedStatement.setInt(3, pageSize);
			resultSet = preparedStatement.executeQuery();
			
			while(resultSet.next()){
				int vNo = resultSet.getInt("vNo"); 
				vId = resultSet.getString("vId");
				String vSubject = resultSet.getString("vSubject"); 
				String vContent = resultSet.getString("vContent"); 
				Timestamp vDate = resultSet.getTimestamp("vDate"); 
				int vHit = resultSet.getInt("vHit"); 
				int vGroup = resultSet.getInt("vGroup"); 
				int vStep = resultSet.getInt("vStep"); 
				int vIndent = resultSet.getInt("vIndent");
				VVO MemberVbbsVVO = new VVO(vNo, vId, vSubject, vContent, vDate, vHit, vGroup, vStep, vIndent);
				MemberListVVO.add(MemberVbbsVVO);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeDB();
		}
		return MemberListVVO;
	}
	
	public int MemberBBSList(String vvId) {
		int MemberTotal = 0;
		try {
			conn = getConnection();
			String userBBSListSql = "SELECT count(*) FROM virtual_bbs WHERE vId = ?";
			preparedStatement = conn.prepareStatement(userBBSListSql);
			preparedStatement.setString(1, vvId);
			resultSet = preparedStatement.executeQuery();
			if(resultSet.next()) {
				 MemberTotal = resultSet.getInt(1);
			}
		}catch(SQLException se) {
			se.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			closeDB();
		}
		return MemberTotal;
	}


MemberPagination.java

package com.spring.virtualCommand;

public class MemberPagination {
	private int pageSize = 10; // 페이지 당 보여지는 게시글의 최대 개수
	private int blockSize = 5; // 페이징된 버튼의 블럭당 최대 개수
	private int page = 1; // 현재 페이지
	private int block = 1; // 현재 블럭
	private int totalMemberListCnt; // 총 게시글 수
	private int totalPageCnt; // 총 페이지 수
	private int totalBlockCnt; // 총블럭 수
	private int startPage = 1; // 블럭 시작 페이지
	private int endPage = 1; // 블럭 마지막 페이지
	private int startIndex = 0; // DB에서 어디서 부터 select할지
	private int preBlock; // 이전 블럭의 마지막 페이지
	private int nextBlock; // 다음 블럭의 시작 페이지
	
	public MemberPagination(int totalMemberListCnt, int page) {
		setPage(page); // 현재 페이지 세팅
		setTotalMemberListCnt(totalMemberListCnt); // 총 게시글 수 세팅
		
		if(totalMemberListCnt == 0) { 
			// 총 게시글이 0일때 시작 페이지 1, 끝 페이지 1, 현재 페이지 1, 총 페이지 수 1, 반환시키고 종료
			setEndPage(1);
			setPage(1);
			setTotalPageCnt(1);
			return;
		}
		
		// 총 페이지 수
		setTotalPageCnt((int)Math.ceil((double)(totalMemberListCnt) / pageSize));
		// 총 블럭 수
		setTotalBlockCnt((int)Math.ceil((double)(totalPageCnt) / blockSize));
		// 현재 블록
		setBlock((int)Math.ceil((double)(page) / blockSize));
		// 블록 시작 페이지
		setStartPage((block - 1) * blockSize + 1);
		// 블록 마지막 페이지
		setEndPage(startPage + blockSize - 1);
		// 블록 마지막 페이지는 무조건 정해져 있지 않으므로
		if(totalPageCnt < endPage) this.endPage = totalPageCnt;
		// 이전 블럭 (클릭 시 이전 블록의 마지막 페이지를 가져와야 한다. 
		// ex) 11~28에서 이전 클릭 시 10을 가져와야 한다.
		setPreBlock(((block - 1) * blockSize));
		// 1에서 이전 블록을 누르면 오류가 나므로
		if(preBlock < 1) this.preBlock = 1;
		// 다음 블럭 ( 클릭 시 다음 블럭 첫 번째 페이지를 불러와야 한다.)
		setNextBlock((block * blockSize) + 1);
		// 다음 블럭을 눌렸는데 전체 페이지 수가 끝났을 때
		if(nextBlock > totalBlockCnt) this.nextBlock = totalPageCnt;
		// DB 접근 시작 index
		setStartIndex((page - 1) * pageSize);
	}
	
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getBlockSize() {
		return blockSize;
	}
	public void setBlockSize(int blockSize) {
		this.blockSize = blockSize;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getBlock() {
		return block;
	}
	public void setBlock(int block) {
		this.block = block;
	}
	
	public int getTotalMemberListCnt() {
		return totalMemberListCnt;
	}

	public void setTotalMemberListCnt(int totalMemberListCnt) {
		this.totalMemberListCnt = totalMemberListCnt;
	}

	public int getTotalPageCnt() {
		return totalPageCnt;
	}
	public void setTotalPageCnt(int totalPageCnt) {
		this.totalPageCnt = totalPageCnt;
	}
	public int getTotalBlockCnt() {
		return totalBlockCnt;
	}
	public void setTotalBlockCnt(int totalBlockCnt) {
		this.totalBlockCnt = totalBlockCnt;
	}
	public int getStartPage() {
		return startPage;
	}
	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}
	public int getEndPage() {
		return endPage;
	}
	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}
	public int getStartIndex() {
		return startIndex;
	}
	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}
	public int getPreBlock() {
		return preBlock;
	}
	public void setPreBlock(int preBlock) {
		this.preBlock = preBlock;
	}
	public int getNextBlock() {
		return nextBlock;
	}
	public void setNextBlock(int nextBlock) {
		this.nextBlock = nextBlock;
	}
	
}

여기는 딱히 오류가 없는거 같습니다.


MemberBoardService.java

package com.spring.virtualCommand;

import java.util.ArrayList;

import com.spring.virtualDAO.VDAO;
import com.spring.virtualVO.VVO;

public class MemberBoardService {
	public ArrayList<VVO> memberNoticeBoardList(int startIndex, int pageSize, String vId){
		VDAO dao = new VDAO();
		return dao.MemberList(startIndex, pageSize, vId);
	}
}



virtualBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>자유 게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>
		
		<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div class = "bbsListDivStyle" align = "center">
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">작성자</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${list}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center"><a href = "/virtualHomePage/virtualMemberBulletinBoard?vId=${vbbs.vId}">${vbbs.vId}</a></td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
								<tr>
									<td align = "right" colspan = "5" style = "border-bottom:none;">
										<br/>
										<c:if test = "${empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton" id = "logincheck" onClick = "locheck()" ><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
										<c:if test="${not empty pageContext.request.userPrincipal}">
											<a href = "/virtualHomePage/virtualBulletinBoard/Write"><button class = "writebutton"><img src="/resources/image/write.png" class = "writeImageStyle"/>글쓰기</button></a>
										</c:if>
									</td>
								</tr>
							</table>
							<div>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne 1}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=1"><button class = "listPagingbutton">처음</button></a>
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getPreBlock()}"><button class = "listPagingbutton">⏪</button></a>
									</c:if>
								</c:if>
								
								<c:forEach begin="${pagination.startPage}" end = "${pagination.endPage}" var = "pageNum">
									<a href = "/virtualHomePage/virtualBulletinBoard?page=${pageNum}"><button class = "listPagingbutton">${pageNum}</button></a>
								</c:forEach>
								
								<c:if test = "${pagination.getTotalListCnt() ne 0}">
									<c:if test = "${pagination.getPage() ne pagination.totalPageCnt}">
										<a href = "/virtualHomePage/virtualBulletinBoard?page=${pagination.getNextBlock()}&Member?=$"><button class = "listPagingbutton">⏩</button></a>
										<a href ="/virtualHomePage/virtualBulletinBoard?page=${pagination.getTotalPageCnt()}"><button class = "listPagingbutton">마지막</button></a>
									</c:if>
								</c:if> 
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>




virtualMemberBulletinBoard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<link href="<c:url value="/resources/css/imageStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/divStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/tableStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/buttonStyle.css" />" rel="stylesheet">
<link href="<c:url value="/resources/css/anchorStyle.css" />" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/assets/css/main.css" />
<noscript><link href="<c:url value="/resources/assets/css/noscript.css" />" rel="stylesheet"></noscript>
<head>
<link rel="icon" type="image/x-icon" sizes="16x16" href="/resources/image/titleImage.ico">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />

<meta charset="UTF-8">
<title>게시판</title>
</head>
<body class="is-preload">
	<!-- Wrapper -->
	<div id="wrapper">
		<!-- Header -->
		<header id="header" class="alt">
			<a href = "/virtualHomePage" class = "imageLink"><img src = "/resources/image/home.png" class = "virtualHomePageImageSytle"/></a>
			<nav>
				<a href="#menu" style = "color:white;">Menu</a>
			</nav>
		</header>
		
		<!-- Menu -->
		<nav id="menu">
			<ul class="links">
				<li><a href="index">웹</a></li>
				<li><a href="/virtualHomePage">홈페이지</a></li>
			</ul>
			<ul class="actions stacked">
				<c:if test="${empty pageContext.request.userPrincipal}">
					<li><a href="/virtualHomePage/signUp"><button class="primaryFitbutton">회원가입</button></a></li>
					<li><a href="/virtualHomePage/loginPage"><button class="fitbutton">로그인</button></a></li>
				</c:if>
				<c:if test="${not empty pageContext.request.userPrincipal}">
					<li><a href = "/virtualHomePage/MemberInformation"><button class="fitbutton">${pageContext.request.userPrincipal.name}님</button></a></li>
					<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><button class="primaryFitbutton">로그아웃</button></a></li>
				</c:if>
			</ul>
		</nav>
		
		<!-- Banner -->
		<!-- Note: The "styleN" class below should match that of the header element. -->
		<section id="banner" class="style2">
			<div class="inner">
				<span class="image">
					<img src="/resources/image/pic07.jpg" alt="" />
				</span>
				<header class="major">
					<div align = "center">
						<h1 style = "color:white;">가상 홈페이지: 자유 게시판</h1>
					</div>
				</header>
			</div>
		</section>

<!-- Main -->
		<div id="main">
			<!-- One -->
			<section id="one">
				<div class="inner" align = "center">
					<header>
						<div>
							<br/>
							<table border = "1" cellpadding = "5" cellspacing = "0" class = "bbsListTableStyle">
								<thead>
									<tr>
										<td align = "center">번호</td>
										<td align = "center">제목</td>
										<td align = "center">날짜</td>
										<td align = "center">조회</td>
									</tr>
								</thead>
								<!-- 게시글 목록 가져오기 -->
								<c:forEach items = "${MemberList}" var = "vbbs">
									<tr>
										<td align = "center" style = "width:50px;">${vbbs.vNo}</td>
										<td class ="listSubject" contentView?vNo=${vbbs.vNo}" style = "max-width:100px; overflow:hidden; text-overflow:ellipsis; white-space: nowrap;">&nbsp;&nbsp;&nbsp;
											<c:forEach begin = "1" end = "${vbbs.vIndent}"></c:forEach>
											<a class = "bbsList" href = "/virtualHomePage/virtualBulletinBoard/contentView?vNo=${vbbs.vNo}">${vbbs.vSubject}</a>
										</td>
										<td style = "width:100px;" align = "center">${vbbs.vId}</td>
										<td align = "center" style = "width:180px;">
											<jsp:useBean id="now" class="java.util.Date" />
											<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일" var="today" />
											<fmt:formatDate value="${vbbs.vDate}" pattern="yyyy년 MM월 dd일" var="write_dt"/>
											<c:if test="${today ne write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="yyyy년MM월 dd일" value="${vbbs.vDate}"/></label>
											</c:if>
											<c:if test="${today eq write_dt}">
												<label class = "TelIdFindResultLabel"><fmt:formatDate pattern="HH:mm" value="${vbbs.vDate}"/></label>
											</c:if>
										</td>
										<td align = "center" style = "width:50px;">${vbbs.vHit}</td>
									</tr>
								</c:forEach>
							</table>
							
							<div>
								
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne 1}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=1&vid=${MemberList.vId}"><button class = "listPagingbutton">처음</button></a>
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getPreBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏪</button></a>
										</c:if>
									</c:if>
									
									<c:forEach begin="${memberPagination.startPage}" end = "${memberPagination.endPage}" var = "pageNum">
										<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${pageNum}&vid=${MemberList.vId}"><button class = "listPagingbutton">${pageNum}</button></a>
									</c:forEach>
									
									<c:if test = "${memberPagination.getTotalMemberListCnt() ne 0}">
										<c:if test = "${memberPagination.getPage() ne memberPagination.totalPageCnt}">
											<a href = "/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getNextBlock()}&vid=${MemberList.vId}"><button class = "listPagingbutton">⏩</button></a>
											<a href ="/virtualHomePage/virtualMemberBulletinBoard?page=${memberPagination.getTotalPageCnt()}&vid=${MemberList.vId}"><button class = "listPagingbutton">마지막</button></a>
										</c:if>
									</c:if> 
								
							</div>
						</div>
					</header>
				</div>
			</section>
		</div>
		
	</div>
	<!-- Scripts -->
	<script src="/resources/assets/js/jquery.min.js"></script>
	<script src="/resources/assets/js/jquery.scrolly.min.js"></script>
	<script src="/resources/assets/js/jquery.scrollex.min.js"></script>
	<script src="/resources/assets/js/browser.min.js"></script>
	<script src="/resources/assets/js/breakpoints.min.js"></script>
	<script src="/resources/assets/js/util.js"></script>
	<script src="/resources/assets/js/main.js"></script>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src='<c:url value="/resources/js/loginCheck.js"/>'></script>
</body>
</html>



 

전체 게시판 보기에서는 페이징 하면 오류가 없이 작동을하는데


 

작성자를 클릭하여 페이지를 이동하여 선택한 작성자의 게시글만 볼려고 하는 페이징 게시판은 500에러가 발생하네요....



에러 문구

------------ virtualBulletinBoardList() ------------
전체글 수 : 3 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
------------ virtualMemberBulletinBoardList() ------------
전체글 수 : 2 | 현재 페이지 : 1 | 시작 페이지 : 1 | 마지막 페이지 : 1 
vId = mint4098
1월 14, 2021 2:42:48 오후 org.apache.catalina.core.ApplicationDispatcher invoke
심각: 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

1월 14, 2021 2:42:48 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: 경로 []의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [java.lang.NumberFormatException: For input string: "vId"]을(를) 발생시켰습니다.
java.lang.NumberFormatException: For input string: "vId"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at javax.el.ListELResolver.coerce(ListELResolver.java:157)
	at javax.el.ListELResolver.getValue(ListELResolver.java:70)
	at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:184)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:954)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspx_meth_c_005fforEach_005f2(virtualMemberBulletinBoard_jsp.java:906)
	at org.apache.jsp.WEB_002dINF.views.BulletinBoard.virtualMemberBulletinBoard_jsp._jspService(virtualMemberBulletinBoard_jsp.java:219)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:742)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:484)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)



혹시 해결 방법  아시는 분 계시나요??

이틀 째 해결 방법  찾고 있는데.... 모르겠네요