오늘의 코딩순서
(폴더: och06)
- name.html + Greet.java(서블릿 파일) + name.jsp + greet.jsp
- num.html + Fibonazzi.java (서블릿 파일)
(폴더: och07)
- animal.html + animal.jsp
- color.html + color.jsp
- name2.html + name2.jsp
- init.jsp + web.xml
- hundred.jsp + hunResult.jsp / hundred2.jsp + hunResult2.jsp
- mapCreate.jsp + mapView.jsp
- winner.jsp + winnerResult.jsp
- pet.html + pet.jsp
(폴더: och08)
- Product.class + Book.class / +book.html + book1.jsp + productInfo.jsp ==> page 이동 연습
오늘의 코딩 포인트
(폴더: och06)
- name.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function chk() {
if (!frm.name.value) {
alert("너 이름이 뭐니 ?");
frm.name.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<h2>이름을 입력하세요</h2>
<form action="Greet" name="frm" onsubmit="return chk()">
이름: <input type="text" name="name"><p>
<input type="submit" value="확인">
</form>
</body>
</html>
- Greet.java ==> 생성할 때 마지막 옵션에서 init와 destroy에 체크하고 생성하기, c드라이브에 log폴더 만들기
Tip)
- 서블릿 라이프 사이클
- new FileWriter("c:/log/log.txt",true)를 타이핑하면 오류가 뜰텐데, 마우스 대고 surround with try/catch 클릭하기
=> try/catch를 입력하는 유형에는 두가지가 있는데, 시스템에서 강제하는 것이 있고, 개발자가 필요성을 느끼고 삽입하는 경우가 있다
삽입하면 이렇게 됨
log = new PrintWriter(new FileWriter("c:/log/log.txt",true));
↓↓↓ surround with try/catch 클릭한 뒤 변화 결과
try {
log = new PrintWriter(new FileWriter("c:/log/log.txt",true));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
완성본
package och06;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.GregorianCalendar;
/**
* Servlet implementation class Greet
*/
public class Greet extends HttpServlet {
private static final long serialVersionUID = 1L;
PrintWriter log;
/**
* @see HttpServlet#HttpServlet()
*/
public Greet() {
super();
// TODO Auto-generated constructor stub
}
/**
* 생성시
*/
public void init(ServletConfig config) throws ServletException {
try {
System.out.println("세상에 나를 선보이던 날...");
log = new PrintWriter(new FileWriter("c:/log/log.txt",true));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("init 오류");
}
}
/**
* 하늘나라
*/
public void destroy() {
System.out.println("세상에 유언을 남긴 날...");
if (log != null) log.close();
}
/**
* @ 사회활동
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String msg = name + "님 환영합니다\r\n";
System.out.println(name + "님의 사회활동......");
GregorianCalendar gc = new GregorianCalendar();
String date = String.format("%TF %TT\r\n",gc,gc);
log.print(date + msg);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body><h2>인사</h2>"+msg);
out.println("</body></html>");
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
++ System.out.println(name + "님의 사회활동......"); 추가
- greet.jsp
Tip)- flush: 현재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비우는 역할을 함
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function chk() {
if (!frm.name.value) {
alert("너 이름이 뭐니 ?");
frm.name.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<h2>이름을 입력하세요</h2>
<!-- <form action="Greet" name="frm" onsubmit="return chk()"> -->
<form action="greet.jsp" name="frm" onsubmit="return chk()">
이름: <input type="text" name="name"><p>
<input type="submit" value="확인">
</form>
</body>
</html>
<%@page import="java.io.FileWriter"%>
<%@page import="java.io.PrintWriter"%>
<%@page import="java.util.GregorianCalendar"%>
<%@ 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>
<%! //선언하기
//Method, Member변수 소환 ==> init
private PrintWriter pw;
String date;
public void jspInit() {
GregorianCalendar gc = new GregorianCalendar();
date = String.format("%TF %TT", gc, gc);
System.out.println("jspInit date->"+date);
String fileName = "c:/log/" + date.replaceAll(":", "") + ".txt";
// 시간 설정
try {
pw = new PrintWriter(new FileWriter(fileName, true));
} catch (Exception e) {
System.out.println("대박 ! 으이그");
}
}
%>
<%
//doGet, doPost 변수 소환
String name = request.getParameter("name");
System.out.println(name + " 사회활동");
String msg = name + "님 환영합니다\r\n";
out.println(msg + "<p> 현재시간 : " + date); // BROWSER 화면 출력
pw.println(msg + "|\r\n 현재시간 : " + date + "\r\n");
%>
<%!
//Method, Member변수 소환 ==> Destroy()
void jspDestroy() {
System.out.println("greet, 유언을 남기다...");
pw.flush();
if (pw != null)
pw.close();
}
%>
</body>
</html>
- num.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function chk() {
if (!frm.num.value) {
alert("똑바로 해!");
frm.num.focus();
return false;
}
if (isNaN(frm.num.value)) {
alert("숫자라구 으이그!");
frm.num.focus();
frm.num.value = "";
return false;
}
return true;
}
</script>
</head>
<body>
<h2>숫자를 입력하세요</h2>
<form action="Fibonazzi" name="frm" onsubmit="return chk()">
숫자 : <input type="text" name="num"><p>
<input type="submit" value="확인">
</form>
</body>
</html>
- Fibonazzi.java =>init만 설정
Tip
- BigInteger: long함수보다 더 큰 수를 표현할 때 사용함
package och06;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
/**
* Servlet implementation class Fibonazzi
*/
public class Fibonazzi extends HttpServlet {
private static final long serialVersionUID = 1L;
BigInteger[] arr = new BigInteger[100];
/**
* @see HttpServlet#HttpServlet()
*/
public Fibonazzi() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
arr[0] = new BigInteger("1");
arr[1] = new BigInteger("1");
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 2].add(arr[i - 1]); //피보나치의 알고리즘을 표현함
// index 2일때 0 + 1
// index 3일때 1 + 2
// index 4일때 2 + 3
}
System.out.println("Fibonazzi의 add arr에 적용...");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num = Integer.parseInt(request.getParameter("num"));
if (num > 100) num = 100;
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body><h2>피보나치수열</h2>");
for (int i = 0; i < num; i++) {
out.println(arr[i] + "<br>");
}
out.println("</body></html>");
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
(폴더: och07)
- animal.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>문자를 두 개 입력하세요</h2>
<form action="animal.jsp">
동물 1 : <input type="text" name="an1"><p>
동물 2 : <input type="text" name="an2"><p>
<input type="submit" value="확인">
</form>
</body>
</html>
- animal.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>
첫 번째 동물 : ${param.an1 }<p>
두 번째 동물 : ${param.an2 }<p>
같은 동물 : ${param.an1==param.an2 }<br>
</body>
</html>
- color.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>좋아하는 색깔은 ?</h2>
<form action="color.jsp">
<select name = "color">
<option value="red">빨강</option>
<option value="orange">주황</option>
<option value="yellow">노랑</option>
<option value="green">초록</option>
<option value="blue">파랑</option>
<option value="navy">남색</option>
<option value="violet">보라</option>
</select><p>
<input type="submit" value="확인">
</form>
</body>
</html>
- color.jsp ==> EL표기법으로 출력하기
<%@ 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 bgcolor="${param.color }">
</body>
</html>
- name2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>이름을 입력하세요</h2>
<form action="name2.jsp">
<input type="text" name="name"><p>
<input type="submit" value="확인">
</form>
</body>
</html>
- name2.jsp
Tip)- ⭐삼항연산자: 조건식 ? A : B => 조건이 참이면 A, 거짓이면 B
<%@ 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>
<h2>이름1</h2>
${param.name }
<h2>이름2 삼항연산자</h2>
${empty param.name ? "손님" : param.name } 안녕하세요
</body>
</html>
- init.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>
${initParam.DBName } <p>
${initParam.DBName2 }
</body>
</html>
- web.xml ==> 초기화된 전역변수를 선언하고 싶을 때 사용
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" id="WebApp_ID" version="6.0">
<display-name>och07</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<context-param>
<param-name>DBName</param-name>
<param-value>Oracle</param-value>
</context-param>
<context-param>
<param-name>DBName2</param-name>
<param-value>mySql</param-value>
</context-param>
</web-app>
- hundred.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>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
request.setAttribute("sum1", sum);
request.setAttribute("sum2", sum);
RequestDispatcher rd = request.getRequestDispatcher("hunResult.jsp");
rd.forward(request, response);
%>
</body>
</html>
- hunresult.jsp (현장HW)
<%@ 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>
<h2>1부터 100까지의 합</h2>
<h5>1. Expression 표기법 ==> sum1</h5>
<%
String sum1 = request.getAttribute("sum1").toString();
//앞의 jsp에서 setAttribute로 했으니, 여기서 getAttribute로 받아야함
%>
<%=sum1 %><p>
<h5>2. EL 표기법 ==> sum2</h5>
${sum2 }
</body>
</html>
- hundred2.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>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
pageContext.setAttribute("sum1", sum);
session.setAttribute("sum2", sum);
//RequestDispatcher rd = request.getRequestDispatcher("hunResult.jsp");
//rd.forward(request, response);
%>
sum1 : ${sum1 } <p>
sum2 : ${sum2 }
</body>
</html>
- hunresult2.jsp
Tip- pageContext
=> 잘 안쓰임, session과 request를 더 쓰는 편
- pageContext
<%@ 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>
<h2>1부터 100까지의 합</h2>
<h5>1. Expression 표기법 ==> sum1</h5>
<%
String sum1 = request.getAttribute("sum1").toString();
//앞의 jsp에서 setAttribute로 했으니, 여기서 getAttribute로 받아야함
%>
<%=sum1 %><p>
<h5>2. EL 표기법 ==> sum2</h5>
${sum2 }
</body>
</html>
- mapCreate.jsp
Tip)
- Hashmap: (0605 일지 참고)
- map: 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
순서를 유지하지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용함
map의 구현 클래스가 바로 Hashmap
- map: 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
- mapView.jsp?NAME=Park: ?의 사용방법 ==> 0709 일지의 서블릿 호출 방법 참고
- Hashmap: (0605 일지 참고)
<%@page import="java.util.HashMap"%>
<%@ 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>
<%
HashMap<String, String> addrMap = new HashMap<String, String>();
//HashMap를 선언함
// key value
addrMap.put("Park", "목동");
addrMap.put("박", "박목동");
addrMap.put("Jessica", "크라이스 처치");
addrMap.put("Susan", "시드니");
request.setAttribute("Address", addrMap);
//addrMap객체를 통째로 Address에 넣겠다는 것
RequestDispatcher dispatcher=
//form문에서 전해준것과 같은 형태
request.getRequestDispatcher("mapView.jsp?NAME=Park");
dispatcher.forward(request,response);
%>
</body>
</html>
- mapview.jsp
Tip)- Map방식
<%@ 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>
${param.NAME }의 주소는? ${Address[param.NAME] } <p>
${Address.Jessica } <p>
${Address.Susan } <p>
</body>
</html>
- winner.jsp
Tip- ⭐Java의 array 배열 부분 다시 참고해서 공부하기
- string[] 배열로 선언하면 초기값을 선언할 수 있음
<%@ 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>
<%
String[] winner = {"홍길동", "김길동", "고길동"};
//같은 방법 1. int[] num1 = new int[3]; //원소가 3개짜리 배열을 선언
// num[0] = 1;
// num[1] = 3;
// num[2] = 5;
//같은 방법 2. int[] num2 = new int[] {1,3,5};
// 어쨌든 세 가지 방법 다 winner에 배열값을 줌
request.setAttribute("winner", winner); //winner라는 객체 선언
RequestDispatcher rd =
request.getRequestDispatcher("winnerResult.jsp");
rd.forward(request, response);
%>
</body>
</html>
- winnerResult.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>
<h2>EL우승자</h2>
1등 : ${winner[0] }<p>
2등 : ${winner[1] }<p>
3등 : ${winner[2] }<p>
<h2>Expression 우승자</h2>
<%
String[] win = (String[])request.getAttribute("winner");
//string객체 배열 하기, 그게 아닌 경우에는 뒤에 .toString붙이기
for (int i =0; i < win.length; i++){
out.println((i+1) + "등 : " + win[i] + "<p>");
}
%>
</body>
</html>
- pet.html
Tip- name이 아닌 Id로 체크하는 법
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function chk() {
var nameId = document.getElementById("nameId");
if (!nameId.value){
alert("이름이 뭐니 ?");
nameId.focus;
return false;
}
return true;
}
</script>
</head>
<body>
<h2>좋아하는 반려동물은 ?</h2>
<form action="pet.jsp" onsubmit="return chk()">
이름 : <input type = "text" name="name" id="nameId"><p>
<!-- <>안의 값이 통째로 script의 nameId 객체에 들어감 -->
반려동물 : <br>
<input type = "checkbox" name="pet" value="야옹이">야옹이<br>
<input type = "checkbox" name="pet" value="진돗개">진돗개<br>
<input type = "checkbox" name="pet" value="말티즈">말티즈<br>
<input type = "checkbox" name="pet" value="도마뱀">도마뱀<br>
<input type = "checkbox" name="pet" value="앵무새">앵무새<br>
<input type = "submit" value="확인"><br>
</form>
</body>
</html>
- pet.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>
<h1>${param.name }님이 좋아하는 동물은</h1>
${paramValues.pet[0] } ${paramValues.pet[1] } ${paramValues.pet[2] }
${paramValues.pet[3] } ${paramValues.pet[4] }
</body>
</html>
(폴더: och08)
- Product.class ==> source>getter and setter 선택 >> select All
package och08;
public class Product {
private String code;
private String name;
private int price;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
- Book.class
package och08;
public class Book extends Product {
private String writer;
private int page;
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
}
- book.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>책 정보를 입력하세요</h2>
<form action="book1.jsp">
<!-- 이름은 클래스의 get,set의 이름들과 같게 적어야함 -->
코드 : <input type = "text" name="code" required="required"><p>
이름 : <input type = "text" name="name" required="required"><p>
가격 : <input type = "number" name="price" required="required"><p>
작가 : <input type = "text" name="writer" required="required"><p>
쪽수 : <input type = "number" name="page" required="required"><p>
<input type ="submit" value="확인">
</form>
</body>
</html>
- book1.jsp
Tip) 위의 hundred.jsp와 비교하기
효율적인 코딩을 위해 클래스명 뒤에 / 치고 ctrl+space해서 </jsp:useBean> 생략하기
Tip) property와 attribute⭐⭐⭐
- Property
- DOM의 속성이다
- DOM?: Document Object Model, 문서 객체 모델,
<html>이나 <body> 같은 html문서의 태그들을 JavaScript가 이용할 수 있는 객체(object)로 만들면 그것을 문서 객체라고 함, 문서 객체 모델은 문서 객체를 인식하는 방식
즉, DOM은 웹 브라우저가 HTML 페이지를 인식하는 방식, document 객체와 관련된 객체의 집합을 의미함
- DOM?: Document Object Model, 문서 객체 모델,
- DOM의 속성이다
- Attribute
- attribute는 HTML의 속성이며, Element에 id나 class와 같은 추가적인 정보를 일컫는다
- Element?: 엘리먼트를 추상화한 객체
- 식별자 기능: 문서 내에서 특정한 엘리먼트를 식별하기 위한 용도로 사용되는 API
ex) classList, className, id, tagName - 조회 기능: 엘리먼트의 하위 엘리머트를 조회하는 API
ex) getElementsByClassName, getElementsByTagName, querySelector, querySelectorAll - 속성 기능: 엘리먼트의 속성을 알아내고 변경하는 API
ex) getAttribute(name), setAttribute(name, value), hasAttribute(name), removeAttribute(name)
- 식별자 기능: 문서 내에서 특정한 엘리먼트를 식별하기 위한 용도로 사용되는 API
- Element?: 엘리먼트를 추상화한 객체
- attribute는 HTML의 속성이며, Element에 id나 class와 같은 추가적인 정보를 일컫는다
<%@ 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>
<jsp:useBean id="pt" class="och08.Book" scope="request"/> <!-- pt:product -->
<!-- 경로와 파일명을 같이 써줘야함 --> <!-- 요청하는 곳까지 끝까지 가라 -->
<jsp:setProperty property="*" name="pt"/>
<!-- request.setAttribute와 같은 역할 -->
<jsp:forward page="productInfo.jsp"></jsp:forward>
<!-- page를 지정하여 이동하는 방법, RequestDispatcher과 같은 역할 -->
</body>
</html>
↓↓↓ 효율적인 코딩을 위해 클래스명 뒤에 / 치고 ctrl+space해서 </jsp:useBean> 생략하기
- productInfo.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>
<h2>제품정보</h2>
<jsp:useBean id="pt" class="och08.product" scope="request"></jsp:useBean>
<!-- jsp:useBean ==> 자동완성 가능함 -->
코드 : <jsp:getProperty property="code" name="pt"/><p>
<!-- property에는 상세 attribute이름을, name에는 객체명을 선언 -->
이름 : <jsp:getProperty property="name" name="pt"/><p>
가격 : <jsp:getProperty property="price" name="pt"/><p>
</body>
</html>
수업교재
6. 서블릿 라이프 사이클
1. 서블릿 라이프 사이클
- 웹 브라우저의 요청을 처리할 수 있는 상태의 서블릿 객체를 서블릿이라고 함
- 서블릿 클래스는 웹 브라우저에 의해 바로 호출되는 것이 아니라 서블릿클래스로부터 서블릿 객체가 만들어지고, 그 객체가 웹 컨테이너에 의해 초기화 된 다음에 호출
2. 서블릿 구조와 메서드
실행 메소드 | init | service | destroy |
실행시기 | 최초 요청 or 컨테이너 시작시 | 모든 요청과 응답시 | 컨테이너 종료 or 애플리케이션 종료시 |
특징 및 기능 | - 서버를 초기화함 - 서블릿 요청 시 최초 한 번만 호출됨 - 서블릿 초기화 작업 수행 시 자동으로 호출되는 메서드 - 한 번만 실행되어야 할 코드와 함께 쓰임 |
- 브라우저의 요청처리 - 최초 호출이 아닌 경우 특정 HTTP의 요청(GET, POST 등)을 처리하는 메서드(doGet(),doPost()등)가 호출됨 |
- 서블렛을 제거함 - 서블릿 마무리 작업 수행시 자동으로 호출되는 메서드 - 한 번만 실행되어야 할 코드와 함께 쓰임 |
작성방법 | - 파라미터가 없는 메서드로 선언해야함 - return 타입은 void로 지정해야함 - public 메서드로 선언해야함 |
- 파라미터가 없는 메서드로 선언해야함 - return 타입은 void로 지정해야함 - public 메서드로 선언해야함 - init와 달리 throws 절을 쓸 수 없음 |
3. 서블릿 콘텍스트 ServletContext 객체
1.서블릿의 환경정보를 가져오는 방법
: 서블릿 클래스나 JSP 페이지의 환경 관련 정보는 javax.servlet패키지의 ServletContext 인터페이스 타입의 객체를 이용해서 얻을 수 있음
2. 서블릿 콘텍스트 객체 종류
- ServletContext context = getServletContext();
ServletContext 객체를 리턴하는 메서드, 서블릿 클래스나 JSP 페이지의 환경 관련 정보를 얻을 수 있음 - String str= context.getServerInfo(); 웹 서버의 종류를 리턴하는 메소드
- int num1 = context.getMajorVersion(); 서블릿 규격과 환경 정보의 메이저 버전을 가져옴
- int num1 = context.getMinorVersion(); 서블릿 규격과 환경 정보의 마이너 버전을 가져옴
3. 서블릿 콘텍스트 인터페이스와 데이터 공유
- setAttribute: 웹 애플리케이션에 할당된 공유 데이터 영역에 데이터를 저장함/ application.setAttribute()
- getAttribute: 지정된 영역에 있는 데이터를 읽어옴 / String str = (String) application.getAttribute();
- removeAttribute: 지정된 영역에 있는 데이터를 삭제함 / application.removeAttribute();
↳ 공통점: 같은 웹 애플리케이션 디렉터리에 있는 웹 컴포넌트들끼리 데이터를 공유할 수 있도록 함
- getContextPath: 웹 애플리케이션의 URL 경로명을 리턴하는 메서드 /
String appPath = application.getContextPath(); - absolutePath: 웹 애플리케이션 내에서의 파일 경로명 / String absolutePath = application.getRealPath();
↳ 공통점: 웹 애플리케이션에 관련된 파일 경로명을 가져옴
7. Expression Language(EL 표현식)
1. 정의
- expression(식)을 중심으로 코드를 기술하는 언어
- expression과 다름
ex) EL식: ${cnt+1} / expression식: <%=cnt+! %>
위에 사용된 cnt 데이터 이름의 의미는 각기 다름 => expression식에서는 자바 프로그래밍 언어의 변수 이름이지만, EL식에서는 Attribute(개체의 속성)의 이름임
Tip) Attribute란?: setAttribute, getAttribute, removeAttribute 메서드를 통해 저장되고 관리되는 데이터를 의미함 - jsp 스크립트를 대신하여 속성값들을 좀 더 편리하게 출력하기 위해 제공되는 언어
- 스크립션보다 많이 사용함
- ex) test 변수를 표현할 때: ${test } / hello 객체의 test 변수를 표현할 때: ${hello.test} or ${hello['test']
2. 종류
1. EL식의 문법: EL 표현식의 유일한 목적은 식을 계산해서 그 결과를 출력하는 것, 때문에 하나의 문법으로 표현이 가능함,
식 위치에는 데이터 이름 하나로만 구성된 식(${RESULT})이 들어갈 수 도 있고, 연산자를 포함하는 식(${RESULT + 101})이 들어갈 수도 있으며, 자바의 정적 메서드를 호출하는 식(${m:sqrt(100)})이 들어갈 수도 있음
2. JSP/서블릿 기술에서 사용되는 네 종류의 Attribute (자바의 전역변수(global variable)랑 비슷함)
Tip) 전역변수란?: 어느 위치에서든 호출하면 사용이 가능한 변수로, 함수 밖에 선언하여 클래스 전체에서 사용이 가능한 변수임
ex) instance변수, static변수
사용순서 | Attribute의 종류 | 호출할 때 사용하는 내장 변수 | 메서드의 소속 |
↓ |
page attribute | pageContext 내장 변수 | javax.servlet.jsp.JspContext 클래스 |
request attribute | request 내장 변수 | javax.servlet.ServletRequest 인터페이스 | |
session attribute | session 내장 변수 | javax.servlet.http.HttpSession 인터페이스 | |
application attribute | application 내장 변수 | javax.servlet.ServletContext 인터페이스 |
3. 내장객체
내장 객체 이름 | 표현하는 데이터 | 객체의 타입 |
pageScope | page attribute의 집합 | Map |
requestScope | request attribute의 집합 | Map |
sessionScope | session attribute의 집합 | Map |
applicationScope | application attribute의 집합 | Map |
param | 웹 브라우저로부터 입력된 데이터의 집합 | Map |
paramValues | 웹 브라우저로부터 입력된 데이터의 집합(똑같은 이름의 데이터가 여러개일때 사용) | Map |
initparam | 웹 애플리케이션의 초기화 파라미터의 집합 | Map |
header | HTTP 요청 메시지에 있는 HTTP Header의 집합 | Map |
headerValues | HTTP 요청 메시지에 있는 HTTP Header의 집합 (똑같은 이름의 데이터가 여러개일때 사용) |
Map |
PageContext | JSP 페이지의 환경 정보의 집합 | PageContext |
자주 쓰는 객체들
- param
- 웹 브라우저에서 <FORM> 엘리먼트( <form action=> 등)를 통해 입력된 데이터를 가져올 때 사용하는 내장 객체
- 사용방법: ${param.데이터이름} or ${param["데이터이름"]}
- paramValues
- 사용방법: ${paramValues.데이터이름[숫자(데이터 값의 인덱스)]}
or ${paramValues["데이터이름"][숫자(데이터 값의 인덱스)]} ==> 인덱스는 0부터 시작이므로 첫번째 인덱스는 0
- 사용방법: ${paramValues.데이터이름[숫자(데이터 값의 인덱스)]}
- pageContext
- JSP 페이지의 주변환경에 대한 정보를 제공함
- 이 객체를 사용하며 pageContext 클래스에 속하는 get으로 시작하는 이름의 메서드를 호출함
- EL식 사용방법:
- ${pageContext.request} or ${pageContext["request"]}: getrequest 메소드를 가리키는 단어
이 EL식은 getRequest 메서드의 리턴값을 출력하는데, 그 값은 JSP 페이지의 request 내장 변수의 값과 동일한 객체, 따라서 사용자에게는 아무 의미도 없는 참조 값만 출력함
- ${pageContext.request} or ${pageContext["request"]}: getrequest 메소드를 가리키는 단어
'JSP > Java Script' 카테고리의 다른 글
2024_07_16_화 (0) | 2024.07.16 |
---|---|
2024_07_15_월 (0) | 2024.07.15 |
2024_07_11_목 (0) | 2024.07.11 |
2024_07_10_수 (0) | 2024.07.10 |
2024_07_09_화 (0) | 2024.07.09 |