본문 바로가기

Front End

el


** 자바(jsp)에서 처리를 수행한 후 결과 페이지로 이동하기

1. forwarding : url을 변경하지 않고 이동

- 새로고침을 하면 처리를 다시 수행


1) 태그로 이동하는 방법

<jsp:forward page="이동할 url"/>


2) 자바 코드로 이동하는 방법

<%

RequestDispatcher ? = request.getRequestDispatcher("이동할 url");

?.forward(request, response)

%>


2. redirect : url을 변경해서 이동

- url을 변경했기 때문에 새로고침을 하면 처리를 다시 수행하지 않고 결과 페이지만 다시 출력

<%

response.sendRedirect("이동할 url")

%>




**처리한 후 결과를 출력하는 페이지에 전달하기

- request, session, application 이용 가능

- request는 forwarding 했을 때만 데이터가 전달

- session 과 application은 이동 방법 상관없이 데이터가 전달


1. 저장하는 메소드

<%

setAttribute(String name, Object value);

%>


2. 읽어오는 메소드

<%

Object getAttribute(String name);

%>


3. 삭제하는 메소드

<%

void removeAttribute(String name);

%>



** EL

- Expression Language : jsp에서 java로 만들어진 데이터를 편리하게 출력하기 위한 식.


1. attribute 출력

${attribute이름}

- null은 출력되지 않습니다.

- 자동으로 형 변환하기 때문에 숫자 데이터 나 문자 데이터의 경우 연산이 가능.

- Boolean, 숫자 데이터, 문자열이 아닌 경우는 toString의 결과를 출력.


실습

- attribute를 생성하고 forwarding 하는 파일 : el/attrcreate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

//데이터 저장

request.setAttribute("name", "루루");

//결과 페이지로 포워딩

RequestDispatcher dispatcher = request.getRequestDispatcher("attrdisplay.jsp");

dispatcher.forward(request, response);

%>



- attribute를 출력하는 파일 : el/attrdisplay.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

h1{

text-align:center;

}

img{

display:block;

margin-left:auto;

margin-right:auto;

}

</style>

</head>

<body>

<p>

<h1>고양이 이름: ${name}</h1>

<img src="../images/루루5.gif">

</p>

</body>

</html>


2. el에서 전달되는 데이터가 없는 경우 null로 간주해서 출력을 하지 않는데 산술연산의 경우는 0으로 간주해서 연산을 합니다.


3. el에서 이름만 사용한 경우 page → request → session → application 순으로 찾아서 데이터를 사용합니다.

직접 지정을 하고자 하는 경우는 pageScope.이름의 형태로 scope를 직접 지정해주면 됩니다.



** parameter

- 클라이언트에서 서버로 전달하는 데이터


1. 전달 방법

- url?이름=값&이름=값‥‥

- form을 만들어서 사용자의 입력을 받아서 전송 : name이 있는 데이터만 전송이 됨.

- el로 parameter를 출력하고자 하는 경우

${param.파라미터이름}

${paramValues.파라미터이름}



** Cookie

- 클라이언트의 정보를 클라이언트의 브라우저에 저장하고 서버가 이용하는 데이터


1. 생성 및 저장

Cookie ? = new Cookie(String name, String value);

response.addCookie(?);


2. 모든 쿠키 가져오기

Cookie [] ? = request.getCookies();

- 배열을 순회하면서 getName(), getValue()를 이용해서 쿠키의 이름과 값을 읽을 수 있습니다.(null 이 아닌 값만 순회하도록 코드 작성)


3. 쿠키 삭제

setMaxAge(초단위)를 이용해서 삭제되는 시간을 지정해서 시간이 되면 삭제되도록 합니다.


4. el에서의 쿠키 출력

${cookie.쿠키이름}


실습

- 파라미터와 쿠키를 생성하고 다른 jsp 파일에서 el을 이용해서 출력하기


- 파라미터와 쿠키를 생성하는 파일 : paramcookiecreate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>파라미터와 쿠키 생성 및 저장</title>

</head>

<body>

<%

//쿠키 생성과 저장

Cookie cookie = new Cookie("sessionid", "디디");

response.addCookie(cookie);


%>


<a href="paramcookiedisplay.jsp?name=츄츄">파라미터 출력</a>



</body>

</html>



- 파라미터와 쿠키를 출력하는 파일:paramcookiedisplay.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<p>파라미터 : ${param.name}</p>

<img src="../images/chuchu.gif" width="300px"/>

<p>쿠키의 해시코드 : ${cookie.sessionid}</p>

<p>쿠키 : ${cookie.sessionid.value}</p>

<img src="../images/디디1.gif" width="300px"/>

</body>

</html>



** 초기화 파라미

- web.xml 파일에 name 과 value 를 설정해두고 애플리케이션이 시작할 때 읽어서 application 객체에 저장하는 데이터

- 초기화 파라미터는 처음에 설정된 내용을 읽을 수는 있지만 수정할 수는 없습니다.

- 어떤 설정 내용이 변경 가능성이 있는 경우 web.xml 파일에 작성해두는 것이 좋습니다.

- 변경 가능성이 있는 내용을 java 코드에 문자열 상수를 이용해서 대입하면 변경을 하게 되면 문자열 상수를 변경해야 하는데 코드가 변경된 것이므로 java 파일들을 다시 컴파일해서 class 파일로 만들어 주어야 합니다.

- 컴파일을 다시 해서 클래스를 다시 만들게 되면 예기치 않은 오류가 발생할 수 있습니다.

- 이러한 오류를 줄이는 방법으로 변경 가능성이 있는 설정 내용을 파일에 기록해두고 읽게 되면 내용이 변결되더라도 자바 코드를 변경한 것이 아니기 때문에 컴파일을 다시 할 필요가 없습니다.


- .java(Source File - 개발자가 작성) -> .class(중간 코드-IDE가 생성하거나 직접 컴파일) -> run

- .java를 만들면 .java 파일을 수정하면 IDE가 자동으로 인식해서 .class를 다시 만들어줍니다.

- IDE가 종종 class 파일을 만드는데 실패하는 경우가 있습니다.

- .java는 있어도 .class가 없기 때문에 ClassNotFoundException 이 발생합니다.

- 소스 수정이 거의 없도록 만들어 주어야 합니다.

- 변경 가능성이 있는 숫자나 문자열 데이터는 되도록이면 별도의 파일에 작성해서 읽도록 해주는 것이 좋습니다.

- 이렇게 하면 숫자나 문자열 데이터가 변경이 되더라도 소스코드 변경 없이 데이터를 사용할 수 있습니다.


- java web application은 시작될 때 web.xml 파일을 읽고 시작합니다.

-변경 가능한 데이터를 web.xml 파일에 기록해 두게 되면 다른 파일을 생성해서 저장할 필요가 없어집니다.


1. 데이터 저장 : web.xml

<context-param>

<param-name>파라미터이름</param-name>

<param-value>파라미터 데이터</param-value>

</context-param>


2. 데이터 읽기

application.getinitParameter(String 파라미너이름)


3. el을 이용해서 출력하기

${initParam.파라미터이름}


- 데이터 베이스 접속 정보를 이러한 형태로 저장하는 경우가 많습니다.



** EL[각주:1]에서의 배열과 List

= 배열과 List(ArrayList, LinkedList Stack, Queue, Deque) 모두 비교 가능한 여러 개의 데이터를 하나의 이름으로 묶는 것이 목적입니다.

= Java에서 각각의 데이터를 접근할 때 배열은 [인덱스]를 이용하고 List는 get(인덱스)를 이용합니다.

= EL에서는 [인덱스]를 이용해서 List의 데이터도 접근할 수 있도록 해줍니다.

***

= 이런 이유로 EL을 이용해서 출력하게 되면 배열과 List는 동일한 접근방법을 이용하게 됩니다.

= 요청 -> 처리 -> 출력을 구분해서 프로그램을 작성하게 되면 처리 부분에서 자료구조를 변경하더라도 출력부분을 변경하지 않아도 됩니다. : MVC 패턴을 사용하는 근본적인 이유


실습 : 배열과 List의 출력

- 배열과 List를 만들어서 데이터를 전달해주는 페이지 : listcreate.jsp

데이터를 전달해주는 페이지는 나중에 Java 파일로 변경됩니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@ page import="java.util.*" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>배열과 리스트 생성</title>

</head>

<body>

<% 

/*

//배열을 생성

String [] ar = {

                   "JavaScript",

                   "Java",

                   "Swift"

                   };

//배열의 데이터를 List라는 이름으로 request 객체에 저장

                   request.setAttribute("List", ar);

                   */


//리스트 생성

List<String> list = new ArrayList<>();

                   list.add("HTML");

                   list.add("CSS");

                   list.add("JavaScript");

//배열의 데이터를 List라는 이름으로 request 객체에 저장

                   request.setAttribute("List", list);

                   

                   

                   

                   //결과를 출력할 페이지로 포워딩

                   RequestDispatcher dispatcher = request.getRequestDispatcher("listdisplay.jsp");

                   dispatcher.forward(request,response);

                   %>

</body>

</html>



-결과를 출력하는 페이지 : listdisplay.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>배열과 List 출력 페이지</title>

</head>

<body>

<!-- EL을 이용해서 배열의 데이터 출력 -->

${List[0] }<br/>

${List[1] }<br/>

${List[2] }<br/>

</body>

</html>



= 첫번째 파일을 실행 - 배열과 List 생성하는 부분을 주석처리하면서 실행

= 출력하는 파일의 내용을 변경하지 않아도 변경 내용이 적용됩니다.



** EL에서의 Map 과 DTO(VO)

= EL에서는 Map 과 DTO 가 프로퍼티에 접근하는 방법도 동일합니다.

= ["키이름 이나 프로퍼티이름"] 또는 .키이름 이나 프로퍼티이름 을 이용해도 됩니다.

= 프로퍼티는 변수명이 아니고 getter 와 setter에서 get 과 set을 제외한 부분입니다.

= 프로퍼티라고 할 때는 접근자 메소드를 의미하는 것입니다.


1. Map

1) Map 생성

Map<String, Object> 변수명 = new HashMap<>();


2) 데이터 저장

변수명.put("키이름", 데이터);


3) 데이터 읽기

변수명.get("키이름");


4) 데이터 삭제

변수명.remove("키이름");


※에러 메시지

vo.Person1 cannot be resolved to a type는 vo.Person1.class 파일이 없다는 에러입니다.

만약 .java 파일이 있는데도 이런 에러가 발생한다면 다른 패키지에 동일한 클래스를 만들어서 코드를 수정한 후 다시 실행하면 됩니다.

원래 패키지 이름을 사용하고자 하면 다시 만들면 됩니다.


2. property (프로퍼티)

= 사용은 변수처럼 하는데 실제로는 getter 와 setter 메소드를 호출하는 것이다.


실습 : Map과 VO 클래스를 생성해서 전달하고 출력

- dto.Cats 클래스 생성

package dto;


public class Cats {

protected String name;

protected int _age;



public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

System.out.println("get 호출");

return _age;


}

public void setAge(int age) {

this._age = age;

}

}



- Map 과 Cats 인스턴스를 생성해서 request에 저장하고 포워딩하는 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@ page import="java.util.*" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

/*

//Map 데이터 생성

Map <String, Object> map = new HashMap<>();

map.put("name", "루루");

map.put("age", "24");


//request에 저장

request.setAttribute("data", map);

*/


//DTO(VO) 클래스로 데이터 생성

dto.Cats cats = new dto.Cats();

cats.setName("루루");

cats.setAge(24);


//request에 저장

request.setAttribute("data", cats);



//결과를 출력할 페이지로 포워딩

RequestDispatcher dispatcher = request.getRequestDispatcher("mapdisplay.jsp");

dispatcher.forward(request,response);

%>

</body>

</html> 


- 출력하는 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

${data["name"]}

${data.age }

</body>

</html> 


  1. 자바의 데이터를 jsp에서 출력하기 위한 식 [본문으로]

'Front End' 카테고리의 다른 글

서블릿  (0) 2018.08.31
커스텀태그(JSTL)  (0) 2018.08.30
javabean & error  (0) 2018.08.29
쿠키와 세션  (0) 2018.08.28
[0827]javaweb2  (0) 2018.08.27