묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
root-context.xml의 namespace 질문 있습니다.
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsdxsd옆에 버전을 쓸 때 mybatis-spring-1.2.xsd1.2라고 적으신 이유가 궁금합니다.mybatis-spring은 pom.xml에서 1.3.1 버전을 받은 것으로 기억합니다.그래서 저는 처음에 1.3.1.xsd로 했더니cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'resources'.라면서 선언을 안 해줬다고 에러가 나옵니다.(실행도 안 됩니다.)그런데 1.2.xsd로 하거나 버전을 적지 않으면 정상적으로 실행되네요.다른 이유가 있을까요...??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
addItemV1 오류 질문 드립니다
java: constructor Item in class hello.itemservice.domain.item.Item cannot be applied to given types; required: java.lang.String,java.lang.Integer,java.lang.Integer found: no arguments reason: actual and formal argument lists differ in length오류 내용으로 인자값을 찾을수 없다고 나오는데 @PostMapping("/add") public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model) { Item item = new Item(itemName, price, quantity); // item.setItemName(itemName); // item.setPrice(price); // item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item", item); return "basic/item"; 이런 식으로 직접 적어주면 실행은 가능한데set으로넣어줄땐 오류가 나네요 @PostMapping("/add") public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model) { Item item = new Item(); <-여기서 오류가 납니다 item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity);객체생성할때 맨 위 에러코드가 나면서 인자값을 찾을수가 없다고 뜨는데 제가 뭘 놓친게있을까요? 현재 addItemV1 set을 이용한 메서드만 오류가 납니다addItemV2addItemV3,4 정상 작동됩니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
5:27 이름에 SpringDataJpa만 있으면
빈에 자동으로 등록시켜준다는 건가요?스프링에서 이 인터페이스가 스프링데이터jpa인지 어떻게 알 수 있나요?어떤 방식으로 인식을 하는건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
여러 헤더를 조회 하는 방법에 대해서 학습 중에 이렇게 조회를 하는 이유가 있을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서 알려주신 내용 대로 코드를 통한 request, response 조회 외에도 크롬에서 관리자 페이지에서 조회 하는 방법도 학습 중에 알게 되었는데코드를 통해 조회 하면 어떤 장점이 있나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field 정리
checkbox의 th:field에 관하여..개인적으로 설명이 부족하다고 느껴서 혼자 요것저것해보고 내린 결론입니다 검증 부탁드립니다~ 기본형태<input type="checkbox" th:field="${A}" th:value="${B}"> th:field가 기본형th:value적용 필수(없으면 에러)th:field의 값이 th:value와 일치하면 checkedth:field가 리스트형th:value적용 필수(없으면 에러)리스트에 th:value가 있으면 checked 예외)th:field가 boolean 타입th:value 생략 가능 th:field의 값이 true이면 checked특이사항 : th:value가 뭐든 무시하고 true로 강제로 씀 => 이렇게 하는 이유는 선택 안 하면 어차피 서버로 true값이 안 넘어오기 때문th:value가 생략 가능한 이유 : 위에 두 유형과 다르게 th:filed와 th:value를 비교하는 것이 아닌 th:filed의 true/false값 만을 보고 checked를 판별하기 때문임자세한 내용은 밑에https://www.inflearn.com/questions/255425/%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%86%8C%EC%8A%A4%EB%B3%B4%EA%B8%B0%EC%97%90%EC%84%9C-true-%EA%B0%92-%EC%A7%88%EB%AC%B8)
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
파일 업로드 부분에서 이녀석이 계속 에러가 뜨네요
java.lang.Error: Unresolved compilation problems: The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files The method parseRequest(HttpServletRequest) from the type ServletFileUpload refers to the missing type HttpServletRequest톰캣 10버전을 쓰고 있는데 자꾸 javax로 인식하고 있는 것 같습니다.....임포트 부분을 보면 jakarta로 받고 있는데 왜 이런 에러가 생기는지 알 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.set get 오류 해결하려고 import 바꾸니 이렇게 오류가 생기네요..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
시간추출오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. https://www.inflearn.com/course/lecture?courseSlug=스프링-입문-스프링부트&unitId=49600&category=questionDetail&tab=community&q=815548
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html 부분 오류 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]11행 부분에서 자꾸 오류가 뜨네요 ...
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ModelAttribute vs @RequestPart
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]파일 업로드 방법으로 @ModelAttribute로 이미지와 다른 데이터(글 등)들을 Multipart form data 형식으로한꺼번에 보내는 방식과 @RequestPart 두개를 써서 이미지와 다른 데이터들을 구분하여 JSON으로 보내는 방식이 있다고 알고 있습니다. 각각의 장단점이 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody의 역할
@Controller public class RequestParamController {}클래스 위에 @Controller가 리턴값을 뷰 리졸버로 넘기기때문에 @ResponseBody를 써서 응답메시지에 바로 보낸다 라고 이해하면 될까요??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@RestController와 @Valid 사용시 리다이렉팅 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님. 강의 잘 듣고 있습니다. 제가 토이프로젝트를 만들고 있는데 궁금한 점이 생겨 질문 남깁니다.강의에서는 @Controller와 BindingResult를 사용해서 hasError 메서드를 통해서 에러가 있으면 다시 입력 폼으로 리다이렉트를 해주었는데요. @RestController와 BeanValidtion의 @Valid를 사용할 때에도 BindingResult를 사용하는지, 사용한다면 BindingResult로 리다이렉팅을 해줘야 하는지 궁금합니다. 이해에 도움이 될까해서 예시 코드도 함계 남깁니다.추가로 ResponseEntity의 사용법이 저게 맞는지도 궁금합니다. 실무에서도 사용을 하시는지와 사용하신다면 어떻게 사용하시는지 궁금합니다.항상 좋은 강의 감사드리고, 다음에 예정된 강의도 항상 기다리고 있습니다. 응원하겠습니다! 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이번 강의부분은 코드작성 안해도되나요?
듣기만 하라고 하셨는데코드 안따라가도 뒤에 jpa영상에서 문제없나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
테스트코드 소스입니다.
@AfterEach를 주석처리해서 @Test가 끝날 때 마다 초기화를 안하도록 코드를 바꾸고 20번 가량 테스트를 돌려봤는데 왜 실패할 때가 없는 건가요 ?? 영한님 말대로 테스트 순서는 보장하지 않기 때문에 save() 메서드가 먼저 호출되고 findAll 메서드가 호출되면 result.size()는 3이 되기 때문에 실패하는 테스트 케이스가 있어야하지 않나요 ?package hello.servlet.domain; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; class MemberRepositoryTest { MemberRepository memberRepository = MemberRepository.getInstance(); @AfterEach void afterEach() { // memberRepository.clearStore(); } @Test void save() { Member member = new Member("hello", 20); Member savedMember = memberRepository.save(member); Member findMember = memberRepository.findById(savedMember.getId()); assertThat(findMember).isEqualTo(savedMember); } @Test void findAll() { Member member1 = new Member("member1", 20); Member member2 = new Member("member2", 30); memberRepository.save(member1); memberRepository.save(member2); List<Member> all = memberRepository.findAll(); assertThat(all.size()).isEqualTo(2); assertThat(all).contains(member1, member2); } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
"org.springframework.dao.InvalidDataAccessApiUsageException: Table name is required" 에러가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의 듣다가 MemberServiceIntegrationTest를 실행하면 아래 에러가 발생하고 있어서요. 어떻게 해결하면 좋을까요?? MemberServiceIntegrationTest 내용입니다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; /*MemberService memberService = new MemberService(); MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();*/ @Autowired MemberRepository memoryMemberRepository; //각 테스트당 데이터를 삭제하려고 저장된 데이터를 날리기 위해 MemoryMemberRepository를 생성하고 아래 afterEach로 데이터를 날린다. @Test void 회원가입() { //given 데이터를 기반으로 검증을 한다. Member member = new Member(); member.setName("spring"); //when 이걸 검증하는구나 Long saveId = memberService.join(member); // join에 member을 넣으면 저장한 saveId가 튀어 나오게 //then 여기가 검증하는 곳 Member findMember = memberService.findOne(saveId).get(); // 저장된 member를 찾아서 findMember에 저장하고 Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); // member에 저장된 것과 findMember에 저장된 것이 같은지 검증 } @Test public void 중복_회원_예외() { //given Member member = new Member(); member.setName("spring"); Member member1 = new Member(); member1.setName("spring"); //when memberService.join(member); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member1));// 아래처럼 try, catch를 사용하면 좋지만 번거롭다. asserThrows를 사용하면 쉽게 사용 가능하다. //then Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다. ");// 메시지를 검증하는 것 /*memberService.join(member); try{ memberService.join(member1); fail(); } catch (IllegalStateException e){ Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다. "); } */ //then } @Test void findMembers() { } @Test void findOne() { } } Table name is required org.springframework.dao.InvalidDataAccessApiUsageException: Table name is required at app//org.springframework.jdbc.core.simple.AbstractJdbcInsert.compile(AbstractJdbcInsert.java:253) at app//org.springframework.jdbc.core.simple.AbstractJdbcInsert.checkCompiled(AbstractJdbcInsert.java:309) at app//org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecuteAndReturnKey(AbstractJdbcInsert.java:380) at app//org.springframework.jdbc.core.simple.SimpleJdbcInsert.executeAndReturnKey(SimpleJdbcInsert.java:132) at app//hello.hellospring.repository.JdbcTemplateMemberRepository.save(JdbcTemplateMemberRepository.java:35) at app//hello.hellospring.service.MemberService.join(MemberService.java:36) at app//hello.hellospring.service.MemberServiceIntegrationTest.회원가입(MemberServiceIntegrationTest.java:35) at java.base@11.0.18/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.18/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.18/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.18/java.lang.reflect.Method.invoke(Method.java:566) at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at java.base@11.0.18/java.util.ArrayList.forEach(ArrayList.java:1541) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at java.base@11.0.18/java.util.ArrayList.forEach(ArrayList.java:1541) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62) at java.base@11.0.18/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.18/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.18/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.18/java.lang.reflect.Method.invoke(Method.java:566) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) at com.sun.proxy.$Proxy2.stop(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
백엔드가 html을 타임리프를 사용해여 프론트엔드에게 보낸다면 프론트는 어떤 식으로 개발을 진행하는지 궁금합니다.
[질문 내용]안녕하세요 강의를 듣다가 문뜩 궁금한 부분이 있어 질문글을 작성합니다. 앞쪽 강의에서 이제 백엔드가 html을 동적으로 만들어서 프론트에게 페이지를 전달한다 라고 하셨습니다 그리고 이때 html을 동적으로 만들기 위해 타임리프를 주로 사용한다고 하셨습니다. 그러면 만약에 프론트와 백엔드가 협업을 하고 백엔드가 타임리프를 사용해서 html을 동적으로 만든 후 프론트에게 전송을 하면 프론트는 할 일이 무엇인가요? 백엔드가 타임리프를 사용해여 html을 만든다면 프론트는 어떤 역할을 수행해야 하는지 궁금합니다.감사합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
whitelabel error page
http://localhost:8080/front-controller/v1/members/new-form 이 들어가면 whitelabel error page가 뜨는데 jsp,servlet-mvc할 때까지는 잘 됐었는데 frontcontroller에서 안 되는 것 보니 어딘가 잘못된 것 같은데 어디인지를 모르겠습니다. servlet-mvc에서 사용한 똑같은 view페이지인 jsp파일을 사용하는데 갑자기 왜 안될까요??FrontControllerServletV1package hello.servlet.web.frontcontroller.v1; import hello.servlet.web.frontcontroller.v1.controller.MemberFormControllerV1; import hello.servlet.web.frontcontroller.v1.controller.MemberListControllerV1; import hello.servlet.web.frontcontroller.v1.controller.MemberSaveControllerV1; 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.HashMap; import java.util.Map; @WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/vi/*") public class FrontControllerServletV1 extends HttpServlet { private Map<String, ControllerV1> controllerMap = new HashMap<>(); public FrontControllerServletV1() { controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1()); controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1()); controllerMap.put("/front-controller/v1/members", new MemberListControllerV1()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("FrontControllerServletV1.service"); String requestURI = request.getRequestURI(); ControllerV1 controller = controllerMap.get(requestURI); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } controller.process(request, response); } }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]repository 폴더에 JdbeMemberRepository를 만든 후 강의록에 있는 코드를 붙여넣어 실행을 했는데 다음과 같은 에러가 발생하여 실행이 되지 않습니다. 터미널로 h2.sh는 실행시켰습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
setid getid 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. import를 어떻게 바꿔야 오류가 안뜨나요ㅠㅠ
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
11분쯤 에러
감사합니다 항상 강의 잘 듣고 있습니다.강의 11분 쯤에 서버 구동하고 http://localhost:8080/front-controller/vi/hello 들어간 다음에 인텔리제이에서 System.out.println("FrontControllerServletV1.service");이걸 통해서 잘 출력됐는지 확인을 하는데저렇게 출력은 잘 나오는데 그 밑으로 에러같이 Error parsing HTTP request header, java.io.EOFException: null 이런 글귀들이 나오는데 어떻게 해야할까요? - - 밑으로 뜨는 구문들 --2023-03-23 21:06:55.426 DEBUG 7808 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [703]2023-03-23 21:06:55.426 DEBUG 7808 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Received []2023-03-23 21:06:55.427 DEBUG 7808 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@ab8072c:org.apache.tomcat.util.net.NioChannel@63b11b0c:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:50306]], Status in: [OPEN_READ], State out: [OPEN]2023-03-23 21:07:03.863 DEBUG 7808 --- [nio-8080-exec-2] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [703]2023-03-23 21:07:03.864 DEBUG 7808 --- [nio-8080-exec-3] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0]2023-03-23 21:07:03.881 DEBUG 7808 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request headerjava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1340) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1227) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]2023-03-23 21:07:03.882 DEBUG 7808 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request headerjava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1340) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1227) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]2023-03-23 21:07:03.885 DEBUG 7808 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing requestjava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1340) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1227) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]2023-03-23 21:07:03.885 DEBUG 7808 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing requestjava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1340) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1227) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:360) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]2023-03-23 21:07:03.886 DEBUG 7808 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@35f19c10:org.apache.tomcat.util.net.NioChannel@17e39e0c:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:50307]], Status in: [OPEN_READ], State out: [CLOSED]2023-03-23 21:07:03.886 DEBUG 7808 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@ab8072c:org.apache.tomcat.util.net.NioChannel@63b11b0c:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:50306]], Status in: [OPEN_READ], State out: [CLOSED]