inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

http 서블릿 response 질문 있습니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강사님께서 강의에서 작성하시는 이 부분은 response를 사용하고 싶을 때 마다, 이런 기능을 다 직접 코드를 작성해야하나요? request를 요청하면 response 관련 정보가 들어있는 객체가 따로 자동 생성되는 것 아닌가요??

  • spring
  • mvc
blackhole124 댓글 1 좋아요 0 조회수 515

db1 - 스프링과 문제해결 예외처리,반복 강의 관련

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 스프링 예외 추상화 이해 파트 부분 강의에서 스프링이 제공하는 예외 변환기 부분에서 test 코드 짜실때 DataSource dataSource; @BeforeEach void init(){ datasource = new DriverManager~(); } 이런 식으로 작성하셨는데 @BeforeEach 안쓰고 @Test 코드 작성하기 전에 테스트 클래스 상위에 DataSource dataSource = new DriverManager~(); 이런식으로 작성하는건 안되나요??

  • spring
  • mvc
  • spring-jdbc
황지호 댓글 1 좋아요 0 조회수 405

29강. boardInsert 메서드 @ResponseBody 붙이는 이유

해결됨

스프링 프레임워크는 내 손에 [스프1탄]

안녕하세요. boardInsert 메서드에 @ResponseBody를 붙이는 이유가 궁금합니다. insert 후에 리턴 값이 없는데 왜 @ResponseBody를 붙이는 건가요? callback 함수인 loadList 때문인가요? 감사합니다.

  • jsp
  • spring
  • mvc
  • spring-security
oniic 댓글 2 좋아요 0 조회수 340

finditems() 에러

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

'테스트 - 스프링 부트와 임베디드 모드' 수강 중에 ItemRepositoryTest를 h2를 모두 끄고 동작시켰는데 강사님처럼 모두 성공을 뜨지 않고 finditems()에서 에러가 납니다. 강의자료 초반에 데이터베이스에서 데이터가 보관되어 있어서 그렇다고 들었는데 어떻게 해결해야하나요?? h2는 접속 종료한 상태입니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
jeong정재인 댓글 1 좋아요 0 조회수 339

Spring boot의 ErrorPage 제공 기능

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강의를 듣다가 헷갈리는 부분이 생겨 글 올립니다. ServletExController의 각 메핑 메서드에response.send() 메서드가 있는데 이 메서드 호출 시 BasicErrorController가 호출되어서 Spring boot가 자동으로 등록한 /error를 호출하게 되는 건가요?

  • spring
  • mvc
JIWON 댓글 1 좋아요 0 조회수 509

댓글 기능 구현에 대한 질문

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요. 강의 잘보고 있습니다. 현재 저는 게시글, 댓글 기능을 구현하고 있습니다. 타임리프 + 스프링부트로 구현하고 있는데, 게시글 상세를 눌렀을때 어떤 방식으로 댓글을 가져오는 것이 효율적인지가 궁금합니다. 게시글 상세 요청 -> 페이지 응답 -> 응답받은 페이지에서 ajax로 다시 서버에 댓글 페이지 요청 게시글 상세 요청 -> 댓글이랑 상세페이지 한꺼번에 타임리프로 렌더링해서 페이지 응답 (즉, 항상 게시글 상세와 댓글을 함께 랜더링함) 게시글 상세 요청 -> 첫 댓글 페이지랑 게시글 상세페이지 한꺼번에 타임리프로 렌더링해서 페이지 응답 -> 두번째 댓글페이지부터는 ajax로 응답 혹은 다른 방법이 있다면 알려주세요 !!

  • spring
  • mvc
김재연 댓글 1 좋아요 0 조회수 353

db1 - 트랜잭션 매니저 강의 관련 질문

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 트랜잭션 매니저 관련 강의를 듣고 있는데요 예를 들어 private final PlatformTransactionManager transactionManager; 이렇게 해서 트랜잭션 매니저를 주입받는다고 했는데 이 클래스가 빈으로 등록된것도 아닌데 어떻게 주입받는건가요??

  • spring
  • mvc
  • spring-jdbc
황지호 댓글 1 좋아요 0 조회수 397

inputStream.close() 작성 하여도 UncheckedIOException 에러 발생

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

다른 분들이 올리신 글 보고 inputStream.close()를 추가해주었는데도 UncheckedIOException 에러가 발생합니다. 버전문제일까요..? 현재 사용중인 버전은 2.7.14 입니다.

  • spring
  • mvc
차노쓰 댓글 2 좋아요 0 조회수 432

itemName에 null

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

public class ServletUploadControllerV2 { @Value("${file.dir}") private String fileDir; @GetMapping("/upload") public String newFile() { return "upload-form"; } @PostMapping("/upload") public String saveFileV1(HttpServletRequest request) throws ServletException, IOException { log.info("request={}", request); String itemName = request.getParameter("itemName"); log.info("itemName={}", itemName); Collection<Part> parts = request.getParts(); log.info("parts={}", parts); for (Part part : parts) { log.info("==== PART ===="); log.info("name={}", part.getName()); Collection<String> headerNames = part.getHeaderNames(); for (String headerName : headerNames) { log.info("header {}: {}", headerName, part.getHeader(headerName)); } //편의 메서드 //content-disposition; filename log.info("submittedFileName={}", part.getSubmittedFileName()); log.info("size={}", part.getSize()); //part body size //데이터 읽기 InputStream inputStream = part.getInputStream(); String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); log.info("body={}", body); //파일에 저장하기 if (StringUtils.hasText(part.getSubmittedFileName())) { String fullPath = fileDir + part.getSubmittedFileName(); log.info("파일 저장 fullPath={}", fullPath); part.write(fullPath); } } return "upload-form"; } } <로그> 2023-08-15 18:53:08.744 INFO 11860 --- [nio-8081-exec-7] h.u.c.ServletUploadControllerV2 : request=org.apache.catalina.connector.RequestFacade@46f8d0d 2023-08-15 18:53:08.744 INFO 11860 --- [nio-8081-exec-7] h.u.c.ServletUploadControllerV2 : itemName=null 2023-08-15 18:53:08.744 INFO 11860 --- [nio-8081-exec-7] h.u.c.ServletUploadControllerV2 : parts=[] 2023-08-15 18:53:08.747 DEBUG 11860 --- [nio-8081-exec-7] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [926] 2023-08-15 18:53:08.747 DEBUG 11860 --- [nio-8081-exec-7] o.a.coyote.http11.Http11InputBuffer : Received [] 2023-08-15 18:53:08.747 DEBUG 11860 --- [nio-8081-exec-7] o.apache.coyote.http11.Http11Processor : Socket: [ org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper@7e5a37d: org.apache.tomcat.util.net .NioChannel@72e2ee37:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8081 remote=/0:0:0:0:0:0:0:1:50696]], Status in: [OPEN_READ], State out: [OPEN] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-8] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [926] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-9] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-8] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header java.io .EOFException: null at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.fillReadBuffer( NioEndpoint.java:1347 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.read( NioEndpoint.java:1234 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.fill( Http11InputBuffer.java:785 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine( Http11InputBuffer.java:348 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:263 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:63 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:926 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1791 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:52 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at java.base/java.lang.Thread.run( Thread.java:834 ) ~[na:na] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-9] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header java.io .EOFException: null at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.fillReadBuffer( NioEndpoint.java:1347 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.read( NioEndpoint.java:1234 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.fill( Http11InputBuffer.java:785 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine( Http11InputBuffer.java:348 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:263 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:63 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:926 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1791 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:52 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at java.base/java.lang.Thread.run( Thread.java:834 ) ~[na:na] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-8] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing request java.io .EOFException: null at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.fillReadBuffer( NioEndpoint.java:1347 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.read( NioEndpoint.java:1234 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.fill( Http11InputBuffer.java:785 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine( Http11InputBuffer.java:348 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:263 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:63 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:926 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1791 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:52 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at java.base/java.lang.Thread.run( Thread.java:834 ) ~[na:na] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-8] o.apache.coyote.http11.Http11Processor : Socket: [ org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper@45100ea6: org.apache.tomcat.util.net .NioChannel@3f9eb895:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8081 remote=/0:0:0:0:0:0:0:1:50697]], Status in: [OPEN_READ], State out: [CLOSED] 2023-08-15 18:53:16.474 DEBUG 11860 --- [nio-8081-exec-9] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing request java.io .EOFException: null at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.fillReadBuffer( NioEndpoint.java:1347 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper.read( NioEndpoint.java:1234 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.fill( Http11InputBuffer.java:785 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine( Http11InputBuffer.java:348 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.http11.Http11Processor.service( Http11Processor.java:263 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProcessorLight.process( AbstractProcessorLight.java:63 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process( AbstractProtocol.java:926 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun( NioEndpoint.java:1791 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.net.SocketProcessorBase.run ( SocketProcessorBase.java:52 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1191 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:659 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run( TaskThread.java:61 ) ~[tomcat-embed-core-9.0.78.jar:9.0.78] at java.base/java.lang.Thread.run( Thread.java:834 ) ~[na:na] 2023-08-15 18:53:16.475 DEBUG 11860 --- [nio-8081-exec-9] o.apache.coyote.http11.Http11Processor : Socket: [ org.apache.tomcat.util.net .NioEndpoint$NioSocketWrapper@7e5a37d: org.apache.tomcat.util.net .NioChannel@72e2ee37:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8081 remote=/0:0:0:0:0:0:0:1:50696]], Status in: [OPEN_READ], State out: [CLOSED] itemName에서부터 null이 들어가서 오류가 나는 것 같은데 강사님 소스 그대로 붙여넣기 해도 동일한 오류가 발생합니다ㅠㅠ itemName 파라미터를 왜 못 가져올까요,,

  • spring
  • mvc
차노쓰 댓글 2 좋아요 0 조회수 464

FrontControllerServletV5 - handle 에러 표시

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요 ! 잘 따라하고 있다고 생각했는데, 아래 이미지와 같이 에러가 납니다. 오타 등이 있나 해서, 코드 다운 받아서, 전체 복사 붙여 넣기 해봤는데 해당 항목에 똑같은 에러가 뜹니다. 해당 파일의 전체 코드 드립니다. package hello.servlet.web.frontcontroller.v5; import hello.servlet.web.frontcontroller.ModelView; import hello.servlet.web.frontcontroller.MyView; import hello.servlet.web.frontcontroller.v3.controller.MemberFormControllerV3; import hello.servlet.web.frontcontroller.v3.controller.MemberListControllerV3; import hello.servlet.web.frontcontroller.v3.controller.MemberSaveControllerV3; import hello.servlet.web.frontcontroller.v5.adapter.ControllerV3HandlerAdapter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { // private Map<String, ControllerV4> controllerMap = new HashMap<>(); //비교 위해 작성 private final Map<String, Object> handlerMappingMap = new HashMap<>(); private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); public FrontControllerServletV5() { initHandlerMappingMap(); initHandlerAdapters(); } private void initHandlerMappingMap() { handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); } private void initHandlerAdapters() { handlerAdapters.add(new ControllerV3HandlerAdapter()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Object handler = getHandler(request); if (handler == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } MyHandlerAdapter adapter = getHandlerAdapter(handler); ModelView mv = adapter.handle(request, response, handler); String viewName = mv.getViewName(); //논리이름 ex)new-form MyView view = viewResolver(viewName); view.render(mv.getModel(), request, response); } private Object getHandler(HttpServletRequest request) { String requestURI = request.getRequestURI(); return handlerMappingMap.get(requestURI); } private MyHandlerAdapter getHandlerAdapter(Object handler) { for (MyHandlerAdapter adapter : handlerAdapters) { if(adapter.supports(handler)) { return adapter; } } throw new IllegalArgumentException("handler adapter를 찾을 수 없습니다. handler = " + handler); } private static MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } } 어떤 부분이 잘 못 되었는지 확인 좀 부탁 드립니다 늘 감사합니다 ♥

  • spring
  • mvc
배고픈 불가사리 댓글 2 좋아요 0 조회수 568

IncorrectResultSizeDataAccessException

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

'JdbcTemplate 적용1- 기본' 강의에서 findById()를 설명하실때, '결과가 없을경우'는 catch로 예외처리를 해주시는데 '둘 이상일 경우' IncorrectResultSizeDataAccessException에 대해서는 왜 catch문으로 예외처리를 하지 않는것인지 궁금합니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
jeong정재인 댓글 1 좋아요 0 조회수 481

섹션2 체크박스에서 @ModelAttribute 관련 질문입니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 섹션 2에서, 멀티 체크 박스를 만들 때 다음과 같은 메소드를 구현했습니다. @Slf4j @Controller @RequestMapping("/form/items") @RequiredArgsConstructor public class FormItemController { private final ItemRepository itemRepository; @ModelAttribute("regions") public Map<String, String> regions() { Map<String, String> regions = new LinkedHashMap<>(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); return regions; } //... } 위 메소드는 컨트롤러마다 호출되어 모델에 Attribute를 자동으로 추가해주고 있습니다. 근데, 이 코드를 구현하면서 다음과 같은 의문이 들었습니다. regions map에 들어가는 키-값 벨류는 비즈니스 로직에 해당하지 않나? 비즈니스 로직이면 컨트롤러보단 서비스에 구현되어야 하는 내용이 아닌가? 제가 MVC와 비즈니스 로직에 대한 개념이 아직 부족한건지, 혹은 예제니까 간단하게 컨트롤러에 구현하신건가요?

  • spring
  • mvc
이승주 댓글 1 좋아요 0 조회수 200

진짜 객체지향과 테스트하기 쉬운 코드를 위헤서는 jpa가 의미없는게 아닌가하는 생각이 들어요

미해결

Java/Spring 주니어 개발자를 위한 오답노트

이전에 혼자 ddd, 헥사고날 아키텍처를 공부하면서 느꼈던게 객체지향적인 코드 + 테스트하기 용이한 코드를 작성하기 위해서는 결국 domain layer와 persistence layer의 분리가 필수적인데 jpa entity와 domain entity를 완전히 분리했을 때 JPA가 mybatis나 jdbc template를 사용하는 것과 비교해 가지는 강점이 있는지 잘 모르겠습니다.. 그나마 jpa entity와 domain entity를 분리하지 않는다면 어떻게든 온몸 비틀기로 그나마 테스트하기 용이하고 객체지향스러운 코드를 작성해볼 수는 있지만 결국 복잡한 로직에서는 쿼리 때문에 문제가 생기고 ㅜ 지식 공유자님께서는 이 문제에 대해 어떻게 생각하시나요?

  • java
  • spring
  • 객체지향
  • 소프트웨어-테스트
euni 댓글 2 좋아요 2 조회수 1879

model.addAttribute 질문있어요

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @RequestMapping("/save") public String members(@RequestParam ("username") String username, @RequestParam ("age") int age, Model model) { Member member = new Member(username, age); System.out.println("member = " + member); memberRepository.save(member); ModelAndView mv = new ModelAndView("save-result"); model.addAttribute("username"); return "save-result"; 이 코드에서 model에 addAttribute메소드를 username만 넘기고 age를 넘기지 않은 이유가 궁금합니다

  • spring
  • mvc
묵국 댓글 1 좋아요 4 조회수 498

inputStream 처리 문제에 관하여 (파일 업로드가 제대로 안될 때)

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요 InputStream 자원을 닫지 않을시에 정상적으로 파일 업로드가 안되는 현상에 대해 도움 드립니다. 두가지 방법이 있는데요. InputStream 자원을 다 쓰고 회수하기 첫번째 for문 마지막에 inputStream.close 로 다 쓴 자원을 닫아줍니다. Try With resources문 사용 inputStream을 선언할 시 try (InputStream inputStream = part.getInputStream()) { ... } catch (IOExcetpion e) { ... } Try With resources문은 Java7 부터 지원하는 문법으로 자원을 자동으로 반납해주는 문법입니다. 자원을 실수없이 모두 반납할 수 있는 장점이 있습니다. try문 안에서 자원을 사용하시고, .close 같은 메소드를 생략해도 됩니다. 혹여나 이 수업에서 막히시는 분들을 위해 공유드려요

  • spring
  • mvc
임수철 댓글 1 좋아요 0 조회수 773

FrontControllerServletV1 의 404 Error

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] FrontControllerServletV1 class 의 controller 의 값이 Null 이 나옵니다. 이유는 모르겠습니다.

  • spring
  • mvc
Agile 댓글 2 좋아요 0 조회수 675

커넥션 풀의 세션 처리

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

안녕하세요 강의 잘 듣고있습니다. 커넥션 풀과 세션처리에 관해서 궁금증이 생겨 질문드립니다. 커넥션이 맺어질때 클라이언트와 DB 간에 세션이 생성되고 커넥션이 종료되면 세션도 닫힌다고 이해했습니다. 그렇다면 커넥션을 닫는게 아닌 풀에 반환할때도 세션이 닫히나요? 만약 닫힌다면 어떻게 세션을 다시 열 수 있는건가요?

  • spring
  • mvc
  • spring-jdbc
댓글 1 좋아요 0 조회수 1150

h2의 JdbcConnection 질문 있습니다.

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강사님 자료에서 h2 커넥션은 JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현하고있다. 라고 나와있습니다. 혹시, 1.JDBC 표준 커넥션 인터페이스인 Connection 인터페이스가 존재한다. 2.h2 Connection은 JDBC 표준 커넥션 인터페이스인 Connection 인터페이스를 상속 받아서 실질적인 기능을 구현한다. 3.즉, h2 Connection은 JDBC 표준 커넥션 인터페이스인 Connection 인터페이스의 구현체이다. 이런 순서로 이해하면 옳게 이해한 것이 맞나요? 항상 친절한 답변 감사합니다.

  • spring
  • mvc
  • spring-jdbc
blackhole124 댓글 1 좋아요 2 조회수 389

JDBC와 API 질문 있습니다.

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 라고 말씀하셨습니다. 근데 API의 정확한 의미가 무엇인가요? API는 애플리케이션 프로그램 인터페이스로 누군가가 코딩을 쉽게 할 수 있도록 만들어 놓은 것이라고 이해하고 있습니다. 예를 들어, 계산기 API를 만들어 놓으면 다른 사람들이 계산기 API를 가져와서 사용하면 계산기를 쉽게 구현하고 사용할 수 있는 것입니다. 근데 데이터 API처럼 공공 데이터를 사용할 때, 데이터베이스처럼 인증 키를 받아서 데이터를 가져올 수 있는 것도 API라고 하던대 어떤 설명이 맞는건가요? 2개다 옳은 설명인건가요? 아니면 데이터 API란 "해당 데이터를 가져오는 기능"을 가진 API라는 의미로 이해하면 되나요?

  • spring
  • mvc
  • spring-jdbc
blackhole124 댓글 2 좋아요 0 조회수 404

검증 순서

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

price에 "A"가 입력되면 먼저 바인딩에 실패하므로 beenValidation이 적용되지않는다 그럼 타입변환에러로 생긴 메세지는 beenvalidator가 아니라 누가"검증"한건가요?? 컨버터가 한건가요?

  • spring
  • mvc
jung 댓글 1 좋아요 0 조회수 393

인기 태그

인프런 TOP Writers

주간 인기글