DAY_080[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2023년 1월 30일
0

국비과정

목록 보기
80/99

 🌞 Day 080 

  • SpringBoot : 어노테이션들



 🌈 JSP 사용 설정 

1. build.gradle

  • dependencies에 아래 코드 추가
    implementation 'javax.servlet:jstl'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'

2. application.properties

  • application.properties에 아래 내용 추가
    #about JSP
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp

3. 폴더 생성

  • src > main > webapp > WEB-INF > views
    : main폴더 안에 위의 구조대로 폴더 생성하고 views에 사용할 jsp파일을 생성해서 사용하면 됨




 🌈 데이터 전달 도구 


 🌙 @ResponseBody 

  • 함수 이름에 @ResponseBody 가 있으면 리턴되는 문자열이 웹 브라우져에 직접 쓰여진다.
	@RequestMapping("/test1") // localhost:8070/test1
	public @ResponseBody String test1() {
		return "<h1>JSP in Gradle~TEST - @ResponseBody !!</h1>";
	}

 🌙 Model & HttpServletRequest 

	@RequestMapping("/test1")
    public String test1(Model model, HttpServletRequest request) {
		
		// Model : 리턴되는 jsp 파일까지만 해당 내용을 전달 할 수 있는 
        //         1회용 자료 전달 도구
		model.addAttribute("name1", "홍길동");
        
		// request : 수명이 다하는 순간까지는 내용을 살려서
        //           다시 전달 할 수 있는 전달 도구
		request.setAttribute("name2" , "김하나");
		
		return "test1";
	}
  • 새로운 객체가 매개변수로 지정되어 전달되어지는 RequestMapping 메서드에서는 이전 메서드에서 저장해놨던 model 과 request가 적용지 않는다.

  • test2 메서드에서 보내려고 했던 model 과 request 는 전달인수로 보낸게 아니기때문에 test3 메서드의 매개변수에 저장되지 않는다.

  • request 와 model 의 내용을 꺼내쓰는 건 return 되는 jsp 파일내부만 가능!!


 🌙 @ModelAttribute 

@RequestMapping("/test3")
public String test3( @ModelAttribute("mem") MemberDto memberdto,
    				 Model model) {		
	return "test3";
}
  • 파라미터와 일치하는 멤버변수가 있는 객체(MemberDto)를 만들고 이 객체를 매개변수로 사용할 수 있다

  • 전달된 파라미터는 매개변수에 자동으로 입력된다.

  • ModelAttribute 어노테이션을 통해 자동으로 Model 에도 저장되게 할수 있다

  • 위 매개변수에 사용한 어노테이션은
    @ModelAttribute("mem") MemberDto memberdto
    == Model.addAttribute("mem", member)
    라고 쓴 것과 같다




 🌈 Lombok 

Lombok이란?

  • Lombok(롬복)은 Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리이다.

  • Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다.

  • Dto 객체에 @Data만 넣으면 사용가능
    @Data외에도 여러 이노테이션을 제공한다.

    import lombok.Data;

    @Data
    public class MemberDto {

        private String id;
        private String name;
    }
  • 먼저 Lombok.jar 파일을 다운받아서 설치해야 이클립스에서 사용 가능하다.
    설치 후 프로젝트 생성 시에 Lombok을 추가하고 프로젝트를 생성한다.




 🌈 Validation 

  • 프로젝트 생성시 Validation 추가

 🌙 BindingResult 

  • BindingResult
    : Model, HttpServletRequest 와 같이 스프링에서 제공해주는 객체로서 Validation의 결과 요소들을 담을수 있는 객체


 🌙 @NotNull, @NotEmpty 

  • @NotNull, @NotEmpty를 사용해서 Dto의 전달인수에 조건을 달 수 있다. js를 사용하지 않고 parameter를 체크할 수 있다. ( )안에 조건이나 메시지를 설정하여 .getDefaultMessage()를 설정해 놓을 수도 있다.
@Data
public class ContentDto {

	@NotNull(message="Writer is Null")
	@NotEmpty(message="Writer is Empty")
	@Size(min=4, max=20, message="Writer min 4, max 20")
	private String writer;
	
	@NotEmpty(message="Content is Empty")
	@NotNull(message="Content is Null")
	private String content;
	
	private String name;
}




 🌈 DB 연결 

  • 프로젝트 생성 시 JDBC API와 사용할 데이터베이스의 Driver를 선택하고 프로젝트 시작

  • application.properties에 jdbc 설정 추가

# Oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=scott
spring.datasource.password=tiger
  • 설정해놓으면 dao에서 template객체만 꺼내서 사용가능

 🌙 Dao 

@Autowired
private JdbcTemplate template;

public List<UserDto> getList() {
	String sql = "select * from myuser";
	List<UserDto> list = template.query(
			sql, new BeanPropertyRowMapper<UserDto>(UserDto.class)
	);
	return list;
}
  • Dao에서 위처럼 template 객체만 생성해서 사용하면 됨
    다만 template.query()에서
    new BeanPropertyRowMapper<UserDto>(UserDto.class)
    를 사용한다는 것이 달라진다.





profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글