묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
import 관련 질문합니다.!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 import할 때마다 궁금증이 생겨 찾아봤지만 이해가 잘 가지 않아 질문드립니다...!맨 위에것으로 import 하면 되는건 알지만 왜 두가지가 뜨는걸까요?하나는 클래스, 인터페이스 두개가 어떤 차이인지 알려주시면 감사하겠습니다 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
8분20초 강의에 hello.html이 404에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]hello.html 404에러뜹니다 무엇을 건드려야할까요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp 파일이 실행이 안되고 404 whitelabel 에러가 뜨네요 ㅠ
스프링부트 3.0 이상이라 build.gradle에 pdf 그대로 복붙하고, build and run using 도 gradle로 실행 했는데도 똑같은 에러가 떠요 ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 다운로드 관련 문의
안녕하세요. 스프링 MVC 2편까지 수강한 이후에 내용을 복습하려고 1편과 2편의 내용을 통합하여 상품 관리 시스템을 만드는 중인데 파일 다운로드에서 문제가 생겼습니다.상품 등록 폼에서 상품 이미지를 포함한 상폼 정보를 저장하고 상품 상세 폼에서 상품 이미지를 불러와서 상품 정보들과 함께 나타내려고 합니다.파일을 업로드해서 로컬 컴퓨터에 저장하는 것 까지는 잘 작동이 되는데 상품 상세 폼에서 파일을 다운로드하는 것이 되지 않고 파일 src로 들어가보면 404 에러코드가 나타납니다. 저장은 잘 되는데 무엇을 잘못한 걸까요? 아무리 찾아보고 고쳐봐도 잘 모르겠네요ㅠㅠ
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
동시성 이슈 처리 질문있습니다!
DB 동시성 문제를 해결하기 위해낙관적 잠금, 유니크 제약조건, 비관적 잠금이 있는 것으로 알고있습니다.비관적 잠금은 성능상의 이유로 잘 사용하지 않는다고 알고있어서낙관적 잠금 또는 유니크 제약조건으로 동시성을 해결하고 있는데, 낙관적 잠금을 사용해야 할지, 유니크 제약 조건을 사용해야 할지 의문이 들어 질문 드립니다. 감사합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
RowMapper<Item> 질문있습니다.
수업에 나오는 RowMapper<Item>에 대해서 질문드립니다.RowMapper의 코드를 확인해보니@FunctionalInterface public interface RowMapper<T> { /** * Implementations must implement this method to map each row of data * in the ResultSet. This method should not call {@code next()} on * the ResultSet; it is only supposed to map values of the current row. * @param rs the ResultSet to map (pre-initialized for the current row) * @param rowNum the number of the current row * @return the result object for the current row (may be {@code null}) * @throws SQLException if an SQLException is encountered getting * column values (that is, there's no need to catch SQLException) */ @Nullable T mapRow(ResultSet rs, int rowNum) throws SQLException; }강의에서 구현한 (rs, rowNum) => T 의 메서드가 보이는데요 해당 메서드는 throws SQLException, 즉 체크 예외를 던지고있습니다. 검색해본결과 람다는 컴파일타임이 아니라 런타임에 실행되기 때문에 사용하는측에서 컴파일시점에 예외체크를 하지않아도 컴파일이 통가된다라고 보았습니다. (throws SQLException 라고 적혀있는데 컴파일타임에 체크되어야하는거 아닌가 라고 생각은 하면서) 질문그렇다면 제가 jdbc의 RowMapper를 실무에서 사용한다면 매번 체크 예외를 위한 예외처리를 매번 다 해줘야한다는 의미인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서버 실행에 오류가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]어제까지만 해도 잘 됐던 서버가 오늘 갑자기 안됩니다. 어제랑 다른점으로 코드를 추가한 것이이 2가지 밖에 없는데 왜 오류가 나오는지 궁금합니다.인텔리 제이는 지금 학생용 라이센스를 사용중입니다.아래 링크는 코드 압축 파일 입니다. https://drive.google.com/file/d/12BtT_YTA__LkJFnUkQ_Q2ae-X9MT4TK7/view?usp=sharing
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
Dynamic web 프로젝트를 메이븐 프로젝트로 컨버트해서 사용하는 이유가 궁굼합니다.
윤재성 강사님 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정도 수강을 하였는데요.거기서는 maven 프로젝트로 생성해서 Create a Simple project로 프로젝트를 생성했었습니다.Spring MVC5 강의에서는 Dynamic web 프로젝트를 생성하고 메이븐 프로젝트로 convert 해서 사용하시던데 메이븐 프로젝트로 처음부터 만들지 않고 컨버트해서 강의하신 이유가 궁굼합니다! 또 그 둘의 차이점도 궁굼해요!
-
미해결스프링 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. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 혹시 강의 교재는 어디에서 다운로드 할 수 있을까요?