WEN-INF 폴더 외부에서는 확인이안되고
컨트롤러를 거쳐서 내부에서의 요청은 확인이된다.
페이지이동을 위한 컨트롤러를 만들어서 사용한다.
lombok 사용하기
![](https://blog.kakaocdn.net/dn/Jrovt/btrC5LRSUd6/DlFC4pbKZC3A50wk5dPjok/img.png)
![](https://blog.kakaocdn.net/dn/bpSJth/btrC2LTbCha/Q2hyefBlUBVbJAWrdkriP0/img.png)
![](https://blog.kakaocdn.net/dn/d0rntK/btrC2vweWaE/7Kvr3kFrU2VcQp6GbNJHm1/img.png)
lombok jar 파일 다운로드
https://projectlombok.org/download
Download
projectlombok.org
![](https://blog.kakaocdn.net/dn/XcwcJ/btrC2w9I7y2/FnBGMkJPDcEWdXyFVulk4K/img.png)
경로에 한글이 없도록 C드라이브에 넣어준다.
스프링을 종료하고 더블클릭해서 실행해준다. 혹시 실행이안된다면 cmd 창에서 자바 명령어로 실행해준다.
![](https://blog.kakaocdn.net/dn/bf1yAO/btrC4ibAgaY/RXBkyAPuqwbBJK9Ek2isK0/img.png)
![](https://blog.kakaocdn.net/dn/bfjVEv/btrC6IAoDSz/J95b9hMruwKKp97AphiMkK/img.png)
실행화면.
기다리면 인스톨이나 업데이트 할 수 있는 목록이 생성되는데 안생긴다면 직접 경로를 찾아서 지정해준다.
학원에서는 스프링에서만 사용할 꺼지만 이클립스도 목록에 나와있으니 같이 인스톨해준다.
![](https://blog.kakaocdn.net/dn/b2kHuc/btrC4ivRMza/KP9I4u9b8bEgDXcd6Df4H1/img.png)
금방 인스톨이 완료된다. 다시 스프링을 실행하고 적용되었는지 확인해본다.
한글깨짐현상 - 인코딩설정하기
web.xml 파일에 필터태그 추가
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
위 처럼 코드를 작성하여도 한글이 깨진다면 .jsp 쪽에서 인코딩타입을 안바꿔줘서 데이터가 넘어오기전부터 깨진
상태여서일 수도 있다.
public class MemberService {
private ModelAndView mav;
public ModelAndView memberJoin(MemberDto member) {
System.out.println("MemberService.memberJoin() 호출");
mav = new ModelAndView();
)
mav.setViewName("Main"); //매개변수에 페이지이름
return mav;
commons-fileupload 라이브러리 추가하기
![](https://blog.kakaocdn.net/dn/FwdjL/btrC75h6iSh/hnYmwkbG6dgEBkrKm1Yem0/img.png)
![](https://blog.kakaocdn.net/dn/bhmUJ2/btrC4hqWtj8/mkrWV7ZWqksl20jT4mcODk/img.png)
![](https://blog.kakaocdn.net/dn/J18NO/btrC4OIUxAw/ML1tcSposXTm5nWgnLQ4mk/img.png)
서블릿 콘텍스트에 설정 추가하기
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="UTF-8" />
<beans:property name="maxUploadSize" value="10000000" /><!-- 10MB -->
<beans:property name="maxInMemorySize" value="10000000" /><!-- 10MB -->
</beans:bean>
파일을 파일이름과 원본파일 로 나누어 담아 사용하기위해 dto 에 필드 추가
@Autowired
위 이미지처럼 @Autowired 로 MemberService를 사용하려면 서비스클래스에 @Service 어노테이션을 사용해서 지정해줘야 스프링에서 인식하고 Autowired 기능을 할 수 있다.
@Service 어노테이션을 생략하게되면 스프링의 관리에 있지않기 때문에 에러가 발생한다.
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'memberController':
Unsatisfied dependency expressed through field 'msvc';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'com.spring_movie01.service.MemberService' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
대충 @Autowired 어노테이션으로 지정한 MemberSecvice msvc; 이 선언되어있는 memberController에서 bean을 만드는 중에 실패했다. 서비스패키지의 MemberService 에서 적합한 bean을 찾지 못했다. 적어도 1개이상의 bean이 필요하다라는 뜻인 것 같다.
스프링에서 파일을 처리하기 위한 코드
@Service
public class MemberService {
private ModelAndView mav;
@Autowired
private MemberDao mdao;
//2. 저장경로 설정
private String savePath = "D:\\work\\spring_movie01\\src\\main\\webapp\\resources\\mprofileUpLoad";
//파일을 저장할 경로를 변수로 저장
public ModelAndView memberJoin(MemberDto member) throws IllegalStateException, IOException {
System.out.println("MemberService.memberJoin() 호출");
mav = new ModelAndView();
// 파일저장 파일이름
MultipartFile mfile = member.getMfile();
String mprofile = "";
System.out.println(mfile.isEmpty());
//파일이없으면 ture 있으면 false
if(!mfile.isEmpty()) {
System.out.println("첨부파일 있음");
UUID uuid = UUID.randomUUID(); //32자리의 임의의(랜덤) 코드가 생성
//1. 파일명 생성
mprofile = uuid.toString()+"_"+mfile.getOriginalFilename();
//프로필 이미지 파일 저장
mfile.transferTo( new File(savePath, mprofile));
//savePath 경로에 mprofile 이름으로 내용이없는 빈파일을 만들고
//mfile을 변환해서 담아준다.
}
System.out.println("mprofile : "+mprofile);
member.setMprofile(mprofile);
int joinResult = mdao.insertMember(member);
System.out.println("join결과 : "+ joinResult);
//파일이있으면 첨부파일의 이름을 저장, 없으면 빈문자로 저장하도록 작성
//mybatis는 null 을 사용하려면 따로설정을해줘야함
//회원가입처리 (dao - insert문)
mav.setViewName("Main");
return mav;
}
}
1. 파일을 저장, 삭제 하기 위한 파일 저장 경로를 변수에 저장.
private String savePath = "D:\\work\\spring_movie01\\src\\main\\webapp\\resources\\mprofileUpLoad";
2. 업로드 한 프로필파일을 변수에 저장.
MultipartFile mfile = member.getMfile();
3. 빈문자로 변수 선언을 하나 한다.
String mprofile = "";
4. 파일이 업로드 되지않았을 때도 생각해서 MultipartFile의 .isEmpty() 메소드를 통해 if문 구성
System.out.println(mfile.isEmpty());
// isEmpty() 파일없으면 ture 있으면 false
if(!mfile.isEmpty(){
}
5. UUID 클래스의 randomUUID() 메소드를 사용 랜덤코드를 생성하는 객체 생성
if(!mfile.isEmpty()) {
System.out.println("첨부파일 있음");
UUID uuid = UUID.randomUUID(); //32자리의 임의의(랜덤) 코드가 생성
//1. 파일명 생성
mprofile = uuid.toString()+"_"+mfile.getOriginalFilename();
//프로필 이미지 파일 저장
mfile.transferTo( new File(savePath, mprofile));
//savePath 경로에 mprofile 이름으로 내용이없는 빈파일을 만들고
//mfile을 변환해서 담아준다.
}
----
@Autowired
스프링을 실행하면 스프링에서 서블릿콘텍스트에서
<context:component-scan base-package="com.spring_movie01.*" />
에 지정되어있는 경로에서 어노테이션을 검색(스캔)하고 루트콘텍스트? 서블릿콘텍스트에 bean 객체를 생성한다.
생성된 bean객체를 사용하려면 new연산자로 생성자를 만들면안되고 루트?서블릿?콘텍스트에서 받아와야한다.
이 컨텍스트의 bean객체는 어디서든 공유 가능하기 때문에 자동 의존성 주입 어노테이션을 이용해 객체를 받아올 수 있다.
@Autowired(자동 의존성 주입) 는
@Controller @Service @Repository 어노테이션
@Component 부모 어노테이션
4가지의 어노테이션이 있는데 이 4가지를 붙여줘야 컨텍스트에 bean객체가 생성된다.
모두 bean 객체를 생성해주고 딱히 다른 기능이 있는게 아니라서 뭘써도 상관은 없지만
명시적으로 구분하기 위해 분리해서 사용한다.
부모 어노테이션인 @Componen를 붙여줘도 똑같이 컨텍스트에 생성되지만 가시성이 떨어져 잘 사용하지 않는다.
그리고 객체내에서 데이터 변경 작업이 있는 VO(DTO) 객체와 같은 경우는 동기화 문제로 인해 bean 객체로
사용하지 않는다. bean 객체는 항상 데이터 변경이 없는 객체에 한해 사용하는 점에 유의해야한다.
@Controller : 웹 요청과 응답을 처리한다.
@Service : 내부에서 자바 로직을 처리한다.
@Repository : DB나 파일같은 외부 I/O 작업을 처리한다.
컨트롤러, 서비스, Dao 클래스의 메소드를 호출할 수 있다는 것은 그 메소드를 멤버로 가지고 있는 객체가 어딘가에 만들어져있다는 것.
컨텍스트에 어노테이션 된 bean객체가 존재하기 때문에 생성자로 객체를 만들지 않아도 객체의 메소드를 사용할 수 있다.
Autowired 를 사용할꺼면 new 생성자를 사용하지 않고 Autowired만 사용해주는 것이 좋다. 충돌로 에러가 날 수 있다.
예외로 다른 메소드 안에 ??
'국비지원' 카테고리의 다른 글
프로젝트 에러 - Uncaught ReferenceError: clickZzim is not defined (0) | 2022.07.28 |
---|---|
22/05/30 수업정리 (0) | 2022.05.30 |
22/05/24 수업정리 (0) | 2022.05.24 |
스프링 다운받고 설정하기 (0) | 2022.05.20 |
22/05/18 수업정리 (0) | 2022.05.18 |