Developer/Spring eGov4.0 (Java11, Tomcat9)

Spring , 기본 mvc 패턴 제작형식 , 주요 애노테이션

단님 2024. 9. 27. 01:18
728x90
패키지 구조
  1. com.example.demo01.controller → Controller
  2. com.example.demo01.service →Service
  3. com.example.demo01.domain → DTO
  4. com.example.demo01.model → DAO
main 메서드의 @SpringBootApplication
@SpringBootApplication
public class Demo01Application {

	public static void main(String[] args) {
		SpringApplication.run(Demo01Application.class, args);
	}

}

➡️ 해당 클래스가 Springboot의 설정 클래스임을 명시하며 해당 클래스를 메인으로 실행됨

해당 클래스가 있는 Package를 기본 Package로 간주함 그러므로 같은 Package 내의 클래스들은 Scan 됨.

( 즉, @ComponentScan 을 이미 포함하고 있음 )

소스코드 내부를 보면 다양한 @들을 내포하여 기본동작을 실행하고 자동설정한다

 

@ Controller의 
@RequestMapping(value = "/요청명")
@RequestMapping 특징

기본적인 결합 방법은 클래스 레벨의 @RequestMapping을 기준으로 삼고,
메서드 레벨의 @RequestMapping으로 세분화하는 방식으로 사용된다.

url 당 하나의 컨트롤러에 매핑되던 다른 핸들러 매핑과 달리 메서드 단위까지 세분화하여 적용할 수 있으며,
url 뿐 아니라 파라미터, 헤더 등 더욱 넓은 범위를 적용할 수 있다.
@Controller
@RequestMapping(value = "/member")
public class MemberController {
	
	@Autowired(required = false)
	MemberService service;
	
	@RequestMapping(value = "memberList", method = RequestMethod.GET)
	public void mList(Model model) {
		model.addAttribute("banana", service.selectList());
		
	}
}

@RequestMapping 가 현재 클래스 단위 , 메서드 단위로 설정되어 있다.

계층적으로 구성되어 클래스는 /member를 읽고,

메서드는 /member/memberList를 읽고,

viewResolver가 최종적으로 webapp/WEB-INF/views/member/memberList.jsp를 전달한다.

 

Service 구조
@Service
public class MemberService {
// ** 전역변수 정의
	
	@Autowired(required = false)
	MemberDAO dao ;

 

DAO 구조
@Repository
public class MemberDAO {
	// ** 전역변수 정의
	private static Connection cn = DBConnection.getConection();
	private static PreparedStatement pst; // Sql구문처리 단일화
DTO 구조
@AllArgsConstructor
-> 모든 Autowired 에 대해 대신 생성자 주입을 도와주는 애노테이션(생성은 하지 않음.)
AllArgsConstructor 한 클래스의 멤버 ' JoService joservice;'
-> joservice 에 해당하는 JoService 클래스 위에 생성자 생성(@Service)을 하지 않았으면 실행되지 않음을 의미.
public MemberController(JoService joservice) { this.joservice = joservice; } 이와 같다.
@NoArgsConstructor
-> 기본 생성자
@Data
->getter, setter , toString

@Getter
->(모든 필드) getter 생성하도록 지원
@Setter
->(모든 필드-final로 선언되지 않은) setter를 생성하도록 지원
@ToString
->모든 필드를 출력하는 toString() 메소드 생성
@AllArgsConstructor 
@NoArgsConstructor
@Data
public class MemberDTO {
	private String id;
	private String password;
	private String name;
	private int age;
	private int jno;
	private String info;
	private double point;
	private String birthday;
	private String rid;
}

 

인자의 자동화 시스템
public String mLogin(Model model, HttpServletRequest request, 
HttpSession session,MemberDTO dto, JoDTO jdto

spring 은 파라미터 값을 인자의 setter를 찾아 자동으로 값을 넣어준다.

만약 MemberDTO dto, JoDTO jdto 의 같은 setter 명이 있다면 각각의 setter 를 통해 파라미터의 값을 넣어준다.

 

@RequestParam
스프링 MVC에서HTTP 요청 파라미터를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용되는 애노테이션이야. 주로 GET 이나 POST 요청에서 쿼리 파라미터나 폼 데이터를 처리할 때 사용

주요 속성
1. name (또는 value) : 요청 파라미터의 이름을 지정
ex ) @RequestParam("name")→?name=John

2. required : 파라미터가 필수인지 여부를 지정
기본값은 true고 , 요청에서 해당 파라미터가 없으면 예외 오류(400)  발생한다.
required = false 지정시 파라미터가 없어도 예외가 발생하지 않는다.

3. defaultValue : 요청 파라미터가 없을 경우 사용할 기본값을 지정 , 
required = false 와 함께 자주 사용
ex ) @RequestParam(name = "name", defaultValue = "Guest")
@Controller
public class MyController {

    @RequestMapping("/greeting")
    public String greeting(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name, Model model) {
        model.addAttribute("greeting", "Hello, " + name + "!");
        return "greeting";  // View 이름 반환
    }
}

@RequestParam 애노테이션은 name이라는 요청 파라미터String 타입의 name 변수에 바인딩한다.

클라이언트가 ?name=John과 같이 요청을 보내면 name 파라미터 값인 "John"이 변수에 할당한다.

ex ) http://localhost:8080/greeting?name=John → Hello, John!
ex ) http://localhost:8080/greeting → Hello, Guest!