본문 바로가기
front-end

[JSP] JSP의 개념

by CodeMango 2023. 2. 8.

jsp란?

JSP 란 JavaServer Pages 의 약자이며

HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고

그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

 

Servlet : java안에 html 코드 넣어놓은것 (복잡)

jsp : html코드 안에 java 넣어놓은것 (더 쉬움)

참조: https://javacpro.tistory.com/43


scriptlet

java 코드영역을 일컬어 scriptlet이라고 한다.


jsp의 스크립트

scriptlet은 3가지 영역으로 나눠진다. 
1. 선언부 : 변수 선언, 메서드 선언 <%! %> 

                  전역(global)변수, 함수, 클래스


2. 코드부 :  자바 코드를 실행

                  변수 선언, 함수 호출, 객체 생성, 연산, 제어문 사용, 출력 등 <% %>

 

3. 값 :  연산, 출력(변수의 값, 메서드의 결과값)<%= %>

https://javacpro.tistory.com/43 참조


sendRedirect 와 setAttribute의 차이

sendRedirect : 짐 안가지고 감

setAttribute : 짐 가지고 감

 


내장객체(암시객체)

* 동적으로 할당(객체 생성)하지 않고 (언제든지 바로)사용할 수 있는 객체

내장 객체반환값 타입설명
request javax.servlet.http.httpServletRequest
또는 javax.servlet.ServletRequest
웹 브라우저의 요청 정보를 저장하고 있는 객체
1) parameter 값을 취득 2) session에 접근 3) object 전송 4) encoding 설정
response javax.servlet.http.httpServletResponse
또는 javax.servlet.ServletResponse

웹 브라우저의 요청에 대한 응답 정보를 저장하는 객체
이동 시 사용
out javax.servlet.jsp.JspWriter JSP 페이지의 출력할 내용을 가지고 있는 웹출력 스트림 객체 
session javax.servlet.http.HttpSession 하나의 웹 브라우저 내에서 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체
짐을 보관하고 나중에 찾는 개념
application javax.servlet.ServletContext 웹 애플리케이션 Context의 정보를 담고 있는 객체
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장하고 있는 객체
page java.lang.Object JSP 페이지를 구현한 자바 클래스 객체
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 담고 있는 객체
exception java.lang.Throwable JSP 페이지에서 예외가 발생한 경우 사용하는 객체

 

참조: https://pathas.tistory.com/184

 

<out 예제>

<!--  out : 웹출력 - JSP 페이지의 출력할 내용을 가지고 있는 출력 스트림 객체 --> 
<h3>out</h3>

<%
	String title = "hello jsp";
	out.println("<p>" + title + "</p>");   // = servlet java(html)	
%>
<!--  out과 같은 웹출력 기능  -->
<p><%=title %></p>

 

<request 예제>

<!-- request : 1) parameter 값을 취득 2) session에 접근 3) object 전송 4) encoding 설정 -->
<h3>request</h3>

<%
// HttpServletRequest // 원본 이름

	// 4)encoding 설정
	request.setCharacterEncoding("utf-8"); //setCharacterEncoding : servlet에서 한글 깨질때 사용했음 

	// 1)parameter 값을 취득
	String name = request.getParameter("name"); // "name"값을 받아옴
%>

<p><%=name %></p> <!-- %웹에 보이게 하기% --> 

<%  
	String hobby[] = request.getParameterValues("hobby");
						//Parameter의 자료형은 string이다, getParameterValues은 여러개 받을 수 있다.
	for(int i = 0;i < hobby.length; i++){
	%>
		<p><%= hobby[i] %></p>
	<%	
	}
%>

 

session에 접근 : request를 통해 접근하는 방법

<%
// session에 접근
	request.getSession().setAttribute("visited", "1");

// session에 저장된게 뭔지 모르니까 Object에 저장
	Object obj = request.getSession().getAttribute("visited");
// object에 저장된 것을 다시 string으로 변환
	String str = (String)obj;

// 내장객체 out 이용
	out.println("<h5>" + str + "</h5>");
%>
<!--   out문장 이렇게 써도됨-->
<h5><%=str %></h5>

 

<response 예제>

index1.jsp

<!-- response : 이동 -->
<h3>response</h3>

	//변수 선언 가능
	String name = "Tom";
	//단순이동
	response.sendRedirect("default.jsp?name=" + name + "&age=" + 15);

default.jsp

<h1>default.jsp</h1>

	String name = request.getParameter("name");

 	<p>이름:<%=name %></p>

결과 서버창

 

<pageContext 예제>

* Human.java

package sample02;

import java.io.Serializable;

//  Serializable : 직렬화 (dto에는 붙이자)
public class Human implements Serializable{
	String name;
	int age;
	// 기본생성자
	public Human() { 
	}
	// 매개변수가 있는 생성자
	public Human(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	// setter, getter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}	
}

* index1.jsp        

<!-- pageContext : 이동  -->
<h3>pageContext</h3>
<% 
String name = "성춘향";
int age = 16;
// response.sendRedirect("default.jsp?name=" + name + "&age=" + age);

// 짐싸!  (sendRedirect는 짐 안가지고감, setAttribute는 가지고감)
// human 객체 생성
Human human = new Human(name, age);  // Human 객체 생성시 import문도 추가됨
request.setAttribute("lady", human);

// 잘가! = getRequestDispatcher
pageContext.forward("default.jsp"); // pageContext : 이동
%>

* default.jsp

<% 
	Human human = (Human)request.getAttribute("lady");
			// lady로 받는다 : index1에서 request.setAttribute("lady", human); 라고 썼으니까
%>
<p>이름:<%=human.getName() %></p>
<p>나이:<%=human.getAge() %></p>

결과 서버창

 

<session 예제>

*Human.java (생략 : 위 예제와 동일)

 

*index1.jsp

<!--  session : 저장소에 저장 -->
<h3>session</h3>
<%

Human human = new Human("홍두께", 25);

// 짐을 보관해(나중에 찾을꺼임)!
session.setAttribute("man", human); // 이름을 man으로 해서 보관

// 잘가! :이동
response.sendRedirect("default.jsp");
//이동은 pageContext.forward 써도되고 sendRedirect 써도된다.
%>

*default.jsp

<%
// session에 짐 보관해놓은걸 다시 찾는 과정
	Human human = (Human)session.getAttribute("man");
%> 
<p>이름:<%=human.getName() %></p>
<p>나이:<%=human.getAge() %></p>

 

결과 서버창

 

 

댓글