[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] spring에서 지원하는 서블렛 세션을 사용하면 클라이언트에 JSESSIONID가 쿠키로 전달된다고 알고 있습니다. 질문 1. RESTful API 설계 시 유저의 마이페이지 관련 정보를 가져오는 백엔드 api path는 '/users/{userid}'가 올바른가요, '/profile'이 올바른가요? 혹은 각기 다른 api path를 통해 뷰에 해당하는 프론트엔드에서 조립해야 하나요? 질문 2. 위의 질문 대답이 전자라면, 클라이언트가 마이페이지 버튼을 눌렀을 때 클라이언트에게 userid가 없고 JSESSIONID만 있는 상태인데, userid를 가져오는 과정을 거친 후에 '/users/{userid}'를 실행해야 하나요? 혹은 로그인 시 userid를 쿠키 등으로 클라이언트에게 전달하여 클라이언트가 갖고 있도록 해야 하나요? 실무에서는 어떤 방식을 사용하는지 궁금합니다. 질문 3. 같은 맥락으로 회원탈퇴 기능의 api를 '/users/{userid}'라고 할 때, JSESSIONID만 가지고 있는 클라이언트가 해당 api를 사용하기 위해서는 userid를 가져오는 작업을 수행해야 하나요, 아니면 다른 방법이나 접근방식이 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 메시지 부분 실습하는데 한글이 계속 깨집니다.. 커뮤니티에서 같은 오류 나신 분 해결방안보고 따라해봤는데도 계속 이 상태더라고요.. 혹시 다른 문제 있는 부분 알려주실 수 있으실까요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. webapp 카테고리에 index.html basic.html 만든 후 ServletApplication 실행하면 ClassNotFoundException 에러가 발생합니다. "C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 232.7754.73\lib\idea_rt.jar=62663:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 232.7754.73\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\USER\Desktop\servlet\out\production\classes;C:\Users\USER\Desktop\servlet\out\production\resources;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.1.2\30b824817e764a5a5a1e9fb46e7ace40bcfa3185\spring-boot-starter-web-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.1.2\c48d521879dbbcebe1a99f47257612968e022f5b\spring-boot-starter-json-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.1.2\c09a48df6fbc2b07b7aef1256b45260a3478b49f\spring-boot-starter-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.0.11\892b4a63b5d930c2c43058c6db0c2c65401fb078\spring-webmvc-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.0.11\c32a7bf6b88b83bac6aa63866fcf208892640446\spring-web-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.15.2\30d16ec2aef6d8094c5e2dce1d95034ca8b6cb42\jackson-datatype-jsr310-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.15.2\75f8d2788db20f6c587c7a19e94fb6248c314241\jackson-module-parameter-names-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.15.2\66a50e089cfd2f93896b9b6f7a734cea7bcf2f31\jackson-datatype-jdk8-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.15.2\9353b021f10c307c00328f52090de2bdb4b6ff9c\jackson-databind-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.1.2\ea294976f925441fc1d5a5414d5d31717f06aa3c\spring-boot-autoconfigure-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.1.2\3cf070561716277ec91ebadc07362dd0b4a9f63f\spring-boot-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.1.2\4e47bd132fdd0d60ad57d70bdc99198b182166ee\spring-boot-starter-logging-3.1.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.0.11\87834b5cf95c6fa28f5bdf8a85e0daf0bff918a8\spring-core-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.33\2cd0a87ff7df953f810c344bdf2fe3340b954c69\snakeyaml-1.33.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.0.11\a7b10f3d3c1492bfc4e6d7c966cd2e21f4d441f5\spring-context-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.0.11\15b85c825558fadb85e3c77779d7225ce7e4a7bc\spring-aop-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.0.11\8513efc6e94b407b5cd85f69eeec511f1ef34164\spring-beans-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.0.11\1d0940120a275719c3988c592068f4acf807fe59\spring-expression-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.11.2\704e145c4801320b4c7abf6c1a5b000155b069db\micrometer-observation-1.11.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.15.2\4724a65ac8e8d156a24898d50fd5dbd3642870b8\jackson-annotations-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.15.2\a6fe1836469a69b3ff66037c324d75fc66ef137c\jackson-core-2.15.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.4.8\f00ba91d993e4d14301b11968d3cacc3be7ef3e1\logback-classic-1.4.8.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.20.0\d37f81f8978e2672bc32c82712ab4b3f66624adc\log4j-to-slf4j-2.20.0.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.7\a48f44aeaa8a5ddc347007298a28173ac1fbbd8b\jul-to-slf4j-2.0.7.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.0.11\c9b16cdb6d4874ba4118fcdd4b0335f6278b378\spring-jcl-6.0.11.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.11.2\f03f87bd7eacf79b00aa89907c6e30e0ec86b4\micrometer-commons-1.11.2.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.4.8\3fba9c105e0efc5ffdcda701379687917d5286f7\logback-core-1.4.8.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.7\41eb7184ea9d556f23e18b5cb99cad1f8581fc00\slf4j-api-2.0.7.jar;C:\Users\USER\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.20.0\1fe6082e660daf07c689a89c94dc0f49c26b44bb\log4j-api-2.20.0.jar hello.servlet.ServletApplication . ____ _ /\\ / ___'_ __ ( _)_ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.1.2) 2023-08-02T16:17:15.220+09:00 INFO 14084 --- [ main] hello.servlet.ServletApplication : Starting ServletApplication using Java 20.0.1 with PID 14084 (C:\Users\USER\Desktop\servlet\out\production\classes started by USER in C:\Users\USER\Desktop\servlet) 2023-08-02T16:17:15.223+09:00 INFO 14084 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to 1 default profile: "default" 2023-08-02T16:17:15.575+09:00 WARN 14084 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed 2023-08-02T16:17:15.590+09:00 INFO 14084 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-08-02T16:17:15.608+09:00 ERROR 14084 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.obtainFromSupplier( AbstractAutowireCapableBeanFactory.java:1220 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBeanInstance( AbstractAutowireCapableBeanFactory.java:1158 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean( AbstractAutowireCapableBeanFactory.java:560 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean( AbstractAutowireCapableBeanFactory.java:520 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0( AbstractBeanFactory.java:326 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:234 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:324 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractBeanFactory.getBean( AbstractBeanFactory.java:205 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.context.support .PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors( PostProcessorRegistrationDelegate.java:199 ) ~[spring-context-6.0.11.jar:6.0.11] at org.springframework.context.support .AbstractApplicationContext.invokeBeanFactoryPostProcessors( AbstractApplicationContext.java:771 ) ~[spring-context-6.0.11.jar:6.0.11] at org.springframework.context.support .AbstractApplicationContext.refresh( AbstractApplicationContext.java:589 ) ~[spring-context-6.0.11.jar:6.0.11] at org.springframework.boot.SpringApplication.refresh( SpringApplication.java:734 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.refreshContext( SpringApplication.java:436 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:312 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:1306 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run ( SpringApplication.java:1295 ) ~[spring-boot-3.1.2.jar:3.1.2] at hello.servlet.ServletApplication.main( ServletApplication.java:12 ) ~[classes/:na] Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>( WebServletHandler.java:39 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>( ServletComponentRegisteringPostProcessor.java:49 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0( ServletComponentScanRegistrar.java:96 ) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier( AbstractAutowireCapableBeanFactory.java:1254 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .DefaultListableBeanFactory.obtainInstanceFromSupplier( DefaultListableBeanFactory.java:949 ) ~[spring-beans-6.0.11.jar:6.0.11] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.obtainFromSupplier( AbstractAutowireCapableBeanFactory.java:1214 ) ~[spring-beans-6.0.11.jar:6.0.11] ... 16 common frames omitted Caused by: java.lang.ClassNotFoundException: jakarta.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass( BuiltinClassLoader.java:641 ) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass( ClassLoaders.java:188 ) ~[na:na] at java.base/java.lang.ClassLoader.loadClass( ClassLoader.java:521 ) ~[na:na] ... 22 common frames omitted Process finished with exit code 1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. Junit 관련 질문입니다. Junit에서 test시 객체가 생성되어야 되는데 따로 컨테이너를 관리하지 않는데 어느범위까지 미리 싱글톤 인스턴스를 만들어서 정상작동되는건가요? 본 강의의 test 클래스에서 싱글톤 객체를 그냥 getInstance()메서드(# 객체 자체 인스턴스를 가져오는 메서드)를 통해서 사용을하는데 언듯 생각하기엔 독립된 test 내에 해당 객체를 사용하기 위해선 선언을 먼저해주거나 컨테이너에서 관리가 되어야 될것 같아서 어떤 로직인지 궁금해 질문드립니다.
FrontControllerServletV1의 생성자를 통해 controllerMap에 넣어주시는 부분은 봤습니다 하지만 해당 생성자가 언제 어디서 누구에게 호출되는지가 궁금합니다 짐작컨대 WAS가 Servlet Container에서 FrontControllerServletV1을 찾아 DI를 하는가합니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ItemSaveForm과 ItemUpdateForm으로 Form 전송 객체를 분리하였는데 이 두 Form 객체를 Item을 상속받아서 만드는 것은 어떤가요? 이렇게 만들 경우 add, edit할 때 item 객체를 따로 만들지 않고 form을 바로 itemRepository에 전달 할 수 있습니다. 이 방법이 괜찮은 방법인지 아니면 너무 특수한 경우인지 궁금합니다.
Java 에서 Final 만 사용할 수 있는게 외부 변수가 메모리에서 해제 되었을 경우, 가비지를 참조할 수 있는 것을 방지하기 위해서로 알고 있는데 코틀린은 이게 가능한게 아예 메모리를 통째로 떠와서 그런걸까요? ㅎㅎ 강의 영상에서 포획한다 라고 표현하신게 그런 의미 같아요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 트랜잭션 추상화 후 트랜잭션 매니저에서 데이터소스를 통해 커넥션을 생성한다고 강의에서 말씀해 주셨습니다. @Transactional을 사용하면 커넥션 풀을 사용하는지 DriverManger를 통해 신규 커넥션을 생성하는지와 커넥션 풀을 사용한다면 어떤 커넥션 풀을 사용하는지 궁금합니다!
안녕하세요 MVC-2 강의중 2. 타임리프 - 스프링 통합과 폼 강의자료 3~4페이지 중에서 질문이 있습니다. 첨부한 사진을 코드를 살펴보시면, 클라이언트가 /add 페이지를 요청할 때마다 new Item()을 생성하게 됩니다. 물론 new를 하는 이유는 타임리프가 제공하는 편리한 기능인 커맨드 객체를 사용하기 위함이라고 말씀하셨습니다. 제가 궁금한 부분은, 실제 서비스에서 클라이언트는 단지 get을 할 뿐인데 이처럼 매번 객체를 생성하면 서버의 메모리가 낭비되지 않을까라는 생각이 들어서 질문을 남깁니다. 실무에서 이같은 코드를 실제로 사용하는지 궁금합니다. 아니라면, 실무에서 적용가능한 개선점도 말씀해주시면 감사하겠습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 싱글톤 객체를 멀티쓰레드로 이용할 때, 이럴 때 그냥 멤버로 flag 하나 달아두면 되지 않나요?
public static final String ERROR_EXCEPTION = "javax.servlet.error.exception"; public static final String ERROR_EXCEPTION_TYPE = "javax.servlet.error.exception_type"; public static final String ERROR_MESSAGE = "javax.servlet.error.message"; public static final String ERROR_REQUEST_URI = "javax.servlet.error.request_uri"; public static final String ERROR_SERVLET_NAME = "javax.servlet.error.servlet_name"; public static final String ERROR_STATUS_CODE = "javax.servlet.error.status_code"; static final로 선언돼있는데 어떻게 다른 예외가 발생할 때 마다 로그 찍어보면 다른 값이 들어가 있나요??
안녕하세요. 첫 시작부터 막혀서 슬프네요.. 도와주세요 ! 과정 순서대로 올릴게요. (1) 프로젝트 생성 (2) 생성 후 오픈 > RUN 클릭 > 에러 (3) Settings > Gradle > Intellij IDEA로 변경 (에러 메세지는 안뜨나, 톰캣 Start 안됨) (4) 오른쪽 Notifications 에서 'Lombok' 관련 알림 (혹시나 해서 첨부..) (5) Settings > Gradle > Gradle JVM 변경 (11 & 17 둘다 시도해봄 / 여전히 에러 메세지는 안뜨나, 톰캣 Start 안됨) (6) 톰캣 Start 안됨 선생님들 ♥ 도와주세요 무엇을 어떻게 고치면 될까요?
@PostMapping("members/new") public String create(String name){ Member member = new Member(); member.setName(name); MemberService.join(member); return "redirect:/"; } 위 코드처럼 String을 이용해 form에서 데이터를 받아오면 안 되는 건지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 1. 애플리케이션이 실행될 때, @Controller annotation이 있는 HomeController class의 instance가 스프링 컨테이너에 bean으로서 등록 2. 사용자가 localhost:8080 입력하면 tomcat 서버가 받고, 스프링 컨테이너에 @GetMapping("/")이 있는 bean 탐색 3. HomeController class 내부에 있는 home()이 @GetMapping("/")이 있고, 문자열 "home"을 return하므로 templates 폴더에 있는 home.html 렌더링됨, 컨테이너에서 이미 대응되는 bean을 찾았으므로 static 폴더에 있는 index.html는 렌더링 X 이 과정이 맞을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions. assertThrows ; public class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); //코드가 끝날때마다 clear @Test void 회원가입() { // given Member member = new Member(); member.setName("hello"); // when long saveId = memberService.join(member); // then Member findMember = memberService.findOne(saveId).get(); Assertions. assertThat (member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { // given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); // when memberService.join(member1); //then IllegalStateException e = assertThrows (IllegalStateException.class, () -> memberService.join(member2)); Assertions. assertThat (e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } // //then // try{ // memberService.join(member2); // fail(); // }catch (IllegalStateException e){ // // assertThat을 통해 두 객체가 같은지 확인한다. // Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.1232131"); // } @Test void findMember() { } @Test void findOne() { } }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 설정 아무것도 안 건들고 소스 코드도 아무것도 안 건드린 상태인데도 서버 열고 localhost:8080 접속하면 messages_en.properties가 인식돼서 나옵니다. 물론 기본 파일인 messages.properties 도 다 존재하는 상태구요. 기본 브라우저도 1순위 한국어로 다 설정해놓은 상태이며 HTTP request를 봐도 ko로 잘 넘어옵니다. 근데 파일 자체는 messages_en이 읽히는 것 같습니다. 어떻게 해결해야 할까요?