본문 바로가기
JSP/Java Script

2024_07_12_금

by 알케니브 2024. 7. 12.

오늘의 코딩순서

(폴더: 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);
	}

}

실행 후 화면과 만들어진 log파일 내용

 

서버 실행과 서버 중지한 후 console에 문구 출력

 

++ System.out.println(name + "님의 사회활동......"); 추가

log 지문은 한번만 실행된다
console창의 내용: 사회활동과 서버 중지 이후 반응

 

  • 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>

console창의 내용: 사회활동과 서버 중지 이후 반응
log 파일 저장경로 + 파일 내용


  • 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를 더 쓰는 편
<%@ 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
    • mapView.jsp?NAME=Park: ?의 사용방법 ==> 0709 일지의 서블릿 호출 방법 참고
<%@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⭐⭐⭐

  1. Property
    • DOM의 속성이다
      • DOM?: Document Object Model, 문서 객체 모델,
        <html>이나 <body> 같은 html문서의 태그들을 JavaScript가 이용할 수 있는 객체(object)로 만들면 그것을 문서 객체라고 함, 문서 객체 모델은 문서 객체를 인식하는 방식
        즉, DOM은 웹 브라우저가 HTML 페이지를 인식하는 방식, document 객체와 관련된 객체의 집합을 의미함
  2. 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) 

 

<%@ 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. 서블릿 콘텍스트 인터페이스와 데이터 공유

  1. setAttribute: 웹 애플리케이션에 할당된 공유 데이터 영역에 데이터를 저장함/ application.setAttribute()
  2. getAttribute: 지정된 영역에 있는 데이터를 읽어옴 / String str = (String) application.getAttribute();
  3. removeAttribute: 지정된 영역에 있는 데이터를 삭제함 / application.removeAttribute();

↳   공통점: 같은 웹 애플리케이션 디렉터리에 있는 웹 컴포넌트들끼리 데이터를 공유할 수 있도록 함

 

  1. getContextPath: 웹 애플리케이션의 URL 경로명을 리턴하는 메서드 /
    String appPath = application.getContextPath();
  2. 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

 

자주 쓰는 객체들

  1. param
    • 웹 브라우저에서 <FORM> 엘리먼트( <form action=> 등)를 통해 입력된 데이터를 가져올 때 사용하는 내장 객체
    • 사용방법: ${param.데이터이름} or ${param["데이터이름"]}
  2. paramValues
    • <FORM> 엘리먼트를 통해 똑같은 이름이 데이터가 여러 개 입력되는 경우가 있는데, 그럴 때 사용함
    • 사용방법: ${paramValues.데이터이름[숫자(데이터 값의 인덱스)]}
      or ${paramValues["데이터이름"][숫자(데이터 값의 인덱스)]} ==> 인덱스는 0부터 시작이므로 첫번째 인덱스는 0
  3. pageContext
    • JSP 페이지의 주변환경에 대한 정보를 제공함
    • 이 객체를 사용하며 pageContext 클래스에 속하는 get으로 시작하는 이름의 메서드를 호출함
    • EL식 사용방법:
      • ${pageContext.request} or ${pageContext["request"]}: getrequest 메소드를 가리키는 단어
        이 EL식은 getRequest 메서드의 리턴값을 출력하는데, 그 값은 JSP 페이지의 request 내장 변수의 값과 동일한 객체, 따라서 사용자에게는 아무 의미도 없는 참조 값만 출력함

 

'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