📝 Spring 환경설정 및 커뮤니티 로그인, 회원가입
#230421
💻 작업파일
> [src/main/java] - [edu.kh.comm.common.filter] - InitFilter.java
> [src/main/java] - [edu.kh.comm.member.controller] - MemberController.java
> [src/main/java] - [edu.kh.comm.member.vo] - Member.java
> [src/main/resources] - log4j.xml
> [src/main/resources] - [spring] - [appServlet]- servlet-context.xml
> [src] - [main] - [webapp] - [WEB-INF] - web.xml
> [src] - [main] - [webapp] - index.jsp
> [src] - [main] - [webapp] - [WEB-INF] - [lib]~~
~~> pom.xml
MemberController 클래스 생성
Member vo 클래스 생성
index.jsp 중간부분 name값 vo와 통일해서 수정하기
(MemberController 작업순서에 따라)
debug로 서버연결해보기
inputEmail 👉 memberEmail
inputPw 👉 memberPw
👉 객체로 생성되어야지 기능 수행 가능
IOC(제어의 역전, 객체 생명주기를 스프링이 관리)를 이용하여 객체 생성
👉 이 때, 스프링이 생성한 객체를 bean 이라고 한다
스프링이 객체로 만들어서 가지고 있어라 **
요청/응답을 제어하는 역할을 하는 클래스
해당 클래스를 bean으로 등록하라고 프로그램에게 알려주는 주석(Annotation)
생성된 bean이 Controller임을 명시 + bean 등록 하는 어노테이션
[ 위치에 따른 해석 ]
클래스 레벨 : 공통 주소
메서드 레벨 : 공통 주소 외 나머지 주소
단, 클래스 레벨에 @RequestMapping이 존재하지 않는다면,
메서드 레벨 : 단독 요청 처리 주소
[ 작성법에 따른 해석 ]
1) @RequestMapping("url")
요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리
2) @RequestMapping(value = "url", method = RequestMethod.GET | POST)
요청 방식에 따라 요청 처리함
❗메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우
@GetMapping("url") / @postMapping("url") 상용하는 것이 일반적
(메서드 레벨에서만 작성 가능!)
기존에 자바에서 사용하던 print 구문 사용 x
trace - debug - info - warn - error
debug : 개발의 흐름 파악
ex) 이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)
info : 메소드 실행 파악
ex) 이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info가 제일 적절함
logger.info("초기화 필터 생성");
// InitFilter.java 참고
@WebFilter(filterName="initFilter", urlPatterns="/*")
public class InitFilter extends HttpFilter implements Filter {
// Logger 객체 사용 (해당 클래스에 대한 log를 출력하는 객체)
private Logger logger = LoggerFactory.getLogger(InitFilter.class);
// 필터가 생성될 때 실행
public void init(FilterConfig fConfig) throws ServletException {
//이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info가 제일 적절함
logger.info("초기화 필터 생성");
}
// 필터가 파괴될 때 실행 (서버는 켜져있는데 백엔드 코드가 수정되었을 때)
public void destroy() {
logger.info("초기화 필터 생성");
}
.... 뒤에는 생략
//log4j.xml
출력되는 로그의 형태를 지정하는 부분으로, 로그를 뒤에 계속 남기는 역할을 한다
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n" />
</layout>
</appender>
<!-- sql 로그 출력용 패턴 지정 -->
<appender name="sql-console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
이 패키지 이하에서 출력되는 로그들을 출력하겠다.
log4j 로그레벨 : trace < debug < info < warn < error < fatal
// servlet-context.xml
<resources mapping="/resources/**" location="/resources/" />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="edu.kh.comm" />
➡️ 컨트롤러에서 jsp로 렌더링하는 것을 처리하는 부분
➡️ 컨트롤러의 응답을 jsp로 보낼 때 어떻게 처리할 것인가? 를 작성하는 부분
Controller에서 반환된 문자열 앞/뒤에
접두사(prefix), 접미사(suffix)를 추가하여 만들어진 경로의 jsp로 요청을 위임(forward)**
member/signUp
/WEB-INF/views/member/signUp
/WEB-INF/views/member/signUp.jsp
forward !
단, 반환된 문자열의 시작이 redirect: 구문이면 재요청(redirect) 진행
redirect:/ 최상위로 재요청.
web.xml (배포 서술자)
요청/응답을 나눠주는 서블릿
모든 요청을 앞에서 받아들여 알맞은 Controller로 연결을 해주고
Controller의 반환 결과에 따라서
알맞은 view를 선택해 클라이언트에게 응답하는 역할
// pom.xml
<modelVersion>4.0.0</modelVersion> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
<groupId>edu.kh</groupId> <!-- 최상위 패키지 1, 2레벨 -->
<artifactId>comm</artifactId> <!-- 최상위 패키지 3레벨 == context-path -->
<name>comm</name> <!-- 프로젝트 명 -->
<packaging>war</packaging> <!-- 배포 형식 -->
<version>1.0.0-BUILD-SNAPSHOT</version>
Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어
프로젝트에 필요한 파일을(라이브러리) 사용자가 직접 받을 필요 없이
해당 태그 내에 지정된 형식으로 작성하면
네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함
<!-- Spring 모듈 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<!-- 위에 properties 에 있는 5.3.14 말하는거임 변수선언!!! -->
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>