묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
공부법 질문드립니다
안녕하세요 공부방법 질문드립니다! 저는 비전공자이고 자바만 공부했는데요 자바 배웠으면 프레임워크인 스프링을 공부해야 된다고 해서 주변 사람들에게 추천을 받아 이 강의를 듣게 되었습니다. 김영한 강사님의 커리큘럼 그대로 따라가려고 했는데요 입문 강의임에도 불구하고 생각했던것 보다 어렵고 마음과 다르게 진도 나가기가 힘드네요... 강의를 들으면서 완전 아예 이해가 전혀 안된다! 이건 아닌데요 그래도 많이 어렵습니다. 어려워서 스프링공부법 관련해서 인터넷에 계속 검색하다 보니 스프링 공부 전 jsp를 먼저 공부하는게 좋다는 말들이 있는데요 저 혼자 jsp를 따로 공부한 후에 지금 이 강의 들으면서 김영한강사님의 커리큘럼을 따라가는게 맞는건가요? jsp를 먼저 공부하고 와야 할까요? 공부법 조언해주시면 감사하겠습니다 !
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Dispatcher Servlet은 어디 있나요 ?
강의를 듣던 중 질문드립니다. SpringMvc패턴에서 v1에서 각각의 클래스에 @Controller 애노테이션으로 등록만 해주었는데 FrontController 역할을 하는 Dispatcher Servlet의 클래스? 등은 따로 존재하지 않는건가요? 이번 소스가 정확히 어떤식으로 돌아가는지 잘 이해가 가지 않습니다 ㅠㅠ Http의 parameter를 입력 받고 스프링 빈에 등록되어 있는 핸들러 @RequestMapping 으로 찾은 다음 따로 무언가 작성해주지 않더라도 스프링 내부에서 자동으로 어댑터를 찾아서 핸들러를 적용시키고 뷰 리졸버까지 자동으로 되는건가요? ㅠㅠ 구조가 잘 이해가 가지 않습니다 김영한 선생님께서 만든건 Controller 클래스와 .jsp의 뷰밖에 없는데 스프링이 어떻게 알아서 다 하는지... 헷갈립니다 그리고 제가 컨트롤러의 리턴값을 무엇을 반환할지도 모르는데 만약 스프링안에 등록된 어댑터로 찾을 수 없으면 에러가 발생하나요 ?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 생성이 안됩니다 ㅠㅠ
maven으로 시작했습니다. 제가 진행하는 프로젝트가 maven이라 그렇게 배워보려고요.. 그런데 테이블 생성이 잘 안됩니다 ㅠㅠ member까지는 어떻게 생성을 했는데 그 이후 테이블 생성이 console에도 나오지 않고, h2에도 뜨지않아요. 또 member에 insert도 되지않습니다. 테이블 안에 내용이 들어가질 않는데 어떻게 해야할까요 ㅠㅠ
-
해결됨스프링 핵심 원리 - 기본편
MemberService 인터페이스 구현 이유
영한선생님 궁금한게 있습니다. MemberRepository는 메모리에도 저장할 수 있고, 디비에도 저장할 수 있기에 인터페이스로 구현 후에 구체화 하여 클래스를 구현하는 것 까지는 이해가 되는데 MemberService는 왜 따로 인터페이스를 구현했고 , MemberserviceImpl이라는 구현 클래스를 만들었는지 알려 주시면 감사하겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 기본 생성자를 protected로 했을 때 테스트 질문
선생님 안녕하세요, 처음이라 모든 것이 낯설지만 양질의 강의 덕에 순조롭게 학습을 진행하고 있습니다. 감사합니다 ^^ 다름이 아니라, 앞 강의 (엔티티 설계 주의점) 및 강의자료(p29)에서 Entity나 Embedded type 생성자를 protected로 하는 것이 더욱 안전하다고 말씀해주셨습니다. 그래서 Entity의 생성자도 protected로 설정하고 진행해보았습니다. 그런데 테스트를 하려고 보니 테스트용 Entity 객체를 생성할 수 없는 문제가 생겨서 일단 default 생성자를 public으로 하고 계속하였습니다. 혹시 protected 생성자를 사용하면 테스트하는 방법이 있는지요, 아니면 이러한 문제로 인해 Entity는 public 생성자를 사용해야 하는지요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
produces=MediaType
선생님 안녕하세요. MediaType 설정 관련해서 질문이 있습니다. produces 속성을 MediaType.APPLICATION_JSON_VALUE로 설정하면 에러 바디도 JSON 데이터로 만들어서 반환하는 걸 이번 강의에서 배웠고 여기에서 accept 헤더가 중요한 역할을 하는 걸 알았습니다. 그런데 여기서 궁금한 것이 제가 테스트를 해보니, accept=*/*로 설정하면 왜 application/json 방식이 더 우선순위를 갖는 걸까요? ErrorPageContriol에서 produces 값을 더 구체적으로 설정해줘서 처음에는 application/json 방식이 (accept=*/* 로 설정할 경우) 더 우선권을 갖는 거라고 생각했는데, 처음에 만든 produces 값 설정을 안 한 컨트롤러 메서드를 produces=MediaType.TEXT_HTML_VALUE로 변경하고 html과 json 방식 메서드 두 개가 있는 상황에서 테스트해도 여전히 json 형식이 더 우선권을 갖는데 왜 그런지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Validation (JSR-303 validation with Hibernate validator) 모듈 추가
제목 그대로 스프링 부트 스타터 설정에서 저 모듈을 추가하라는 말씀이 어떻게 해야하는 건지 잘 모르겠네요..코드를 추가하는건가요? 혹시 스프링부트 스타터에서 추가하는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴과 용어에대해 질문이있습니다
안녕하세요, 선생님 로드맵을 쭉 따라가며 스프링 열공중인 취준생입니다. 강의를 듣기전 얕게나마 MVC에대해 공부를 했었는데 강의를 들으면서 알고있던 개념과 다른점이 생겨서 질문드립니다. MVC패턴이 유지보수를 편하게하고 협업개발을 원할히 하기위해 웹을 세부분으로 나눈거라는점은 알겠는데 정작 웹개발 프로젝트를 하게되면 DAO(Repository)와 DTO(Domain) 그리고 Service라는 구체적인 객체들을 보게되더군요. 선생님 강의에서는 서비스와 dao를 별도로 구분하고 모델을 dto역할로 제한해서 설명하셨는데 어떤 책에서는 dao dto 서비스 셋을 모두 뭉텅그려 모델이라고 말하는 곳도 있더라구요 용어를 정확히 어떻게 정리를 해야할지 도움주셨으면 합니다 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
BookForm 생성자
BookForm 을 setter 대신 생성자로 했는데, int price 와 int stockQuantity 에서 missmatch Error 가 떴어요. CreateForm 도 그렇고 UpdateFrom 도 그렇고 빈 폼을 넘겨줄때 java 기본값이 0 인데 참조변수 기본값 null 이 들어가서 에러가 뜨는것 같은데 맞나요.? 그래서 아래와 같이 @nullable을 넣으니까 해결되긴 했는데, 이렇게 사용해도 다른 사이드에 악영향을 끼칠 가능성은 없을까요..? 답변 항상 감사합니다. public BookForm(Long id,String name, @Nullable int price,@Nullable int stockQuantity, String author, String isbn) { this.id = id; this.name = name; this.price = price; this.stockQuantity = stockQuantity; this.author = author; this.isbn = isbn;}
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext 질문드립니다
안녕하세요 MVC 강의를 보다가 복습하러 왔는데 오늘 하루종일 검색하고 찾아봐도 이해가 가지 않아서 질문드립니다 핵심원리 강의에서 ApplicationContext가 스프링 컨테이너라고 설명을 해 주셨고 이후 강의에서 ApplicationContext ac =new AnnotationConfigApplicationContext(클래스명); 이 문장을 사용해 스프링 컨테이너 생성 후 매개변수값의 클래스에 있는 에노테이션 기반의 빈을 등록하면 싱글톤이나 의존관계 주입 관리를 할 수 있는것으로 이해하였는데요, 앞선 입문 강의나 이후 mvc강의에서는 해당 스프링 컨테이너 생성문장 없이 @Component나 Controller등의 에노테이션만 붙이면 스프링 컨테이너 없이 빈이 등록되는데 여기서 이해가 되지 않습니다. 톰캣 서버의 서블릿 컨테이너가 해당 역할을 하는것인가요..? 어디서 잘못 이해한것인지 모르겠습니다 ㅠㅠ..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
properties 말고 yml에는 이렇게 하는게 맞을까요?
안녕하세요 선생님! 강의를 듣고 제 프로젝트에 메세지를 적용시켜보고 있습니다. 제 강의는 설정파일이 .yml이라서 yml형식으로 설정을 따라해보았습니다. application.yml spring: ...(생략) messages: basename: messages ...(생략) messages.yml label: search: siteName: "사이트 이름111" lectureName: "강의 이름" teacherName: "강의자 이름" starRating: "별 점"...(생략) 이렇게 yml파일을 구성한뒤 html에서 똑같이 th:text=#{label.search.siteName} 를 해보았는데 적용이안됩니다. 그래서 구글링을 좀 해보니 yml messages을 properties처럼 사용하는 라이브러리를 찾아서 적용해보았습니다. build.gradle implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1' MessageConfiguration package dongho.classflix.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.MessageSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ResourceBundleMessageSource;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MessageConfiguration implements WebMvcConfigurer { @Bean public MessageSource messageSource( @Value("${spring.messages.basename}") String basename, @Value("${spring.messages.encoding}") String encoding ){ YamlMessageSource ms = new YamlMessageSource(); ms.setBasename(basename); ms.setDefaultEncoding(encoding); ms.setAlwaysUseMessageFormat(true); ms.setUseCodeAsDefaultMessage(true); ms.setFallbackToSystemLocale(true); return ms; } private static class YamlMessageSource extends ResourceBundleMessageSource{ }} 그래도 적용이 안되었습니다. messages는 보통 properties로 사용을 한다고 하기에, 일단 지금은 application.yml와 messages.properties를 사용하여 해결한 상태입니다. 질문정리 1. messages.yml을 사용하려면 어떻게 해야하나요? 2. 그냥 application.yml에 messages.properties를 사용해도 무방할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JpaRepository는 사용 안하시나요?
학교 선배한테 배울때는 JPARepository 인터페이스를 상속해서 사용 했었는데 이거랑 다른건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단위 테스트를 하려면 어떻게 해야하나요?
안녕하세요. 강의 중 단위테스트가 중요하다고 하셔서 진행하고싶은데 방향성이 궁금해서 질문드립니다. 1) Repository를 jpa 사용하지 않고 Map을 이용하던가 해서 순수 java로 만든 후 service에 의존시켜서 진행하는 것인가요?? 2) 그리고 실무에서 test code를 짤 때 controller, service, repository에 대해서 모두 다 짜는지... 아니면 화면단 보다는 비즈니스 로직이 있는 부분 위주로 짜는지도 궁금합니다.
-
해결됨스프링 부트 개념과 활용
TestPropertySource질문입니다.
안녕하세요 강사님 언제나 좋은 강의 감사드립니다. 강의 내용을 따라서 열심히 따라 하고는 있는데, TestPropertySources로 우선순위를 먼저 받게끔 작업을 했는데 테스트 코드가 통과를 해서 혹시 뭐가 잘못 됐는지 여쭤보고 싶어서 질문을 남깁니다. 위의 코드를 보면 기존 application.yml의 server.port가 7443이고, test.yml의 설정이 6663인데, 해당 코드를 돌려보니 application.yml의 설정값을 우선순위로 읽어들여서 테스트 코드가 성공하였습니다. 혹시 현재 기준으로 우선순위가 변경이 된건지, 아니면 제가 무슨 실수를 한 것인지 한번만 봐 주시면 감사드리겠습니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 로그인 인증 관련 질문
Rest api에서 세션 인증 방식을 사용한다고 할때, 이와 관련해서 몇몇 질문사항이 있습니다. 1. 세션의 저장 - 별도의 세션 레포지토리를 구성하고, 클라이언트의 요청이 올때 세션 레포지토리로부터 유저의 정보 조회해야 하는지 - 톰켓이 세션 저장소를 보유? 해서 request.getSession & session.getAttribute 사용 2. 로그인 당시 응답 - 클라이언트한테 response에 세션 아이디를 같이 넣어서 보내줘야 하는지 - 그럴 필요없이 톰켓이 세션 내부 저장소를 가져, 항상 세션 아이디를 보내주는지 postman으로 테스트 해볼때는 sessionId를 쿠키(postman이 가지고있는?)에 저장해서 보관하고이 값을 갱신해주기 전까지는 같은 값을 보유하고 있는데 세션을 별도로 저장하고 응답으로 주어야 하는지, 그럴 필요가 없는지 헷갈려서 질문드립니다. 3. 예를 들어 유저가 상품을 구매하는 request를 rest api를 통해 날리면, 백엔드와 프론트엔드가 통신할때 userId 혹은 username으로 회원의 정보를 보내는게 아니라,sessionId(인증에 필요한 정보, 토큰이던지)와 상품 정보를 보내주고,백엔드에서는 세션 id를 통해 세션 저장소에 저장되어있는 유저의 정보를 얻고, 이를 기반으로 상품 구매 처리를 해야 할 것 같은데,이 경우 강의에서 말씀하신대로 여러 유저의 요청이 많은 경우, 서버에 부하가 오는 것 같아 별로인 것 같기도합니다. 그래서 어떻게 처리하는게 맞는지 더 헷갈리는 것 같습니다.이렇게 처리하는 방식으로 하는게 맞는 지 ( 세션이나 jwt 토큰을 사용할 경우) 궁금 합니다. - 이게 맞다면, 모든 컨트롤러에서 매번 세션 레포지토리를 조회해야하는데 번거로운걸 보니 맞는 방법이 아닌것 같고요.. - Config에 bean으로 세션 체크하는 로직을 등록해서 사용하는 방법을 채택할수도 있는것 같고, 리턴값으로 적어도 회원의 아이디는 줘야 하니 4. 또한 jwt 토큰 방식으도 있어스프링 시큐리티를 사용하지 않고 구현을 해보고 싶은데 이 경우에는 jwt 토큰 레포지토리를 구성해서 해보는게 맞는지 궁금합니다.정확한 답이 아니라, 어떤걸 찾아보면되는지 힌트 방식이여도 좋으니 알려주시면 감사드리겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 질문드려요
jpashop으로 하면 파일도 만들어지고 연결성공하는데요 여기까지오면 연결이 되지않고 아래와 같은 오류가 뜹니다 뭐가 문제일까요 영상에서 했던 것과 다르게 실시햇던 것은 다운은 받았으나, 터미널로 진행하는 부분을 정확하게 인지하지 못해서 주소창에 localhost:9092(제포트)/h2-console 로 접근해서 jdbc:h2:~/jpashop 연결했습니다. 추가 ++) 위와 같이 실행해서 h2 페이지를 연 후에도 같은 오류가 나더라고요. 전에 다른 강의에서 썼던 db입니다. 해당 데이터 베이스로는 잘 접속이 되는데 이걸로 application에 url설정 넣고 사용해도 되는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴에서 Model 의 정의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(http://bit.ly/3fX6ygx)을 먼저 확인해주세요. 3. 질문 잘하기 메뉴얼(http://bit.ly/2UfeqCG)을 먼저 읽어주세요. 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 항상 강의 너무 잘 듣고 있습니다. 강의를 듣고 Servlet -JSP를 이용한 MVC 패턴에서 Controller = Servlet View = JSP Model = Request(Attribute) 라고 이해했는데요, 이 때 Controller 와 View 가 서로 Model(Attribute) 을 통해 데이터를 주고받는다고 이해했습니다. 그리고 이 Controller 를 좀 더 객체지향적으로 만들기 위해 Service 와 Repository로 레이어를 나누어 역할을 분리한다고 이해했는데요. 그런데 최근 후배에게 MVC 개념을 설명해주다가 이상한 걸 발견했습니다. 저희 회사 신입사원 교재에 MVC 패턴의 정의가 이렇게 나와있는 겁니다. - Model : 비즈니스 로직(클라이언트 요청에 대한 업무 처리) 및 데이터 담당 >> 비즈니스 로직 = business service(biz) + data access object(dao) 이걸 보면 Service 와 Repository는 Model 에 해당하는 개념처럼 보입니다. 또한 해당 교재에서는 이처럼 비즈니스 로직을 Controller(Servlet)와 분리하는 것이 곧 MVC 패턴이라고 설명하고 있는데요, 제가 이해하는 "Controller(Servlet)와 View(Jsp) 를 분리하고 Model(Attribute)로 데이터를 전달하는 것이 곧 MVC 패턴이다" 라는 개념과 사뭇 다른 것 같습니다. 제가 뭔가 잘못 이해하고 있는 걸까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2.bat 실행 관련 질문입니다
안녕하세요,, bin 에서 h2.bat를 실행하거나 cmd에서 h2.bat 후 엔터를 해도 서버모드로 접속이 안됩니다,, 어떻게 해야 할까요..?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
BookForm @NotEmpty관련 질문
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] memberController 부분은 @NotEmpty가 잘 동작 하였고 itemController 에서 item을 생성할 때에도 member와 동일하게 @Valid 체크를 해주려고 했습니다. 그런데 오류가 발생하는데 어느부분에서 문제인지 잘 모르겠습니다 ㅠ Field error in object 'bookForm' on field 'name': rejected value []; codes [NotBlank.bookForm.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [bookForm.name,name]; arguments []; default message [name]]; default message [공백이면 안됩니다.] 2021-08-24 16:08:30.870 ERROR 5072 --- [nio-8080-exec-9] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-9] Exception processing template "items/createItemForm": An error happened during template parsing (template: "class path resource [templates/items/createItemForm.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/items/createItemForm.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1393) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1138) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1077) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.4.jar:5.3.4] at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.43.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4] at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.43.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "#fields.hasErrors('name')" (template: "items/createItemForm" - line 17, col 20) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parse(MarkupParser.java:257) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] ... 48 common frames omitted Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#fields.hasErrors('name')" (template: "items/createItemForm" - line 17, col 20) at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.ConditionalExpression.executeConditional(ConditionalExpression.java:209) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.ComplexExpression.executeComplex(ComplexExpression.java:77) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:112) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleStandaloneElementEnd(TemplateHandlerAdapterMarkupHandler.java:260) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:256) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleStandaloneElementEnd(OutputExpressionInlinePreProcessorHandler.java:169) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:104) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.attoparser.HtmlVoidElement.handleOpenElementEnd(HtmlVoidElement.java:92) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] ... 50 common frames omitted Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'form' available as request attribute at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.checkErrors(FieldUtils.java:212) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.hasErrors(FieldUtils.java:71) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.expression.Fields.hasErrors(Fields.java:58) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at jdk.internal.reflect.GeneratedMethodAccessor58.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:129) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:112) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:55) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:387) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:92) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337) ~[spring-expression-5.3.4.jar:5.3.4] at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] ... 73 common frames omitted 2021-08-24 16:08:30.871 ERROR 5072 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/items/createItemForm.html]")] with root cause java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'form' available as request attribute at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.checkErrors(FieldUtils.java:212) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.util.FieldUtils.hasErrors(FieldUtils.java:71) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.expression.Fields.hasErrors(Fields.java:58) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at jdk.internal.reflect.GeneratedMethodAccessor58.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:129) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:112) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:55) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:387) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:92) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) ~[spring-expression-5.3.4.jar:5.3.4] at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337) ~[spring-expression-5.3.4.jar:5.3.4] at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.ConditionalExpression.executeConditional(ConditionalExpression.java:209) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.ComplexExpression.executeComplex(ComplexExpression.java:77) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:112) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleStandaloneElementEnd(TemplateHandlerAdapterMarkupHandler.java:260) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:256) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleStandaloneElementEnd(OutputExpressionInlinePreProcessorHandler.java:169) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleStandaloneElementEnd(InlinedOutputExpressionMarkupHandler.java:104) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.attoparser.HtmlVoidElement.handleOpenElementEnd(HtmlVoidElement.java:92) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.attoparser.MarkupParser.parse(MarkupParser.java:257) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) ~[thymeleaf-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) ~[thymeleaf-spring5-3.0.12.RELEASE.jar:3.0.12.RELEASE] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1393) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1138) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1077) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.4.jar:5.3.4] at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.43.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4] at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.43.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar:5.3.4] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.43.jar:9.0.43] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4:07 오류나는 부분
안녕하세요 ! 4:07 쯤에 선생님은 오류나시는데 저는 오류가 안 나서 어디가 문제인지 잘 모르겠어서 질문드립니다 ㅜㅜ 죄송하지만 하나 더 여쭤볼게 있습니다! ctrl + shift + enter 이 코드 자동완성(; 붙이기)인 것으로 알고 있는데 어느 순간 단축키가 안 먹힙니다ㅜ 다른 단축키는 잘 되는데 제가 뭘 잘못 만진건가요?