63,800원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
추가질문 드립니다.
@RequestMapping("/boardUpdate")public String boardUpdateForm(int idx, Model model) {이렇게 수정해서 해보시기 바랍니다.<input type="hidden" name="idx" value="${vo.idx}" />폼에서 hidden으로 파라메터(idx)가 넘어오기 때문에 위처럼 받아야됩니다.======================================================@RequestMapping("/boardUpdate")public String boardUpdate(int idx, Model model, Board vo) {boardmapper.boardUpdate(vo);return "redirect:/boardMore";}이렇게 바꾸라는 말씀 맞나요?? 똑같이 안 됩니다. @RequestMapping("/boardUpdate/{idx}")public String boardUpdateForm(@PathVariable("idx") int idx, Model model) {Board vo = boardmapper.boardMore(idx);model.addAttribute("vo", vo);return "boardUpdateForm";}@RequestMapping("/boardUpdate")public String boardUpdate(int idx, Model model, Board vo) {boardmapper.boardUpdate(vo);return "redirect:/boardMore";}이렇게 두개가 있는데요. boardUpdateForm은 idx번 게시물을 수정하는 폼으로 이동하는 것이고 boardUpdate는 수정폼에서 수정하고 수정완료 버튼을 누를때 쓰게 됩니다. 제가 잘 못 이해한 것인가요? 헤더 추가한 것 말고는 선생님 깃허브 코드랑 거의 비슷한것 같은데 int idx를 추가해야할 이유가 있을까요??
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
질문드립니다
안녕하세요 선생님! 스프1탄 복습하고자 제가 만들고 싶은 게시판 만들고 있는데 문제가 생겼습니다. 스프1탄과 마찬가지로 header를 공통부분으로 하고 jsp:include page 사용해서 공통적으로 헤더를 적용했습니다. 게시판 수정을 위해서 @RequestMapping("/boardUpdate/{idx}")public String boardUpdateForm(@PathVariable("idx") int idx, Model model) {~~} 이런식으로 컨트롤러에서 했구요. boardUpdateForm.jsp는 form으로 해서 제출하게 했고 스프1탄에서 배운대로 form action에 그냥 boardUpdate 하지 않고 ../boardUpdate를 적용 했습니다. 그런데 문제는 HTTP 상태 400 – 잘못된 요청타입 상태 보고메시지 Required int parameter 'idx' is not present설명 클라이언트 오류로서 인지된 어떤 문제로 인하여, 서버가 해당 요청을 처리할 수 없거나, 처리하지 않을 것입니다. (예: 잘못된 요청 문법, 유효하지 않은 요청 메시지 framing, 또는 신뢰할 수 없는 요청 라우팅). 이런식으로 잘못된 요청이라고 나옵니다. 그리고 헤더에 로고 경로를 src="resources/images/logo.png" 이렇게 해줬습니다.그런데 이 이미지가 다른데서는 다 되는데 update 페이지 에서는 표시가 되지 않고 No mapping found for HTTP request with URI [/m01/boardUpdate/resources/images/logo.png]이런식으로 console에 나오게 됩니다. 이것 뿐만 아니라 목록으로 가기 버튼도 만들었는데 마찬가지로 작동이 되지 않고 잘못된 요청이 나옵니다. 아무래도 pathvarible 이후로 경로가 context path/에서 context path/boardUpdate/ 로 바뀌어서 그런 것 같은데 도저히 수정이 안 되네요 .. 아래는 boardController.java입니다.@Controllerpublic class BoardController { @Autowired private BoardMapper boardmapper; // HandlerMapping @RequestMapping("/") public String root() { return "redirect:/main"; } @RequestMapping("/main") public String main(Model model) { List<Board> list = boardmapper.getLists(); model.addAttribute("list", list); return "main"; // /WEB-INF/views/main.jsp -> forward } @RequestMapping("/boardWriteForm") public String boardWriteForm() { return "boardWriteForm"; } @RequestMapping("/boardWrite") public String boardWrite(Board vo) { boardmapper.write(vo); return "redirect:/main"; } @RequestMapping("/boardMore") public String boardMore(@RequestParam("idx") int idx, Model model) { boardmapper.boardCount(idx); Board vo = boardmapper.boardMore(idx); model.addAttribute("vo", vo); return "boardMore"; } @RequestMapping("/boardDelete/{idx}") public String boardDelete(@PathVariable("idx") int idx) { boardmapper.boardDelete(idx); return "redirect:/main"; } @RequestMapping("/boardUpdate/{idx}") public String boardUpdateForm(@PathVariable("idx") int idx, Model model) { Board vo = boardmapper.boardMore(idx); model.addAttribute("vo", vo); return "boardUpdateForm"; } @RequestMapping("/boardUpdate") public String boardUpdate(Board vo) { boardmapper.boardUpdate(vo); return "redirect:/boardMore"; }} 아래는 boardUpdateForm.jsp입니다.<body> <jsp:include page="header.jsp" /> <div class="container"> <h2>게시글 수정</h2> <form action="../boardUpdate" method="post"> <input type="hidden" name="idx" value="${vo.idx}" /> <table class="table table-bordered"> <tr> <td style="min-width: 100px;">제목</td> <td><input type="text" name="title" class="form-control" value="${vo.title}" required></td> </tr> <tr> <td>내용</td> <td><textarea name="content" class="form-control" rows="10" required>${vo.content}</textarea></td> </tr> <tr> <!-- 추후 세션으로 처리 --> <td>작성자</td> <td><input type="text" name="writer" class="form-control" value="${vo.writer}" readonly></td> </tr> <tr> <td colspan="2" align="right"> <button type="button" class="btn btn-danger" onclick="location.href='../boardMore'">취소</button> <button type="submit" class="btn btn-primary">수정완료</button> </td> </tr> </table> </form> </div></body>
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
답변에 대한 질문드립니다.
선생님 안녕하세요 답변해주셔서 정말 감사합니다.=================================================한 테이블에 자동 증가 컬럼을 2개를 사용하는 경우도 있는데 그때는 하나는 수동으로 +1을 해줘야 됩니다. 그런 경우에도 사용하고 오라클인 경우 시퀀스 대신으로 사용할 수도 있습니다. 실습에서는 이런 방법도 있다는 것을 알려주는 것이니 가능하면 자동증가로 하는게 좋습니다~~==================================================위와 같이 답변해주셨는데요. 그러면 강의에서는 자동 증가 컬럼을 2개 사용하지 않았으니 자동증가로 해도 되는 것이고, 다른 방법을 알려주시는 것으로 강의에서 수동 증가를 알려주신 것으로 이해하면 정확히 이해한 것일까요?? 감사합니다!
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
질문드립니다.
안녕하세요 선생님 (select IFNULL(MAX(memIdx)+1,1)이것처럼 스프링시큐리티 이후에는 auto increment하지 않고 수동으로 +1을 해주잖아요?혹시 auto increment를 쓰지 않고 수동으로 하는 이유 알 수 있을까요?? 감사합니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
질문드립니다.
안녕하세요 선생님 최근에 회사에 취업해서 이클립스를 사용하고 있습니다.이클립스에서 sts 설치하고 톰캣 설치하고 jdk 설치해서 스프링 레거시 프로젝트를 만들었습니다. 그런데 전자정부프레임워크로 만들었을 때랑 폴더, 파일 배치된 것이 다르게 나오네요? 이클립스는 2019-06버전이고 sts3 standalone을 이클립스 마켓플레이스에서 설치했는데 전자정부랑은 다르게 나옵니다. Maven Dependency도 Java 어쩌고 하는데 안에 들어있고 적응하기 힘들더라구요.. 이클립스에 설치해서 하는 것과 전자정부프레임워크 쓸때랑 다른 것이 맞는 건가요?
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
69강 질문드립니다.
안녕하세요 선생님. 69강 진행 중에 cos라는 id로 먼저 회원가입을 한 상태에서 com이라는 아이디로 회원가입을 다시 시도하였는데 다음과 같이 오류가 났습니다. 저 스스로 오류를 고쳐보고자 선생님 github의 코드와 비교해 보면서 해봤는데도 해결이 안되고 있습니다.. 어떻게 해결하면 좋을까요? 댓글에서 해결했습니다! github 수정이 필요해 보여요 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: (conn=200) Truncated incorrect DOUBLE value: 'cos' ### The error may involve kr.board.mapper.MemberMapper.register-Inline ### The error occurred while setting parameters ### SQL: insert into mem_stbl(memIdx,memID,memPassword,memName,memAge,memGender,memEmail,memProfile) values((select IFNULL(MAX(memId)+1,1) from mem_stbl mem),?,?,?,?,?,?,?) ### Cause: java.sql.SQLSyntaxErrorException: (conn=200) Truncated incorrect DOUBLE value: 'cos' ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: (conn=200) Truncated incorrect DOUBLE value: 'cos'
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
저번 질문 답변에 대해서 궁금한 점 여쭙고 싶습니다.
저번질문은 "똑같은 파일이름 저장시 문제점 질문드립니다." 입니다.===============================안녕하세요 선생님. 답변 너무 감사합니다. 선생님 말씀해주신대로 해보니까 정말 해결이 되었네요.그런데 궁금한것이 <dependency><groupId>servlets.com</groupId><artifactId>cos</artifactId><version>05Nov2002</version></dependency> 이 부분만 09may2022에서 05nov2022로 바뀐 것 말고는 다른 코드는 다 동일하거든요.. 왜 이런 현상이 일어났었는지는 혹시 알 수 있을까요??
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
34강 조회수 누적하기(ajax) 새로고침해야 반영이 됩니다.
안녕하세요~ 수업 잘듣고 있습니다! 공부중에 잘 안되는 부분이 있어 수업중에 질문드립니다!수업을 따라 코딩하면서 상세 게시글을 닫을때 조회수 +1 카운트되게 코딩해봤습니다. 문제는 새로고침을 눌러야 조회수가 올라갑니다. ajax가 비동기 방식이라 새로고침 하지 않아도 바로 데이터 바로바로 반영되어 보여진다라는 특징으로 알고있습니다. 혹시 $.ajax설정이 기본이 true지만 이 문제인가 싶어서 async : true;로 직접 설정도 해보았지만 해결하지 못하였습니다. 무엇이 문제일까요 선생님! 답변부탁드리겠습니다~~
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
똑같은 파일이름 저장시 문제점 질문드립니다.
안녕하세요 선생님. MVC03부분에서 MemberController.java입니다.// 회원사진 이미지 업로드(upload폴더에 저장, DB에 파일이름도 저장)@RequestMapping("/memImageUpdate.do")public String memImageUpdate(HttpServletRequest request, HttpSession session, RedirectAttributes rttr) {// 파일업로드 API(cos.jar(고전적 방식), 3가지)MultipartRequest multi=null;int fileMaxSize=10*1024*1024; // 10MBString savePath=request.getRealPath("resources/upload"); // 1.pngtry {// 이미지 업로드 // 1_1.pngmulti=new MultipartRequest(request, savePath, fileMaxSize, "UTF-8", new DefaultFileRenamePolicy());} catch (Exception e) {e.printStackTrace();rttr.addFlashAttribute("msgType", "실패 메세지");rttr.addAttribute("msg", "파일의 크기는 10MB를 넘을 수 없습니다.");return "redirect:/memImageForm.do";}// 데이터베이스 테이블에 회원이미지를 업데이트String memID=multi.getParameter("memID");String newProfile="";File file=multi.getFile("memProfile");if(file !=null) { // 업로드가 된상태(.png, .jpg, .gif)// 이미지파일 여부를 체크->이미지 파일이 아니면 삭제(1.png)String ext=file.getName().substring(file.getName().lastIndexOf(".")+1);ext=ext.toUpperCase(); // PNG, GIF, JPGif(ext.equals("PNG") || ext.equals("GIF") || ext.equals("JPG")){// 새로 업로드된이미지(new->1.PNG), 현재DB에 있는 이미지(old->4.PNG)String oldProfile=memberMapper.getMember(memID).getMemProfile();File oldFile=new File(savePath+"/"+oldProfile);if(oldFile.exists()) {oldFile.delete();}newProfile=file.getName();}else { // 이미지 파일이 아니면if(file.exists()) {file.delete();}rttr.addFlashAttribute("msgType", "실패 메세지");rttr.addFlashAttribute("msg", "이미지 파일만 업로드 가능합니다.");return "redirect:/memImageForm.do";}}// 새로운 이미지를 테이블에 업데이트Member mvo=new Member();mvo.setMemID(memID);mvo.setMemProfile(newProfile);memberMapper.memProfileUpdate(mvo); // 이미지 업데이트 성공Member m=memberMapper.getMember(memID);// 세션을 새롭게 생성한다.session.setAttribute("mvo", m);rttr.addFlashAttribute("msgType", "성공 메세지");rttr.addFlashAttribute("msg", "이미지 변경이 성공했습니다."); return "redirect:/";} 이 코드에서요 사진을 올리면 폴더에 사진파일이 올라가고 원래 DB에 저장된 이름을 가진 사진이 지워지는 거잖아요? 그런데 만약 똑같은 a.jpg 파일을 두번 연속 올리게 되면 처음에는 a.jpg가 폴더에 올라가고 db에 a.jpg가 등록되고 페이지에 a.jpg를 참조해서 사진이 잘 보입니다. 그런데 두번째 올리면 a.jpg가 파일 이름이 같아서 DefaultFileRenamePolicy에 의해서 a1.jpg로 저장이 됩니다. 그런데 여기서 문제가 a1.jpg가 폴더에 올라가고 원래 있었던 a.jpg가 삭제가 되는데 db에는 올릴 때 파일명인 a.jpg가 등록되어버려 페이지에 보여질 때 경로에 a.jpg가 되어 있어 사진이 안 보이게 됩니다. db에 DefaultFileRenamePolicy에 의해서 바뀐 파일명이 올라가게 해야 좋을지 아니면 처음 사진을 제출할 때 파일명이 db의 파일명과 같으면 제출이 안되게 할지 중에서 생각해보니 파일명은 같지만 다른 사진이 있을 수 있기 때문에 바뀐 파일명이 올라가게 했으면 좋겠습니다. 괜찮으시다면 바뀐 파일명이 올라가는 방법과 파일명이 같으면 제출이 안되게 하는법 두가지 방법 한번 알려주실 수 있을까요?? 고민을 많이 해봤는데 딱히 떠오르지 않고 아직 초보라서 구현하기 힘드네요;; 선생님의 도움의 손길을 간절히 바랍니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
Member entity 질문드립니다.
안녕하세요 선생님. 43분 강의 16분 경에 등록을 누르면 오류가 발생하는데 이게 나이에 아무것도 입력을 안하면 null이 들어가서 Member entity에 int memAge와 충돌이 나는 거잖아요? 그런데 만약 Member entity에 Integer memAge로 해주면 어떤가요? Integer 타입은 값이 없을 때 null이 기본값으로 알고 있어서 될 것 같아서 해봤는데 정상적으로 모달창이 나오더라구요.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
JSON.stringify 질문드립니다.
안녕하세요 선생님. function goUpdate(idx) { var title=$("#nt"+idx).val(); var content=$("#ta"+idx).val(); $.ajax({ /* url : "boardUpdate.do", */ url : "board/update", /* type : "post", */ type : "put", /* Rest 부분에서 추가됨 */ contentType: 'application/json;charset=utf-8', /* data : {"idx":idx, "title":title, "content":content}, */ data : JSON.stringify({"idx":idx, "title":title, "content":content}), success : loadList, error : function() {alert("error");} }); } 여기서 {"idx":idx, "title":title, "content":content}) 이렇게 여러개를 보낼 때는 JSON.stringify를 붙여주고 contentType을 json으로 지정해줘야 하잖아요??그리고 컨트롤러에서 @RequestBody가 필요하구요.그런데 궁금한 것이 있습니다. function goInsert(){ //var title=$("#title").val(); //var content=$("#content").val(); //var writer=$("#writer").val(); // 많으면 번거로움 var fData=$("#frm").serialize(); // form 안의 모든 parameter를 직렬화(한줄로)시켜서 한줄로 가져옴 $.ajax({ /* url : "boardInsert.do", */ url : "board/new", type : "post", data : fData, success : loadList, error : function() { alert("error")} }); 여기서 data를 fData로 넘겨주는데 fData는 여러개를 serialize()를 통해서 한줄로 가져오는 거잖아요?? 이거는 여러개긴 한데 한줄로 하나로 보내기 때문에 JSON.stringify가 필요 없는 건가요?? 그리고 컨트롤러에서도 @RequestBody 없이 받아도 잘 받아졌거든요. serialize()는 JSON이 아니기 때문에 @RequestBody가 필요없는건가요? 정리하자면 여러개를 보낼 때는 JSON.stringify로 해서 보내고 serialize()는 한줄로 만들어주기 때문에 여러개가 아니라 하나로 보면 될까요? 그리고 @RequestBody는 JSON 데이터를 처리할 때만 필요하고 serialize는 JSON 데이터가 아니니까 @RequestBody가 필요없는 것 맞을까요? 감사합니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
ajax get, post 질문드립니다.
ajax통신할 때 get방식 post방식이 있는데요insert나 update 시에는 post방식이고 나머지는 get방식을 쓰면 되는건가요?? 명확한 구분 기준이 있을까요?
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
질문드립니다.
선생님 좋은 강의 정말 감사합니다.한 페이지 내에서 jQuery와 ajax로 구현하는 부분은 순수 자바스크립트로도 구현할 수 있는거겠죠? 순수 자바스크립트에서는 ajax가 아니라 fetch같은 것을 사용하나요?그리고 한 페이지 내에서 하는 부분은 리액트나 뷰 같은 프레임워크를 사용해서 많이 하고 있는 것으로 알고 있습니다. 이건 제이쿼리 ajax에 비해서 코드 관리하기 쉬워서일까요? 리액트나 뷰는 ajax를 쓰나요 다른 방식을 사용하나요?마지막으로 현업에서는 mvc1 방식을 많이 사용하나요? 아니면 제이쿼리ajax나 순수자바스크립트나 리액트 같은 것을 많이 사용하나요? 감사합니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
ajax 질문드립니다.
$.each(data, function(index, obj){ // obj={"idx":5, "title":"게시판", ...} listHtml+="<tr>"; listHtml+="<td>"+obj.idx+"</td>"; listHtml+="<td>"+obj.title+"</td>"; listHtml+="<td>"+obj.writer+"</td>"; listHtml+="<td>"+obj.indate+"</td>"; listHtml+="<td>"+obj.count+"</td>"; listHtml+="<tr>";}); 안녕하세요 선생님. 위에서 "+obj.writer+" 여기가 잘 이해가 안됩니다. "obj.writer"와 "+obj.writer+"의 차이가 뭔가요? +의 기능이 궁금합니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
git commit 질문드립니다.
안녕하세요 선생님. 처음에 github에 올릴때만 add to index를 해주고 그 다음부터는 commit만 해도 되는건가요? 아니면 매번 add to index를 해주고 commit을 해야하나요?
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
21강에서 목록으로 가는부분
안녕하세요 선생님 21강에서 boardUpdate.jsp에서요 수정화면에서 목록 누르면 에러가 나거든요. 그래서 uri를 확인해보면 boardUpdateForm.do/boardList.do 이런식으로 되어있거든요. form 태그에서 action에 ../boardUpdate.do 하는 것 처럼 여기도<button type="button" class="btn btn-info btn-sm" onclick="location.href='../boardList.do'">목록</button>이렇게 ../boardList.do로 수정해서 해결했습니다.github에도 수정이 안되어 있어서 질문게시판에 올립니다. boardList.do에서 ../boardList.do로 바꿨습니다.잘 해결한 것 맞을까요?? 강의 너무 좋습니다. 감사합니다 선생님.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
PDF 파일에 오타가 있는 것 같습니다.
PDF 9페이지 MySQL DB 연동하는 코드를 보면 <property name=“jdbcUrl" value="jdbc:mysql://localhost:3306/com?serverTimezone=UTC"/> 부분에서 코드 블럭으로 표시한 부분(name=“jdbcUrl" )이 왼쪽 특수문자가 " 가 아니라 다른 특수 문자라서 에러가 발생 합니다.
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
eclipse 에서 디비 연결이 안됩니다
Mysql 로 연결은 성공했는데 eclipse에서 안되네요분명 com누르면 아래에 파란색 com이 떠야하는데 왜이러는지 모르겠어요 그래서 mysql 에서 호스트랑 포트 확인해봤는데 정상적으로 맞게 설정한게 보이는데 왜 안되는지 모르겠어요
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
포스팅 관련 질문 드립니다.
강사님 안녕하세요.내용이 너무 좋아서 블로그에 정리 하면서 듣고 싶은데, 혹시 PDF에 있는 자료 스샷과 강의 해주시는 내용을 정리해서 글을 올려도 될까요??만약 가능하다면 출처는 꼭 밝히겠습니다.!
- 미해결스프링 프레임워크는 내 손에 [스프1탄]
pdf는 어디서 볼수 있을까요??
안녕하세요 선생님.오늘 스프1탄과 자바tpc강의를 수강신청했습니다.취업한 회사에서 12월말부터 일하게 되어서 나프1,2강의는 일단 건너뛰기로 했습니다.2달전에 다른 스프링부트 강의 80시간짜리를 수강했었고 view부분은 jsp로 진행했었습니다. 회사에서 스프링 레거시를 공부하고 오면 좋다고 해서 알아보던 중 박매일 선생님 강의를 알게 되었습니다.스프1 강의에서 초기설정 하는법도 배우게 되나요? 스프링부트만 했어서 이 부분을 꼭 배우고 싶습니다. 나프1,2강의를 건너뛰고 수강해도 괜찮을까요?pdf나 소스코드는 어디서 볼 수 있을까요??