Spring_JSP파일과 연결

song·2023년 10월 25일

Spring

목록 보기
5/19

JSP 기본 객체

  1. request : 요청 정보가 담겨있는 객체
  2. response : 요청에 응답을 작성할 수 있게 하는 객체
  3. session : HTTP세션을 구현한 객체 (세션 정보 저장할 때 사용)
  4. application : WebApplication 전체에서 공유하는 객체
  5. out : 응답에 포함될 내용을 브라우저에서 출력할 때 사용

Dispatcher-Servlet(디스패쳐 서블릿)

  • 사용자 요청받아서 맵핑가능한 컨트롤러를 찾는다.
  • 해당 컨트롤러에게 HttpServletRequest를 담아서 부른다.
  • 컨트롤러가 request로 받은 값으로 연산한다.
  • 컨트롤러가 DS한테 연산에 맞춰서 맞는 View를 부르라고 한다.
    • 컨트롤러는 길잡이다.
    • View를 부를 때는 return으로 보내면 된다.
    • DS에서 값은 String으로 처리한다. 그래서 return "파일명"으로 보내면되고 해당 메소드 타입은 String으로 지정하면 된다.
  • DS가 해당 View를 사용자에게 보여준다.

Request

  • url : localhost:8080/app/getYoil?year=2023&month=10&date=24
    public static void main(HttpServletRequest request){
    	int s_year = Integer.parseInt(request.getParameter("year"));
     	int s_month = Integer.parseInt(request.getParameter("month"));
     	int s_date = Integer.parseInt(request.getParameter("date"));
    }
    이렇게 하면 HttpServletRequest가 url에 있는 파라미터들을 인식해서 값을 가져올 수 있는데 스프링은 이렇게 받지 않아도 알아서 인식과 형변환도 할 수 있다.
    그 방법은 아래와 같다.
    public static void main(int year, int month, int date){
    	int s_year = year;
     	int s_month = month;
     	int s_date = date;
    }
    원하는 데이터타입으로 적어놓으면 알아서 형변환까지 된다.
    주의할 점은 파라미터 키값과 같은 이름으로 매개변수를 받아야 한다.
    url에 year=2023으로 보냈으니 매개변수 이름도 year로 만들어서 값 받아야 하는 것.

컨트롤러에서 넘어올 수 있게 파일 저장

  • (초록색) webapp 바로 밑에 jsp파일을 넣으면 직접 접속할 수 있다. (컨트롤러에서 접속 불가능)
    url : http://localhost:8080/app/Ex05_1_YoilTeller.jsp
  • (노란색) webapp > WEB-INF > views 밑에 jsp파일을 넣으면 직접 접속이 안되고 컨트롤러를 통해서만 접속이 가능하다.

Model

  • 메소드에 Model를 매게변수로 받아야 한다.
    public static void main(int year, int month, int date, Model model){}
  • Model에 값을 보내줘야 한다.
    model.addAttribute("year", year);
    이때 왼쪽 "year"은 jsp파일에 보낼 변수명, 오른쪽 year은 현재 java파일에서 사용하고 있는 변수다.
  • jsp파일에서는 ${}로 해서 보낸 변수명으로 값을 받으면 된다.
    <h1>${year}년 ${month}월 ${date}일 ${yoil}요일입니다. </h1>

전체 코드

@Controller
public class Ex05_1_YoilTellerMVC {

	@RequestMapping("/getYoil5") //localhost:8080/app/getYoil5?year=2023&month=10&date=24
	public static String main(int year, int month, int date, Model model) throws Exception {
//		1. 입력
/**			위 main에서 year, month, date 받기. (변수명과 파라미터명 같게 설정해야 함. )
 * 			메인에서 바로 매게변수로 받기 때문에 입력쪽에서 따로 해야할 일이 없다. 
 			형변환도 자동으로 됨. 
 * */
//		2. 연산
/** 		자바에서 기본으로 제공하는 Calendar 클래스. 추상클래스라서 new를 이용한 인스턴스화 불가
 * 			getInstance() 는 인스턴스를 만들어줌 (new 랑 비슷한애)
 * 			new 로 만드는 것과 차이점: 최초에 할당된 메모리를 재사용 하느냐(getInstance) 못하느냐(new)의 차이
 *  */
			Calendar cal = Calendar.getInstance(); // 추상클래스라서 new 못쓰고 getInstance() 메소드 이용해서 사용
			cal.set(year, month-1, date);
			
			int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1~7 사이의 숫자로 나옴
			char yoil = " 일월화수목금토".charAt(dayOfWeek);  // 주 중에 몇번째 일 {"","일","월","화","수","목","금","토"}
			
//		3. 모델(Model)에 담기
			//왼쪽 "year"은 jsp파일에 보낼 변수명, 오른쪽 year은 현재 java파일에서 사용하고 있는 변수
			model.addAttribute("year", year);
			model.addAttribute("month", month);
			model.addAttribute("date", date);
			model.addAttribute("yoil", yoil);
			
//		4. 출력(view)
			return "Ex05_1_YoilTeller";
            // webapp > WEB-INF > views 폴더 안에 있는 jsp파일. 
            // .jsp라고 적지 않아도 된다. 
	}
}

출력부분에 .jsp라고 적지 않아도 되는 이유는

이 파일에

위와같이 입력되어있어서 생략이 가능한 것이다.

별도의 객체(class)를 만들어 request받기.

  • 한 클래스에 여러 정보를 다 담으면 됨.
    • VO(Value Object). 변수만 가지고 있는 클래스.
    • DTO(Data Transfer Object).
  • 너무 많은 매개변수를 주고 받을 때는 클래스를 생성해서 매개변수의 개수를 줄일 수 있다.
    • 코드의 간결성
  • 장점
    • 유지보수할 때 매개변수의 개수가 변해도 메인 메서드는 변화가 없다.
  1. VO 만들기

    public class Ex07_2_MyDate {
        private int year;
        private int month;
        private int day;
    
        public int getYear() {
            return year;
        }
        public void setYear(int year) {
            this.year = year;
        }
        public int getMonth() {
            return month;
        }
        public void setMonth(int month) {
            this.month = month;
        }
        public int getDay() {
            return day;
        }
        public void setDay(int day) {
            this.day = day;
        }
    
        @Override
        public String toString() {
            return "Ex07_2_MyDate [year=" + year + ", month=" + month + ", day=" + day + "]";
        }
    }
    • getter setter 만드는 단축키 : Shift + Alt + S, R
      • 메뉴바 > Source > Generator Getters and Setters
    • toString 만드는 단축키 : Shift + Alt + S, S
      • 메뉴바 > Source > Generator toString()
    • setter를 만들어놓으면 알아서 값을 넣어준다.
  2. main에 VO 매개변수로 받기.
    public String main(Ex07_2_MyDate mydate, Model model){

  3. jsp에서 VO 사용하기.
    java : model.addAttribute("mydate", mydate);
    jsp : <h1>${mydate.getYear()}년 ${mydate.getMonth()}월 ${mydate.getDate()}일입니다. </h1>

profile
계속 나아가기

0개의 댓글