묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 에러
강의 내용대로 코드도 똑같고 위치도 다 똑같이 했는데 다음과 같이 오류가 뜹니다. 구글에 쳐도 안나오고 해결방법좀 알려주세요...
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상품등록폼
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 상품등록은 언제나 같은 폼인데 경로를 변경하는 이유가 무엇인가용 정적경로 그대로 서비스해도 되지않나요
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
bindingResult
1. itemName이 존재하지 않을 때 bindingFailure를 false로 하고 bindingResult에 FieldError를 넣어줍니다. 궁금한 부분은 값이 들어오지 않는 경우도 binding 자체는 성공적으로 이루어졌다는 이야기인가요?데이터 바인딩이라는 것에 대해 자세히 설명해주시면 감사하겠습니다. @ModelAttribute Item파라미터를 받을 때 바인딩이 실패할 경우 스프링에서 bindingResult에 BindFailure가 true 로 한 후 FieldError를 저장하는 건가요?바인딩을 정확히 받아드리지 못하고 있어서 이런저런 궁금증이 생기네요.. 감사합니다. 4. 예를들어 Price의 경우 "qqq"등으로 바인딩이 실패하면 Null값으로 Item객체가 파라미터로 들어오나요?5. 바인딩이 되는 시점이 정확히 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-spring run은 되는데 중지하면 오류가 나요
안녕하세요. 스프링부트는 2.7.15 다운 받았고 SDK는 모두 11로 설정해놨습니다.!!자꾸 옆 부분이 빨간색으로 뜨는 이유는 뭘까요...?RUN도 잘 되는데 중지하면 오류가 납니다...알려주시면 감사하겠습니다.!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
return "redirect:/items/{itemId}"; 질문
아래코드에서 @PostMapping("/items/new") 이 컨트롤러가 호출이 되면 return "redirect:/items/{itemId}";에 의해 redirect되는데 그 다음 바로 아래 컨트롤러 @GetMapping("/items/{id}")가 호출되는거로 보여집니다. 그런데 redirect 경로는 끝에 {itemId}인데 왜 /items/{id}가 호출이 되나요 ? 같아야 호출되는거 아닌가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 JdbcTemplate에서 질문
public class JdbcTemplateMemberRepository implements MemberRepository{ private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); }이 코드 부분에서JdbcTemplate가 org.spring에 영한님 강의에서는 있던데제 꺼에서는 없더라고요. 이거 해결책이 궁금합니다.감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
save 메서드는 Optional<Member> 로 리턴하지 않는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 save 메서드는 Optional<Member> 로 리턴하지 않는 이유가 궁금해서 이렇게 추측해봤는데 봐주시면 감사하겠습니다.컴파일러가 save(파라미터) 에서파라미터가 null인 것을 잡아서 오류라고 알려주기에파라미터는 절대 null 값이 들어올 수 없어서파라미터를 그대로 리턴하는 save 함수의 리턴타입은 Optional을 사용할 필요가 없다고 생각했습니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
argumentResolver를 사용하여 인터셉터 대체
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 수강중 궁금증이 생겨 글 남깁니다. 강의 마지막에 @Login을 만들어 주어 로그인 시 처리를 간단하게 해주셨습니다. 이를 보고 든 궁금증이 그렇다면 인터셉터의 역할도 이것으로 대체를 해주어도 되는것일까요? 컨트롤러에 있는 메서드들에 @Login을 달아주면 비로그인 상태로 '/items'로 접근하면 이를 redirect정보를 담고 똑같이 사용해주면 되는것일까요? 제가 생각한 차이로는 인터셉터의 preHandle의 경우 컨트롤러를 호출조차 안하게 하는 점이 있는 것 같습니다. 둘을 구분하여 사용해야 한다면 어느 경우인지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
자바 언어에 대한 근본적인 질문...
안녕하세요. 스프링과 mybatis를 이용하여 프로젝트를 이용하여 프로젝트를 하고 있습니다.Controller.java@ApiOperation(value = "알람 정보 조회") @GetMapping("/alarm") public AlarmSearchResponseDTO alarmList( @RequestParam(required = false) String siteName, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime startTime, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime endTime, @RequestParam(required = false) String cameraName, @RequestParam(required = false) String accidentType, @RequestParam(required = false) String modelVersion, @RequestParam(required = false) String action, @RequestParam(required = false) String sortColumn, @RequestParam(required = false) String sortType, @RequestParam(required = false) Integer pageNum, @RequestParam(required = false) Integer pageSize { AlarmSearchConditionDTO alarmSearchConditionDTO = AlarmSearchConditionDTO.builder() .siteName(siteName) .cameraName(cameraName) .startTime(startTime) .endTime(endTime) .cameraName(cameraName) .accidentType(accidentType) .modelVersion(modelVersion) .action(action) .sortColumn(sortColumn) .sortType(sortType) .pageNum(pageNum) .pageSize(pageSize) .build(); return aiBoxService.selectAlarmInfo(alarmSearchConditionDTO); } AlarmSearConditionDTO.java@Data @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) public class AlarmSearchConditionDTO extends requestPaging { @ApiModelProperty(notes = "현장명", example = "현장명") private String siteName; @ApiModelProperty(notes = "발생 일시", example = "발생 일시") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime startTime; @ApiModelProperty(notes = "종료 일시", example = "종료 일시") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime endTime; @ApiModelProperty(notes = "카메라번호", example = "카메라 번호") private String cameraName; @ApiModelProperty(notes = "안전사고 유형", example = "안전사고 유형") private String accidentType; @ApiModelProperty(notes = "모델버전", example = "알람 코드") private String modelVersion; @ApiModelProperty(notes = "요청 사항", example = "요청 사항") private String action; @ApiModelProperty(notes = "정렬 기준", example = "정렬 기준") private String sortColumn; @ApiModelProperty(notes = "정렬 기준", example = "정렬 기준") private String sortType; @ApiModelProperty(notes = "페이징", example = "페이징") private requestPaging paging; @Builder public AlarmSearchConditionDTO(String siteName, LocalDateTime startTime, LocalDateTime endTime, String cameraName, String accidentType, String modelVersion, String action, String sortColumn, String sortType, Integer pageNum, Integer pageSize) { //pageNum, pageSize -> Integer this.siteName = siteName; this.startTime = startTime; this.endTime = endTime; this.cameraName = cameraName; this.accidentType = accidentType; this.modelVersion = modelVersion; this.action = action; this.sortColumn = sortColumn; this.sortType = sortType; if (pageNum != null && pageNum > 0) { this.paging = new requestPaging(pageNum, pageSize); // Both pageNum and pageSize provided, use them. } else if (pageSize != null && pageSize > 0) { this.paging = new requestPaging(null, pageSize); // pageSize provided, use it. } else { this.paging = new requestPaging(); // Default values. } }requestPaging.java@Data @Slf4j public class requestPaging { // pageNum, pageSize -> Integer private Integer pageNum; private Integer pageSize; private int totalPageCnt; public requestPaging() { this.pageNum = 1; this.pageSize = 30; } // pageNum, pageSize -> Integer public requestPaging(Integer pageNum, Integer pageSize) { // this.pageNum = (pageNum != null && pageNum > 0) ? pageNum : 1; // pageNum이 null이거나 0 이하일 경우 1을 기본값으로 사용 // this.pageSize = (pageSize != null && pageSize > 0 && pageSize <= 100) ? pageSize : 30; // pageSize가 null이거나 0 이하 또는 100을 초과할 경우 30을 기본값으로 사용 this.pageNum = (pageNum > 0) ? pageNum : 1; this.pageSize = (pageSize > 0 && pageSize <= 100) ? pageSize : 30; // } public int getStartPage() { return (pageNum-1) * pageSize; } public void setPage(int page) { this.pageNum = (page < 1) ? 1 : page; } public void setPerPageNum(int perPageNum){ if(perPageNum <= 0 || perPageNum > 100){ this.pageSize= 30; return; } this.pageSize = perPageNum; } public int setTotalPageNum(int totalCnt){ int total=0; if((totalCnt%pageSize)==0)total=totalCnt/pageSize; else total = (totalCnt / pageSize) + 1; return total; } public int getTotalPageCnt(){ return totalPageCnt; } }Service.javapublic AlarmSearchResponseDTO selectAlarmInfo(AlarmSearchConditionDTO alarmSearchConditionDTO) { AlarmSearchResponseDTO alarmSearchResponseDTO = new AlarmSearchResponseDTO(); List<AlarmSearchDAO> searchList = null; log.info("{}", alarmSearchConditionDTO); try { searchList = (List<AlarmSearchDAO>) alarmRecordMapper.selectAlarmInfo(alarmSearchConditionDTO); } catch (NullPointerException e) { // 조회건수 0 -> 빈리스트 리턴 } int totalCnt = alarmRecordMapper.countAlarmInfo(alarmSearchConditionDTO); Pagination paging = new Pagination(); paging.setPageNum(alarmSearchConditionDTO.getPageNum()); paging.setPageSize(alarmSearchConditionDTO.getPageSize()); paging.setOrderColumn(alarmSearchConditionDTO.getSortColumn()); paging.setOrderType(alarmSearchConditionDTO.getSortType()); paging.setTotalCnt(totalCnt); paging.setTotalPageCnt(alarmSearchConditionDTO.setTotalPageNum(totalCnt)); alarmSearchResponseDTO.setPagination(paging); alarmSearchResponseDTO.setResult(searchList); return alarmSearchResponseDTO; }제가 myBatis 사용을 위해 검색 조건 DTO안에 requestPaging이란 페이징 을 위한 객체를 만들어서 사용을 하고 싶습니다.컨트롤러에서 get호출을 받으면 받고 난 뒤 빌더를 이용하여 DTO에 세팅을 하면 아래의 데이터가 나옵니다.AlarmSearchConditionDTO(siteName=null, startTime=null, endTime=null, cameraName=Camera A, accidentType=null, modelVersion=null, action=null, sortColumn=eventTime, sortType=null,paging=requestPaging(pageNum=7, pageSize=3, totalPageCnt=0)) 여기까지는 페이징 처리를 위한 변수들이 정상적으로 들어갔습니다. mapper에서 parameterType="AlarmSearchConditionDTO" 로 사용하여 검색 조건과 페이징 처리를 모두 하려고 합니다. mapper에서 #{startPage} 과 같은 타입은parameterType.get~() 메서드를 사용하여 뽑는 것으로 알고 있습니다.하지만 그 후 데이터베이스 조회 페이징 처리를 위해 아래의 두가지 변수를 이용하여 mapper에서 처리를 하려하는데alarmSearchConditionDTO.getStartPage() alarmSearchConditionDTO.getPageSize()DTO 자체를 로그 찍어서 확인을 하면 pageNum과 pageSize 가 받아온 값으로 잘 저장이 되는데,DTO.get() 변수를 사용해서 값을 확인하면 requestPaging 클래스의 생성자의 디폴트 값이 호출되어 1과 30이 나옵니다.public requestPaging() { this.pageNum = 1; this.pageSize = 30; } 계속 고민하다가 모르겠어서 질문드립니다.. 도와주세요 ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 필터 -인증 체크 강의 중 로그인 오류 시 리다이렉트 url
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 수업 중 궁금점이 생겨 질문 남깁니다. 필터로 확인하여 로그인중이 아닐시 로그인 화면으로 넘어왔습니다.이후 여기서 로그인 에러가 났을 경우 @PostMapping("/login") public String loginV4(@Validated @ModelAttribute LoginForm form, BindingResult bindingResult, @RequestParam(defaultValue = "/") String redirectURL, HttpServletRequest request) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } //로그인 성공 처리 //세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성 HttpSession session = request.getSession(); //세션에 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); return "redirect:" + redirectURL; } 맨 윗줄에 bindingResult.hasErrors()로 인해 "login/loginForm"으로 이동되는데 이때 redirectURL은 유지가 됩니다. 이 이유를 오류가 있을 시 url을 새로 받는 것이 아니라 또는 redirect가 아닌 return으로 view만 바꿔주었기에 그런 것이라고 이해하는게 맞을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cannot find symbol size() 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 회원 리포지토리 테스트 케이스 마지막 줄에서 오류가 납니다 이전 질문들에도 이런게 없고 구글링을 해봐도 방법이 없습니다 왜 이럴까요?강의 자료 그대로 복붙해봐도 마찬가지입니다ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
혹시 교재는 어디에 있을까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 혹시 강의 교재는 어디에서 다운로드 할 수 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
thymeleaf 에서 스프링 부트3.0 이상일때 request 꺼내기
@GetMapping("/basic-objects") public String basicObjects(HttpSession session) { ... }위 컨트롤러 작성하는 부분입니다.관련된 html 파일은 basic-objects.html 인데, ${#session} 으로 세션을 꺼내고 ${session} 으로도 세션을 꺼내네요.컨트롤러에서 파라미터로 호출하면 자동으로 모델에 담아서 뷰단으로 넘겨주기 때문에 기본으로 제공하는 #session 과 파라미터로 호출한 session 둘다 꺼낼 수 있는걸로 보입니다.그런데 강의문서에 "스프링 부트 3.0 이상이라면 다음과 같이 작성하자." 라고 써있고 컨트롤러에서 HttpServletRequest.. 리퀘스트와 리스폰스 그리고 서블릿 컨테이너를 Model 에 addAttribute 로 넣어 뷰단에 넘겨줍니다.// 스프링 부트 3.0 이상 @GetMapping("/basic-objects") public String basicObjects(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) { session.setAttribute("sessionData", "Hello Session"); model.addAttribute("request", request); model.addAttribute("response", response); model.addAttribute("servletContext", request.getServletContext()); return "basic/basic-objects"; }리퀘스트와 리스폰스는 컨트롤러 메서드에서 파라미터로 호출했으니 Model 에 넣어서 넘겨줄 필요 없는거 아닌가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인터페이스와 추상클래스의 차이를 모르겠어요.
강의를 듣다 보면, 컨트롤러, 어댑터 서비스 리포지토리 등 인터페이스로 정의한 뒤에 실제 구현객체를 따로 두는 형태로 개발을 하고 있는데 MVC 강의를 들어보면 어댑터의 경우 createParamMap 이라는 공통으로 사용되는 메서드가 있는데, 어댑터 들은 어댑터 끼리 "의미있는 연관 관계"가 아니라 같은 기능을 하기 때문에 interface로 정의하는 걸까요? createParamMap같이 똑같이 사용되는 건 interface에 default 메서드나, 추상 클래스에 메서드로 사용하면 좋을 것 같은데, 이렇게 default 메서드로 구현하거나 추상클래스의 메서드로 구현하는 부분에서도 차이가 있을까요? 둘의 차이가 없다면, 왜 추상 클래스가 아닌 인터페이스로 정의하고 구현객체를 두는지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 템플릿과 AOP의 프록시객체
안녕하세요.앞에서 템플릿 콜백 패턴으로 트랜잭션 템플릿(스프링이 제공한 것이긴 하지만)을 구현했던 것처럼 AOP의 프록시 객체 클래스를 직접 구현할 수도 있을까요??구현할 수 있다면 어떤 방식으로 구현하는지,구현이 어렵다면 어떤 부분 때문에 어려운지 궁금합니다...!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의 내용을 복습하는 도중 에러발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용을 복습하는 도중 WEB-INF/views 에있는 jsp 파일을foward 하는 과정에서 에러가 발생합니다.아무리 봐도 틀린것도없고 문제되는 사항도없는거같은데이상하게 404 에러가 계속 출력되네요오타도없구요 ..강의 내용을 복습하며 스스로 만들어보고자 하고 따라하다가 이상하길래 소스코드까지 비교 해가며 했지만 다를게 없는데 안되네요 https://drive.google.com/file/d/1Zpk7Dk007LNbtLLHE_OKICgq-gmki2Jp/view?usp=sharing 구글드라이브 링크로 소스코드 첨부 합니다 뭐가 문제인지좀 봐주실수잇을까요 ? mvc에 url-patterns에 /home을 하였는데localhost:8080/home 에 접속하면WEB-INF/views/test.jsp 내용이 출력되어야하는데그냥 404에러만 뜹니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
포트스맨 content-type 수정 시 오류 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님 강의를 따라 가던 중에 컨텐트 타입을 바꾸려고 했는데 한글만 입력이 되고영어는 입력도 안되고 따로 지워지거나 하지도 않습니다.혹시, 다른 설정이 필요한건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
등록 버튼을 누르면 홈화면으로 돌아가질 않아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이름을 등록하면 홈화면으로 돌아가지 않고 등록화면에 계속 있습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
controller 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]controller어노테이션을 넣으면 이렇게 뜹니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
dataSource에 관한 질문
앞선 강의들에서 driverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고 커넥션을 획득하는 기능을 제공한다고 배웠습니다.하지만 여러 요청이 동시에 왔을 때 DriverManager는 커넥션이 하나 뿐이라 여러 요청을 병렬처리를 할 수 없다는 단점이 있어 커넥션 풀 이라는 개념을 도입하여 여러 요청을 풀 내의 여러개의 커넥션을 통해 병렬 처리가 가능하도록 하는 것이고, 이러한 커넥션을 획득하는 방법이 DriverManager, Hikari, DBCP2 등 여러 커넥션 획득 방법이 존재하기 때문에 이들을 추상화해둔 것이 DataSource interface이고, DataSource 구현체로 DriverManager를 통한 커넥션 획득 방법은 DriverManagerDataSource, Hikari를 통한 커넥션 획득 방법은 HikariDataSource이다.제가 이해한 것은 이정도 인데 맞는지 모르겠습니다..