종현s
52
2020-10-26 17:11:06 작성 2020-10-26 17:17:19 수정됨
4
224

spring CRUD 오류


selet 전체, select 개별, write 까지는 구현을 했는데 update와 delete는 appservlet에서 /edit (업데이트)를 찾을수 없다는 오류가 뜹니다. 분명 제가 경로를 잘못했던지 아니면 컨트롤러에서 뭘 빼먹은거 같아요.


spring 3.0부터는 service -- mapper 이 구조가 된다고 배워서 이러한 구조로 만들고 싶은데 CRUD 구글링의 자료들은 대부분 service -- DAO+DAO인터페이스로 되어있는 구조라서 어려움이 있어서 도움 좀 받고싶어 올려봅니다.

우선 코드는 이러합니다. 제 생각엔 다른 부분보다 controller가 이상하거나 serviceImpl쪽이 문제 같은데 맞나요?

public interface CmmnMapper {
	public List<MemberVo> getList();
	public void write(MemberVo memberVo);
	public MemberVo student(int id);
	public int edit(MemberVo memberVo);
	public int delete(MemberVo memberVo);
}


public interface CmmnService {
	public List<MemberVo> getList();
	public void write(MemberVo memberVo);
	public MemberVo student(int id);
	public int edit(MemberVo memberVo);
	public int delete(MemberVo memberVo);
}


@Service
public class CmmnServiceImpl implements CmmnService{
	@Autowired
	private CmmnMapper mapper;
	
	@Override
	public List<MemberVo> getList() {
		List<MemberVo> list = mapper.getList();
		return list;
	}
	@Override
	public void write(MemberVo memberVo) { 
		mapper.write(memberVo);
	}
	@Override
	public MemberVo student(int id) {
		return mapper.student(id);
	}
	@Override
	public int edit(MemberVo memberVo) {
		return mapper.edit(memberVo);
	}
	@Override
	public int delete(MemberVo memberVo) {
		return mapper.delete(memberVo);
	}
}


edit.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>학생 정보 추가</title>
<style type="text/css">
th {height: 20;}
</style>
</head>
<body>
	<div align="center">
		<h1>학생 정보 추가</h1>
		<form action="<c:url value="/edit"/>" method="post">
			<table border="1" width="300">
				<tr>
					<th>번호</th>
					<td><input style="width: 97%;" name="id"></td>
				</tr>
				<tr>
					<th>이름</th>
					<td><input style="width: 97%;" name="name"></td>
				</tr>
				<tr>
					<th>나이</th>
					<td><input style="width: 97%;" name="age"></td>
				</tr>
			</table>
			<br>
			<div>
				<input type="submit" value="수정하기">
				<a href="<c:url value="/"/>"><input type="button" value="메인 화면"></a>
			</div>
		</form>
	</div>
</body>
</html>


delete.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>학생 정보</title>
</head>
<body>
	<div align="center">
		<h1>학생 정보</h1>
		<table border="1" width="300">
			<tr>
				<th>번호</th>
				<td>${memberVo.id}</td>
			</tr>
			<tr>
				<th>이름</th>
				<td>${memberVo.name}</td>
			</tr>
			<tr>
				<th>나이</th>
				<td>${memberVo.age}</td>
			</tr>
		</table>
		<br>
		<div>
			<a href="<c:url value="/edit/${memberVo.id}"/>"><input type="submit" value="수정"></a>
			<a href="<c:url value="/delete/${memberVo.id}"/>"><input type="submit" value="삭제"></a>
			<a href="<c:url value="/"/>"><input type="button" value="메인 화면"></a>
		</div>
	</div>
</body>
</html>



@Controller
public class CmmnController {
	@Autowired
	private CmmnService service;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model m) {
		m.addAttribute("list", service.getList());
		return "home";
	}
	@RequestMapping(value = "/write", method = RequestMethod.GET)
	public String write() {
		return "/write";
	}
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String write(MemberVo memberVo){
		service.write(memberVo);
		return "redirect:/write";
	}
	@RequestMapping(value = "/student/{id}")
	public String student(Model m, @PathVariable int id) {
		m.addAttribute("memberVo", service.student(id));
		return "/student";
	}
	@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
	public String edit(@PathVariable int id, Model m) {
		MemberVo memberVo = service.student(id);
		m.addAttribute("memberVo", memberVo);
		return "/edit";
	}
	@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
	public String edit(@ModelAttribute MemberVo memberVo) {
		service.edit(memberVo);
		return "redirect:/student";
	}
	@RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
	public String delete(@PathVariable int id, Model m) {
		m.addAttribute("id", id);
		return "/delete";
	}
}


구동은 되나 /edit 페이지에서 수정하기 버튼을 누르면 /edit를 appservlet에서 찾을수 없다고 뜹니다.

WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/edit] in DispatcherServlet with name 'appServlet'

0
  • 답변 4

  • 퀘이사123
    552
    2020-10-26 17:15:20

    컨트롤러쪽도 올려주셔야 정확히 알겠지만


    컨트롤러쪽에 /edit으로 된 postmapping이 는거 같은데요.

  • 종현s
    52
    2020-10-26 17:18:00 작성 2020-10-26 17:23:07 수정됨

    퀘이사123 아 바보같이 중요한걸 안올렸네요. 너무 많이 복붙해서 글 길까봐 ㅎㅎ... 올렸습니다!

  • 퀘이사123
    552
    2020-10-26 17:29:06

    포스트맵핑보시면 /edit/{id} 로 되어있는데 이거 /edit으로 바꾸시면 될듯.




  • 종현s
    52
    2020-10-26 17:38:39

    퀘이사123  네 말씀하신거 바로 바꿔보니 구동이되네요.. ㅎㅎㅎㅎ 다시생각해보니 write는 잘해놓고 edit은 그렇게했네요.. 감사합니다!

  • 로그인을 하시면 답변을 등록할 수 있습니다.