본문 바로가기

JSP

JSP_2강

  상황처리

3. (jsp -> ) controller - [데이터] -> 페이지(jsp)

Model 객체 사용 방법)1강에서 정리

 

ModelAndView 객체 사용 방법)

Model과 페이지 지정 문자열을 합쳐서 처리하는 객체이다. 기능에 대한 실제 처리를 담당하는 클래스가 Service인데, 이때 Service 클래스에서 처리된 데이터를 전송하는 형태가 적절하다.

 

데이터 입력용 메소드 = addObject("이름표", 데이터);

 

jsp 페이지에서 데이터 꺼내는 방법
Expression Language(EL)   jsp 출력용 라이브러리
JSTL   자바 코드를 대체하는 태그 라이브러리 => 자바 코드의 제어문을 태그 형식으로 작성

- nowdate.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Js Framework Today</title>
</head>
<body>
<h1>오늘의 날짜</h1>
<p>${date}</p>
</body>
</html>

 

- index.jsp

index.jsp에서 위 nowdate.jsp 파일에 대해 링크 연결을 해준다.

<a href="dateProc">[오늘의 날짜]</a>

 

- package.controller.HomeController.java

@RequestMapping("dateProc")
public ModelAndView dateProc(){
    log.info("dateProc()");
    
    ModelAndView mv = new ModelAndView();
    Date now = new Date();
    
    // 날짜 출력 형태 지정
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 (E)");
    
    // 출력 형태에 현재 날짜 변수 삽입
    String nowDate = sdf.format(now);
    log.info(nowDate);
    
    //ModelAndView에 데이터 담기 : addObject("이름표", 데이터);
    mv.addObject("date", nowDate);
    
    //view를 지정
    mv.setViewName("nowdate");
    
    return mv;
}

  URL Mapping용 annotation

1. RequestMapping(기본 어노테이션)

RequestMapping은 클래스와 메소드 수준에서 모두 사용 가능한 어노테이션이다. 요청 주소와 요청 방식을 설정할 수 있으며, 요청 방식들을 동시에 설정할 수도 있다.

 

작성법 : @RequestMapping(value = "url", method = Request.GET)

value : 매핑될 url 작성

method : 전송 방식을 지정(get / post) => get 방식일 경우 method 생략 가능

 

컨트롤러 클래스 전체에 하나의 url을 매핑할 수 있다. 매핑하는 방식은 다음과 같다.

 

https://www.naver.com/news/financial
https://www.naver.com/news/life
=> 컨트롤러 클래스에 @RequestMapping("news") 작성
     해당 메소드에 @RequestMapping("financail") 작성
     다른 메소드에 @RequestMapping("life")

 

2. GetMapping / PostMapping

GetMapping은 URL에 변수(데이터)를 포함시켜 요청하는 어노테이션이다. 데이터를 헤더에 포함하여 전송하고, 캐싱이 가능하나 URL에 데이터가 노출되어 보안에 취약하다는 단점이 있다.

반대로 PostMapping은 URL에 변수(데이터)를 노출하지 않고 요청하는 어노테이션이다. 데이터를 바디에 포함하며, 캐싱을 할 수 없고 URL에 데이터가 노출되지 않아 GET 방식보다 보안이 높다.

 

최근 RequestMapping보다 GetMapping 및 PostMapping을 사용하는 이유는 코드를 더 간결하게 쓸 수 있다는 점에서도 있지만 URL의 중복 사용을 위해서도 있다. 하나의 URL로 두 개 이상의 매핑을 처리할 수 있다는 의미이다. 예를 들어 /ssesrh라는 URL을 가지고 매핑을 할 때 @RequestMapping(value = "/ssesrh", method = "get")을 썼다면 post 방식을 요청받을 땐 다른 URL을 사용해야 한다. 그러나 @GetMapping과 @PostMapping은 같은 URL을 사용할 수 있다. 더불어 코드를 통해 어떤 전송 방식인데 확인이 가능하다는 장점이 존재한다.

따라서 GetMapping과 PostMapping을 사용하는 것을 장려하는 추세이다.

  JSP 문서 구성

Directive(지시자)   JSP 페이지에 대한 설정 정보를 지정할 때 사용
  - page : 기본적으로 필요한 지시자. 문서 타입이나 라이브러리 포함용
  - taglib : JSTL을 사용하기 위한 지시자
  - include : 다른 jsp 페이지를 포함하여 하나의 페이지를 만드는 지시자
Scriptlet(스크립트릿)   자바 코드 작성 영역
Decalration(선언부)   메소드 선언용 영역
Expression(표현식)   웹 페이지에 출력
EL(Expression Language, 표현 언어)   Expression 대신 사용 => 데이터의 출력에 보편적으로 사용하는 방식
JSTL(Java server page
Standard Tag Library)
  taglib 지시자와 함께 사용 => Java의 제어문(if, for 등)을 태그 형태로 제공하는 라이브러리
<!-- HTML용 주석 -->
<%-- JSP용 주석 --%>
<%-- page 지시자 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%! // 선언부(Declaration)
    // 자바의 주석
    public int add(int a, int b){
        int c = a + b;
        return c;
    }
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%  //Scriptlet 영역(자바 코드를 작성하는 영역)
    int num1 = 100;
    int num2 = 200;
    int res = add(num1, num2);
%>
<p><%=num1%>과 <%=num2%>의 합은 <%=res%>입니다.</p>
<p><%=num1%>에서 <%=num2%>를 빼면 <%=num1-num2%>입니다.</p>
<p><%=add(15, 20)%></p>
<%
    for(int i = 0; i < 5; i++){
%>
        <p><%=i%>번째 문장</p>
<%
    }
%>
<hr>
<%@ include file="jspbasic.jsp"%>
</body>
</html>

  EL(Expression Language)

EL은 위에서 설명했듯 JSP의 표현식인 Expression 대신 사용하는 출력용 방식을 말한다.

문법은 ${변수|연산식}이며, EL 내에서의 연산자 활용은 산술, 비교, 논리, 조건 등이 있다.

또한, empty 연산자가 존재하는데, 전송 데이터가 비어 있음(없음)에 대한 처리를 위한 연산자이다. => 비어 있음 : true

EL은 자바스크립트에서도 사용 가능하지만, 단순 출력용 도구일 뿐인 것을 기억해두어야 한다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Js Framework EL</title>
</head>
<body>
<h1>EL 활용</h1>
<p>첫번째 데이터 : ${d1}</p>
<p>두번째 데이터 : ${d2}</p>
<h2>EL과 연산자 활용</h2>
<p>덧셈 : ${d1 + d2}</p>
<p>곱셈 : ${d1 * d2}</p>
<p>비교 : 첫번째 데이터가 크다? ${d1 > d2}</p>
<p>비교 : 두 데이터가 같다? ${d1 == d2}</p>
<p>논리 : 두번째 데이터가 크고 양수다?
    ${(d1 < d2) && (d2 > 0)}
</p>
<p>조건 : 두 데이터가 다르다? ${(d1 != d2)? "다르다" : "같다"}</p>
<hr>
<h2>안녕하세요, ${(empty id) ? "Guest" : id}님.</h2>
</body>
</html>

  인터넷 서비스 관련 객체

  • request : 사용자의 요청을 저장하여 서버로 전달하는 객체. url값, 입력 데이터 등을 포함.
  • response : 서버에서 처리된 결과를 사용자에게 전달하는 객체. 사용자의 위치 정보.
  • session : 한 사용자가 한 서버에 접속한 시점부터 접속을 종료한 시점까지 유지되는 객체. 로그인 정보를 저장하거나 view로 전달할 데이터가 있을 때 활용. (model과는 다른 저장 공간)

 

'JSP' 카테고리의 다른 글

JSP_5강(MVC)  (0) 2022.11.01
JSP_4강  (0) 2022.10.23
JSP_3강  (0) 2022.10.22
JSP_1강  (0) 2022.10.18
JSP_0강  (0) 2022.10.17