티스토리 뷰
📍 서블릿과 JSP페이지 연결
– 데이터 통신. (el표현식)
– 서블릿에서 데이터를 주면 JSP에서 받기.
📃 TestServlet1.java
• 서블릿 작성
– 작성 규칙에 따라 서블릿 만들기.
1. HttpServlet 클래스 상속
2. doget() 메서드 오버라이딩
→ dopost()는 어차피 지금 실현 못하니까 doget()만 오버라이딩 함 .
3. 헷갈리지 않게 매개변수를 request, response로 변경
4. JSP페이지로 정보 전달하기 위해 정보 저장하고 페이지 이동
public class TestServlet1 extends HttpServlet{
// 부모가 서블릿이니 자식도 서블릿
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestServlet1 - doGet() 호출");
// response.getWriter().append("Hello!");
// 서블릿 → JSP페이지 정보 전달
// request 영역객체 사용하여 정보 저장
request.setAttribute("test1", 1000);
// session 영역객체 사용하여 정보 저장
HttpSession session = request.getSession();
session.setAttribute("test1", 1000);
// JSP페이지 연결
RequestDispatcher dis
= request.getRequestDispatcher("./el/attribute.jsp"); // webapp 폴더 밑의 실제주소
dis.forward(request, response);
}
}
코드 분석
10 | – 이렇게 화면에 출력이 가능 하지만 사용해야 할 코드들이 너무 길고 복잡함. → JSP페이지에 코드를 작성하고 서블릿에 연결해서 사용. |
12, 13 | – 영역객체를 사용하여 서블릿 → JSP페이지로 정보 전달하기 – JSP 영역객체 : page(pageContext), request, session, application |
14 | – request 객체 사용하여 정보 저장함. ▪ set.Attribute() 메서드의 정보 – void javax.servlet.ServletRequest.setAttribute(String name, Object o) – 파라미터의 Object타입에 int타입 1000 데이터가 들어감. (업캐스팅) → 엥? Object타입을 상속할 수 있는건 '참조형'만 가능, '기본형'은 불가능. → 오토박싱으로 int타입이 integer타입(객체)으로 변경되어 가능했던 것. |
17, 18 | – session 객체 사용하여 정보 저장함. – request 객체는 기본적으로 '요청'의 역할 → 대부분의 web정보를 들고올 수 있음. |
21, 22 | – RequestDispatcher 인터페이스 사용. → 인스턴스 생성X, 내장객체를 이용하여 포워딩방식으로 페이지 이동함. – 괄호 안에 이동할 JSP페이지 작성. – ./ 상위폴더에 접근하기 위한 경로를 나타냄. |
23 | – 이동 방식 → 포워딩 방식 – 해당 request는 test1 변수의 '1000' 이라는 데이터를 가지고 이동함. – 포워딩 방식은 request, session, application 영역의 정보 모두 이동 가능. |
▸ 경로
1. 절대 경로
– 최초의 시작점으로 경유한 경로를 전부 기입하는 방식.
– 어떠한 OS던 최상위 루트 로부터 경유한 경로를 전부 기입한 절대 경로로만 파일을 찾을 수 있음.
ex ) C:\Users\UserID\Desktop\test.txt
2. 상대 경로
– 상대 경로는 항상 비교할 대상이 있어야 함.
– 기준 경로를 기준으로 절대 경로가 구성되며,
상대 경로로 파일의 위치를 찾을 수 있는 이유는 기준 경로가 절대 경로로 변환하여 OS에게 전달 하기 때문.
→ 즉, 비교 대상이 '지금 내 위치'에 주어지는 상황.
ex ) C:\Mommoo\Desktop\test.txt
C:\Mommoo\test.txt
최상위 경로 (root) | / |
현재 내위치 | ./ 파일명 |
현재폴더 | 파일명 |
상위폴더 | ../ 파일명 |
하위폴더 | 디렉토리명 / 파일명 |
📃 WEB.xml
• TestServlet1 매핑
– 어노테이션으로 간단하게 사용 가능 하지만, 서블릿으로 구현하는 기존의 방법도 알아야하므로 작성함.
<servlet>
<servlet-name>TestServlet1</servlet-name>
<servlet-class>com.itwillbs.servlet.TestServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet1</servlet-name>
<url-pattern>/test1</url-pattern>
</servlet-mapping>
코드 분석
2 | – 설정 파일 내부에서 사용되는 임의의 서블렛명. |
3 | – 실질적으로 요청에 대해 처리될 물리적인 서블렛 클래스명. |
7 | – 설정파일 내부에서 사용되는 임의의 서블렛명. '<servlet>' 엘리먼트에 정의된 이름과 일치해야함. |
8 |
– url 상에서 실질적으로 요청되는 서블렛명. |
📃 TestServlet1.java
• 매핑 확인
public class TestServlet1 extends HttpServlet{
// http://localhost:8088/JSP7/test1
– xml파일에서 매핑값을 줬으므로 제대로 매핑되었는지 확인하기.
– 페이지 실행 시, 화면 url에 해당 주소가 뜨고 빈 페이지면 제대로 매핑된 것.
– 이제부터 해당 파일 실행할 때 Ctrl + URL + 클릭으로 실행하기.
📃 attribute.jsp
• '속성' 으로 전달된 정보 저장
– 서블릿 페이지에서 attribute 속성을 사용하여 JSP페이지로 정보를 전달했으므로 해당 정보를 가져와 저장하겠음.
<h1>/el/attribute.jsp</h1>
<!-- 서블릿에서 전달된 '속성'정보 저장 -->
<%
int num1 = (Integer)request.getAttribute("test1");
%>
<!-- 스크립틀릿 엘리먼트 : (변수) Java코드로 작성 -->
속성(jsp) : <%=num1 %> <br>
<!-- el표현식 엘리먼트 : (속성) attribute -->
속성(el) : ${num1 }
속성(el) : ${requestScope.test1 } <!-- 정확한 표현 (영역객체.변수) -->
속성(el) : ${test1 }
<hr>
<!-- 영역객체에서 데이터 전달받아 저장 -->
test1(requestScope) : ${requestScope.test1 } <br>
test1(sessionScope) : ${sessionScope.test1 } <br>
test1 : ${test1 } <br>
코드 분석
5 | ▪ 서블릿에서 전달된 '속성' 정보 저장 – Object타입을 integer로 캐스팅하고, integer에서 int로 오토 박싱. – 변수 num1은 자바코드로 작성되어있을 뿐, 실제로 request 객체에 저장되어있는 데이터는 '변수 test1'이며 'test1'이 담고 있는 데이터는 '1000' |
14 | – Java코드로 작성된 변수는 출력 안됨. |
15 | – 정확한 표현 (영역객체.변수) – request에 있는 '속성' 정보를 받음. → getAttribute() 와 같음. |
16 | – 영역객체 생략 가능. – 영역객체 생략 시, 순차적으로 접근 (p → r → s → a)하여 해당 객체를 찾을 때까지 진행. 해당 객체를 찾을 경우, 다른 영역에 동일한 객체가 있어도 무시. – 전달 정보가 많다면 헷갈리지 않기 위해 하나의 영역객체를 사용할게 아닌, 각자 영역객체를 따로 지정해주면 됨. |
21~23 | – 이렇게 영역객체를 이용해서 서블릿의 데이터를 JSP 페이지로 전달할 수 있음. |
• TestServlet1.java 실행
– TestServlet1.java 페이지를 실행해야 서블릿에서 저장한 정보를 attribute.jsp 페이지로 전달하여 출력할 수 있으므로
attribute.jsp 페이지가 아닌 TestServlet1.java 페이지를 실행함.
→ 서블릿 페이지를 실행하여 정보 전달하고 해당 정보들로 JSP 페이지의 코드를 실행하는 것.
✓ 실행 결과
📃 TestServlet2.java
• 서블릿 작성
1. HttpServlet 클래스 상속
2. doget() 메서드 오버라이딩
3. 헷갈리지 않게 매개변수를 request, response로 변경
public class TestServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestServlet2-doGet()");
}
}
📃 WEB.xml
• 서블릿 매핑
<servlet>
<servlet-name>TestServlet2</servlet-name>
<servlet-class>com.itwillbs.servlet.TestServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet2</servlet-name>
<url-pattern>/test2</url-pattern>
</servlet-mapping>
📃 TestServlet2.java
• 매핑 확인
public class TestServlet2 extends HttpServlet {
// http://localhost:8088/JSP7/test2
}
• 서블릿 정보 → jsp페이지로 전달
public class TestServlet2 extends HttpServlet {
// http://localhost:8088/JSP7/test2
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestServlet2-doGet()");
// 서블릿 정보 저장
String[] foods = {"짜장면", "짬뽕", "삼겹살", "국밥", "돈까스", "밀면"};
request.setAttribute("foods", foods);
// 리스트 객체 정보 저장
ArrayList<String> sports = new ArrayList<String>();
sports.add("축구");
sports.add("야구");
sports.add("배구");
sports.add("농구");
sports.add("탁구");
sports.add("당구");
request.setAttribute("sports", sports);
// 페이지 이동
RequestDispatcher dis
= request.getRequestDispatcher("./el/arrays.jsp");
System.out.println("/el/arrays.jsp 페이지로 이동");
dis.forward(request, response);
}
}
코드 분석
13 | – request 영역객체에 배열 객체 정보 저장하여 전달함. |
16~22 | – 리스트 생성해서 데이터 입력함. – 데이터는 항상 페이지 이동하는 코드 위에서 생성하고 저장해야 함. |
23 | – request 영역객체에 리스트 객체 정보 저장하여 전달함. |
23~30 | – request 영역의 데이터를 전달하기 위해 포워딩 방식으로 페이지 이동함. |
📃 arrays.jsp
1. JSP 코드로 전달정보 저장하고 '표현식' 으로 출력
– JSP 반복문 사용으로 모든 배열의 요소에 접근하여 출력 가능.
<%
// 전달 정보 저장 (다운캐스팅)
String[] foods = (String[])request.getAttribute("foods");
%>
음식 : <%=foods %> <br>
<!-- 반복문으로 모든 배열의 요소에 접근하여 출력 -->
<%
for(int i=0; i<foods.length; i++){
%>
음식 : <%=foods[i] %> <br>
<%
}
%>
✓ 실행 결과
2. 영역객체로 전달정보 저장하고 'el표현식' 으로 출력
– JSP 반복문 사용 불가.
음식(el) : ${requestScope.foods } <br>
음식(el) : ${requestScope.foods[0] } <br>
음식(el) : ${requestScope.foods[1] } <br>
<hr>
– String배열로 담아옴.
– toString() 메서드의 기본형이 출력됨.
✓ 실행 결과
3. 전달받은 리스트 객체 정보 출력
<%
ArrayList sports = (ArrayList) request.getAttribute("sports");
%>
스포츠 : <%=sports.get(0) %> <br>
스포츠 : <%=sports %> <br>
스포츠(el) : ${requestScope.sports[0] } <br>
스포츠(el) : ${sports } <br>
– ArrayList 객체로 담아옴.
– toString() 메서드의 오버라이딩 된 출력 결과가 나옴.
– String 배열은 배열 크기가 고정되어 있지만, ArrayList는 가변길이 언제든지 배열크기가 바뀔 수 있음.
✓ 실행 결과
📃 TestServlet3.java
• 서블릿 작성
– 이클립스 도구를 활용하여 파일 생성 시 HttpServlet 을 상속받음.
– 이제 xml파일에 매핑하지 않고 어노테이션을 사용하여 바로 매핑함.
→ @WebServlet("/test3")
→ 만약 어노테이션도 적용하고 xml파일도 적용하면 충돌되어 에러 발생하므로 하나만 선택해서 서블릿 매핑하기.
@WebServlet("/test3")
public class TestServlet3 extends HttpServlet {
// http://localhost:8088/JSP7/test3
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
}
✓ 실행 결과

📃 Person.java
• Person 클래스 정의
public class Person{
private String name;
private Phone phone; // Phone 클래스의 phone
// getter setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
// toString() 메서드 오버라이딩
@Override
public String toString() {
return "Person [name=" + name + ", phone=" + phone + "]";
}
}
– 객체 속성 (멤버변수)을 정해줌.
– 멤버변수로 지정한 phone의 Phone 클래스가 정의되지 않았으므로 정의해야 함.
– private 접근제한자니까 getter & setter 만들고 toString() 메서드 오버라이딩 함.
📃 Phone.java
• Phone 클래스 정의
public class Phone {
private String model;
private String telNo;
// getter & setter
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getTelNo() {
return telNo;
}
public void setTelNo(String telNo) {
this.telNo = telNo;
}
// toString() 메서드 오버라이딩
@Override
public String toString() {
return "Phone [model=" + model + ", telNo=" + telNo + "]";
}
}
– Phone 객체가 없으므로 객체 생성함.
– 객체 속성 (멤버변수)을 정해줌.
– private 접근제한자니까 getter & setter 만들고 toString() 메서드 오버라이딩 함.
📃 TestServlet3.java
• 서블릿 → JSP 페이지 정보 전달
@WebServlet("/test3")
public class TestServlet3 extends HttpServlet {
// http://localhost:8088/JSP7/test3
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 서블릿 → JSP페이지 정보 전달
// 1. 객체 정보 생성
Phone p = new Phone();
p.setModel("아이폰20");
p.setTelNo("010-1234-5678");
Person hong = new Person();
hong.setName("홍길동");
hong.setPhone(p);
// 2. 객체 정보 저장
request.setAttribute("person", hong);
// 페이지 이동
RequestDispatcher dis
= request.getRequestDispatcher("./el/object.jsp");
System.out.println("./el/object.jsp 페이지로 이동.");
dis.forward(request, response);
}
}
코드 분석
12~14 | – Person 객체에 Phone 정보가 포함되므로 Phone 객체 먼저 생성 후 Person 객체 생성함. |
18 | – Person의 Phone 정보에 Phone 객체를 바로 저장해주면 멤버변수인 핸드폰 모델과 번호 다같이 저장 가능. |
21 | – request 객체의 setAttribute("변수명", 저장할 데이터) 메서드를 사용하여 데이터 저장. |
24~28 | – RequestDispatche 인터페이스를 사용하여 포워딩 방식으로 페이지 이동. – 포워딩 방식으로 이동 시, request 객체의 정보도 같이 전달할 수 있음. → 저장한 데이터와 함께 'object.jsp' 페이지로 이동함. |
📃 object.jsp
• 전달된 정보 출력
<h1>object.jsp</h1>
사용자 정보 : ${requestScope.person } <br>
사용자 이름 : ${person.name } <br>
사용자 휴대폰 모델명 : ${requestScope.person.phone.model } <br>
사용자 휴대폰 전화번호 : ${person.phone.telNo } <br>
코드 분석
3, 4 | – requestScope 영역객체명 생략 가능. – el표현식으로 request영역에 저장된 person정보 출력해야함. – requestScope 객체 사용하여 person정보, person의 name정보 출력 가능. |
6, 7 | – Person 객체 정보 안에 있는 Phone 객체 정보 안에 있는 model 정보 == 모델명 – Person 객체 정보 안에 있는 Phone 객체 정보 안에 있는 telNo 정보 == 폰번호 – Person 객체의 phone 정보에 p (Phone 객체)를 저장했으므로 정보를 불러올 수 있음. – 좀 더 많은 정보를 주고 받을 때는 '배열'을 이용함. |
✓ 실행 결과
🐾 참조 도서 및 사이트 🐾
'JSP' 카테고리의 다른 글
JSTL 국제화 & 형식화 액션 — fmt (0) | 2023.04.14 |
---|---|
JSTL의 기본액션 — core (0) | 2023.04.13 |
JSTL (JSP Standard Tag Library)과 EL (Expression Language) (0) | 2023.04.13 |
서블릿 (Servlet) / 동작 원리 / 작성 규칙 / 전체적인 코드의 흐름 (0) | 2023.04.13 |
게시판 만들기 (글 쓰기) (0) | 2023.04.10 |
- Total
- Today
- Yesterday
- Java
- 매개변수
- github
- mysql
- 내장객체
- 데이터타입
- jsp
- 업캐스팅
- 단일행함수
- DB
- Git
- gitbash
- 오버라이딩
- 논리형
- 주석문
- 문자형
- 인자
- Object
- 제어문
- 출력문
- 다형성
- 로컬저장소
- Dao
- Method
- javascript
- JSTL
- 원격저장소
- 숫자형
- model2
- null
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |