package com.example.yaejunshin_finalproject;

public class Car {
    private int id;
    private String name;
    private int price;
    private String owner;
    private int year;

    public Car(int id, String name, int price, String owner, int year) {
        this.id = id;

        //차량 이름 검증(공백금지)
        if(name == null || name.isEmpty()){
            throw new IllegalArgumentException("차량 이름은 필수이며, 공백일 수 없습니다.");
        }
        this.name = name;

        //차량 가격 검증(0보다 커야 함)
        if(price <= 0){
            throw new IllegalArgumentException("차량 가격은 0 보다 커야 합니다.");
        }
        this.price = price;

        //차량 소유자 검증(null 또는 빈 문자열은 허용하지 않습니다.)
        if(owner == null || owner.isEmpty()){
            throw new IllegalArgumentException("차량 소유자는 필수이며, 공백일 수 없습니다.");
        }
        this.owner = owner;

        //차량 연식 검증(1950보다 커야함)
        if(year <= 1950){
            throw new IllegalArgumentException("차량 연식은 1950 보다 커야 합니다.");
        }
        this.year = year;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public String getOwner() {
        return owner;
    }

    public int getYear() {
        return year;
    }

    @Override
    public String toString() {
        return "Car{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price='" + price + '\'' +
                ", owner='" + owner + '\'' +
                ", year=" + year +
                '}';
    }
}

 

 

package com.example.yaejunshin_finalproject;

public class User {
    private int id;
    private String name;
    private String email;

    public User(int id, String name, String email) {
        this.id = id;

        //유저 이름 검증(공백금지)
        if(name == null || name.isEmpty()){
            throw new IllegalArgumentException("null 또는 빈 문자열은 허용하지 않습니다.");
        }
        this.name = name;

        //유저 이메일 검증(필수이며 공백금지)
        if(email == null || email.isEmpty()){
            throw new IllegalArgumentException("유저 이메일은 필수이며, 공백일 수 없습니다.");
        }
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

 

 

package com.example.yaejunshin_finalproject;

import java.time.LocalDate;
import java.time.LocalTime;

public class Reservation {
    private int id;
    private String name;
    private User user;
    private Car car;
    private LocalDate date;
    private LocalTime time;

    public Reservation(int id, String name, User user, Car car, LocalDate date, LocalTime time) {
        this.id = id;
        this.name = name;
        this.user = user;
        this.car = car;
        this.date = date;
        this.time = time;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public User getUser() {
        return user;
    }

    public Car getCar() {
        return car;
    }

    public LocalDate getDate() {
        return date;
    }

    public LocalTime getTime() {
        return time;
    }

    @Override
    public String toString() {
        return "Reservation{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", user=" + user +
                ", car=" + car +
                ", date=" + date +
                ", time=" + time +
                '}';
    }
}

src - webapp - new - other - jsp

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c"   uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
	<title>JSTL</title>
</head>
<body>
<c:set var="to"   value="10"/>
<c:set var="arr"  value="10,20,30,40,50,60,70"/> 
<c:forEach var="i" begin="1" end="${to}">
	${i}
</c:forEach>
<br>
<c:if test="${not empty arr}">
	<c:forEach var="elem" items="${arr}" varStatus="status">
		${status.count}. arr[${status.index}]=${elem}<BR>
	</c:forEach>
</c:if>	
<c:if test="${param.msg != null}">
	msg=${param.msg} 
	msg=<c:out value="${param.msg}"/>
</c:if>
<br>
<c:if test="${param.msg == null}">메시지가 없습니다.<br></c:if>
<c:set var="age" value="${param.age}"/>
<c:choose>
	<c:when test="${age >= 19}">성인입니다.</c:when>
	<c:when test="${0 <= age && age < 19}">성인이 아닙니다.</c:when>
	<c:otherwise>값이 유효하지 않습니다.</c:otherwise>
</c:choose>
<br>
<c:set var="now" value="<%=new java.util.Date() %>"/>
Server time is <fmt:formatDate value="${now}" type="both" pattern="yyyy/MM/dd HH:mm:ss"/>	
</body>
</html>

 

 

 

 

 

필터를 만들어서 jsp에 적용되는지 확인

package com.fastcampus.ch2;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

// 필터를 적용할 요청의 패턴 지정 - 모든 요청에 필터를 적용.
@WebFilter(urlPatterns="/*")
public class PerformanceFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 초기화 작업
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 1. 전처리 작업
		long startTime = System.currentTimeMillis();

		// 2. 서블릿 또는 다음 필터를 호출
		chain.doFilter(request, response); 
		
		// 3. 후처리 작업
		System.out.print("["+((HttpServletRequest)request).getRequestURI()+"]");
		System.out.println(" 소요시간="+(System.currentTimeMillis()-startTime)+"ms");
	}

	@Override
	public void destroy() {
		// 정리 작업
	}

}

 

첫 호출에 시간이 오래걸린다.

+ 여러개에 적용가능하고 전처리, 후처리 코드는 사실 없어도 된다.

 

 

서블릿은 기본적으로 lazy-init 이지만 loadOnStartup으로 인해 처음에 초기화 가능

그리고 아래는 호출을 할때 우선순위이다.

 

아래와 같이 /hello.do 로 오면 default가 처리한다 (정적 리소스)

 

 

 

 

 

 

el을 실습해 볼 것이다.

 

Car 클래스를 만들고

 

package com.fastcampus.ch2;

public class Car    { 
	private String color = "red"; 
	public String getColor() { return color; }
}

 

 

Person 클래스를 하나 만든다.

package com.fastcampus.ch2;

public class Person { 
	private Car car = new Car(); 
	public  Car getCar() { return car; }
}

 

 

 

src - main - webapp - new - other -jsp 

 

 

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c"   uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="com.fastcampus.ch2.*" %>
<%
	Person person = new Person();
	request.setAttribute("person", person);
	request.setAttribute("name", "남궁성");   
	request.setAttribute("list", new java.util.ArrayList());	
%>
<html>  
<head>   
	<title>EL</title>   
</head>  
<body>   
person.getCar().getColor()=<%=person.getCar().getColor()%> <br>
person.getCar().getColor()=${person.getCar().getColor()} <br>
person.getCar().getColor()=${person.car.color} <br>    
name=<%=request.getAttribute("name")%> <br>   
name=${requestScope.name} <br>
name=${name} <br>
id=<%=request.getParameter("id")%> <br>
id=${pageContext.request.getParameter("id")} <br>
id=${param.id} <br>
"1"+1 = ${"1"+1} <br>
"1"+="1" = ${"1"+="1"} <br>
"2">1 = ${"2">1} <br>   
null = ${null}<br>
null+1 = ${null+1} <br>
null+null = ${null+null} <br>
"" + null = ${""+null} <br>   
""-1 = ${""-1} <br> 
empty null=${empty null} <br>
empty list=${empty list} <br>
null==0 = ${null==0} <br>
null eq 0 = ${null eq 0} <br>
name == "남궁성"=${name=="남궁성"} <br>
name != "남궁성"=${name!="남궁성"} <br>
name eq "남궁성"=${name eq "남궁성"} <br>  
name ne "남궁성"=${name ne "남궁성"} <br>  
name.equals("남궁성")=${name.equals("남궁성")} <br>   
</body>
</html>

 

실행을 해보면 결과물

이제 변환되는 과정을 볼 것이다.

 

deploy 경로를 복사 후 Don't Save

 

 

탐색기로 이동 후 뒤로가기 한번 한 후 - work - Catalina - localhost - app -org - apache - jsp

 

위에 폴더를 타고 들어가면 스프링이 변환 된 뷰 이고

 

el_jsp.java 서블릿 소스 파일

위에 class는 컴파일 된 것이다.

 

 

만약에 실행이 잘 되지 않아서 지우고 싶으면 여기서 맨 위 폴더를 지우고 제외하거나

이러한 방식으로 지울 수 있다.

 

jsp를 변경 시 적용 안될 때 사용하고 다시 실행하면 만들어진다.

 

request에 map형태로 저장하는 과정

 

 

 

위에 처럼 저장을 하지 않으면

아래 방법으로는 el에서 표시할 수 없다.

 

el에서 "1" + 1 = 11가 아닌 문자열이 숫자로 바뀌어서 2로 출력됨.

 

+ Recent posts