[JAVA_Back-End]

[JSP] Maven Project설정 + Filter/Event/EL/JSTL 본문

Programming/JSP

[JSP] Maven Project설정 + Filter/Event/EL/JSTL

너굴위 2023. 10. 18. 14:05
728x90
반응형

자료실

라이브러리2개?

복사 -> 붙여넣어줌

자바 프로젝트 관리용 도구   => build tool: war(web) / jar (JAVA)

           build tool

                      1. 프로젝트 생성, 테스트 빌드, 배포

                      2. 라이브러리 추가, 버전관리

초창기 => Apache Ant

이후 

java project - maven project

dynamic web project - maven project

*jdk라이브러리 구

maven project(구형)

dynamic web project -> maven project

 

 

maven project 설정1

 

maven project 설정2(패키지명)

 

 

pom.xml -> 라이브러리 모음

전체선택 후 라이브러리 정리(ctrl+shift+f)

 

C:\Users\손수빈\.m2\repository\org\mariadb\jdbc\mariadb-java-client\3.2.0  => dependency위치

 

 

1.PDSModelEx01(Dynamic Web Project) + Maven Project(com.exam.model1)

2. 설정

   jdbc드라이버

   mulipart request

3. 나머지 

   java, css, image...

PDSModel1Ex01 - model1실행될 수 있게 구성

 

 

BoardController

 

list.do    ListAction   board_list1.jsp

write.do   WriteAction  board_write1.jsp

write_ok.do  WriteOkAction  board_write1_ok.jsp

 

 

테이블 설정

* url model2
* 최소 table2개
본글 테이블 
답글 테이블

 

본글과 답글이 1:n으로 연결될 수 있도록 함

 

 

* url model2
* 최소 table2개
본글 테이블 
답글 테이블

본글 테이블
create table alb_board (
seq int not null primary key auto_increment,
subject varchar(150) not null,
writer varchar(12) not null,
mail varchar(50),
password varchar(12) not null,
content varchar(2000),
imgname varchar(50),
imgsize int,
hit int not null,
wip varchar(15) not null,
wdate datetime not null,
kyungdo varchar(10),
wedo varchar(10)
);

insert into alb_board values(0, '제목', '이름', 'test@test.com' , '1234', '내용', 'image.png', 10, 0, '000.000.000.000', now(), '000.00000', '000.0000' );


답글 테이블
create table rep_table(
seq int not null,
reseq  int not null primary key auto_increment,
writer  varchar(12)  not null,
password varchar(12)  not null,
wdate   datetime     not null,
content varchar(200)  not null,
constraint foreign key(seq) references alb_board(seq));
 
totalReplyRecord

 

 

댓글의 총 수는 프로그램적으로 짜도 괜찮지만 DB에 넣는게 훨씬 하기 쉬울 것 (본 테이블에 cmtcnt  int  not null로 생성)

위도경도  -> exif데이터  (Exchangeable Image File Format) => 사진에 대한 경로

 

 

GitHub - drewnoakes/metadata-extractor: Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and audio files

Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and audio files - GitHub - drewnoakes/metadata-extractor: Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and a...

github.com

금요일 

앨범 답글 게시판 캡처화면

퀴즈 내용 : jsp / servlet

 

QR(Bar)코드 생성 (이미지)

 


*각 생성 파일은 올바른 위치에 넣어 작

Filter

클라이언트와 자원 사이에 위치하고 있다.

- web.xml안의 filter블록의 작성 순서가 필터 순서가 된다.

 

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>FilterEx01</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>
  
     <filter>
  <filter-name>second</filter-name>
  <filter-class>com.exam.filter.SecondFilter</filter-class>
  </filter>
  
  <filter-mapping>
  <filter-name>second</filter-name>
  <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  
  
  <filter>
  <filter-name>first</filter-name>
  <filter-class>com.exam.filter.FirstFilter</filter-class>
  </filter>
  
  <filter-mapping>
  <filter-name>first</filter-name>
  <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  
  

</web-app>

모든 jsp확장자를 부르면 자동으로 filter가 실행된다는 것을 확인

//FirstFilter.java

package com.exam.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FirstFilter implements Filter {
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("첫번째 init()호출");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("첫 번째 전처리 구간");
		
		chain.doFilter(request, response);
		
		
		System.out.println("첫 번째 후처리 구간");
	}
}
//index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	out.println("Hello Filter");
	System.out.println("Hello Filter!");
%>

 

web.xml에서 first블록먼저 second블록 나중
web.xml에서 second블록먼저 first블록 나중

 

//SecondFilter.java

package com.exam.filter;

import java.io.IOException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;




public class SecondFilter implements Filter{
	
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("두 번째 init()호출");
	}
	
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		

		System.out.println("두 번째 전처리 구간");
		chain.doFilter(request, response);
		
		
		System.out.println("두 번째 후처리 구간");
	}
}

 

//hello.jsp

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

	out.println("Hello hello.jsp");
	System.out.println("Hellojsp호출");
%>

web.xml 없이 어노테이션을 통해 Filter 설정

//FirstFilter.java

package com.exam.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;

@WebFilter("*.jsp")
public class FirstFilter implements Filter{

	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("첫번째 init() 호출");
	}
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("첫 번째 전처리 구간");
		chain.doFilter(request, response);
		System.out.println("첫 번째 전처리 구간");
	}
}
//index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	out.println("Hello Filter");
	System.out.println("Hello Filter!");
%>

모든 프로젝트의 init이 호출됨 (조심)


Filter의 사용 (FilterEx03)

form, form_ok 오류

 

Filter 메뉴를 통해 자동생성 가능

filter 자동생성

-> 매 페이지마다 다국어 설정을 하기 어려운 상황에 적용가능 

-> 로그인에 사용가능 (모든 페이지에 적용하는 것이 아닌 디렉토리로 나누어 접근 가능하도록 설정한다.)


Event Listener

-> contextInitialized(ServletContextEvent sce) : 웹 어플리케이션을 초기화할 때 사용

-> contextDestroyed(ServletContextEvent sce) : 웹 어플리케이션을 종료할 때 호출

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>EventEx02</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>
  
  <listener>
  		<listener-class>com.exam.event.FirstListener</listener-class>
  </listener>
  
  <listener>
  		<listener-class>com.exam.event.SecondListener</listener-class>
  </listener>
</web-app>

//contextDestroyed와 contextInitialized에 대한 이해 부족 (실행결과 없음)

//FirstListener.java

package com.exam.event;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class FirstListener implements ServletContextListener{

	
	//application 객체와 동급
	@Override
	public void contextDestroyed(ServletContextEvent sce) {   //등록된 반대 순서대로 실행
		// TODO Auto-generated method stub
		System.out.println("contextDestroyed() 호출");
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {  //등록된 순서대로 실행
		// TODO Auto-generated method stub
		System.out.println("contextInitialized() 호출");
	}

}
//index.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>
Hello index.jsp
</body>
</html>

리스너의 변화를 추적하기 (EventEx02)

//SecondListener.java
package com.exam.event;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class SecondListener implements ServletContextAttributeListener{

	@Override
	public void attributeAdded(ServletContextAttributeEvent event) {
		// TODO Auto-generated method stub
		System.out.println("추가");
		System.out.println(event.getName()+event.getValue());
	}

	@Override
	public void attributeRemoved(ServletContextAttributeEvent event) {
		// TODO Auto-generated method stub
		System.out.println("수정");
		System.out.println(event.getName()+event.getValue());
	}

	@Override
	public void attributeReplaced(ServletContextAttributeEvent event) {
		// TODO Auto-generated method stub
		System.out.println("삭제");
		System.out.println(event.getName()+event.getValue());
	}
	

	

	
}

 

//application.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>
<!-- application.jsp -->
<% 
	ServletContext context = getServletContext();

	context.setAttribute("name", "홍길동");
	out.println("추가<br />");
	
	context.setAttribute("name", "손수빈");
	out.println("수정<br />");
	
	context.removeAttribute("name");
	out.println("삭제<br />");
	
%>
</body>
</html>

 

//application2.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>
<!-- application.jsp -->
<% 

	//리스너를 통해서 값의 변화를 추적할 수 있다 = 로그
	//ServletContext context = getServletContext();

	application.setAttribute("name", "홍길동");
	out.println("추가<br />");
	
	application.setAttribute("name", "손수빈");
	out.println("수정<br />");
	
	application.removeAttribute("name");
	out.println("삭제<br />");
	
%>
</body>
</html>

Listener 자동생성하기 (EventEx03)

 

Listener 자동생성

 

//SessionAttributeListenerex01.java
package com.exam.event;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

/**
 * Application Lifecycle Listener implementation class SessionAttributeListenerex01
 *
 */
@WebListener     //webListener어노테이션 자동생성 확인
public class SessionAttributeListenerex01 implements HttpSessionAttributeListener {

    /**
     * Default constructor. 
     */
    public SessionAttributeListenerex01() {
        // TODO Auto-generated constructor stub
    }

	/**
     * @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
     */
    public void attributeAdded(HttpSessionBindingEvent se)  { 
         // TODO Auto-generated method stub
    	System.out.println("추가");
    	System.out.println(se.getName()+":"+se.getValue());
    }

	/**
     * @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
     */
    public void attributeRemoved(HttpSessionBindingEvent se)  { 
         // TODO Auto-generated method stub
    	System.out.println("삭제");
    	System.out.println(se.getName()+":"+se.getValue());
    }

	/**
     * @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
     */
    public void attributeReplaced(HttpSessionBindingEvent se)  { 
         // TODO Auto-generated method stub
    	System.out.println("변경");
    	System.out.println(se.getName()+":"+se.getValue());
    }
	
}

 

//session.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>
<%
	session.setAttribute("name", "홍길동");
	out.println("추가<br />");
	session.setAttribute("name", "손수빈");
	out.println("수정<br />");
	session.removeAttribute("name");
	out.println("삭제 <br />");

%>
</body>
</html>

* java 표현 언어 확인하기

//el01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>   <!-- 표현lang을 사용할 때 false로 만들어 사용 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//scriptlet
out.println("2"); 
%>
<br />
<!-- expression -->
<%="2" %>
<br />
<!-- expression lang -->
${ "2" }
<br />
${"2"+5 }
<br />
${ "2" }${ "5" }<br />   
\${"test" + 2 }<br />    <!-- 문자열+숫자 -->
${2 lt 3 }<br />   <!-- 비교 -->
${ empty data}<br />   <!-- 변수명 -->
${ "data" }<br />  <!-- 문자열 -->
${(2<3)? "작다" : "크다" }<br />
${"문자" += "열" += "연결" }<br />
</body>
</html>

시스템에 호출되는 메서드 : callback

 

//el02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
    	String name1 ="홍길동";
		pageContext.setAttribute("name2", "손수빈");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 기본 문자열 출력방법 -->
<%
	out.println(name1+"<br />");
%>
이름 :<%=name1 %><br />


<!-- paging context 사용 시 출력방법 -->
이름 :${name2}<br />  
<% 
	out.println(pageContext.getAttribute("name2")+ "<br />");
%>
${pageScope.name2}<br />
${pageScope['name2']} <br /> 

</body>
</html>

//el03.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>
<%
	
	pageContext.setAttribute("name1", "홍길동");

	//view
	request.setAttribute("name2", "손수빈");
	
	//session
	session.setAttribute("name3", "아무개");
	application.setAttribute("name4", "강동원");
	
%>

<!-- getAttribute로 표현 -->
<%=pageContext.getAttribute("name1")%> <br />
<%=request.getAttribute("name2")%> <br />
<%=session.getAttribute("name3")%> <br />
<%=application.getAttribute("name4")%> <br />

<!-- java표현의 다른 방식 -->
${ name1 }<br />
${ name2 }<br />
${ name3 }<br />
${ name4 }<br />

</body>
</html>

el04.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>

<%

 

//가장 가까운 순서대로 출력(name이 같을 때)

pageContext.setAttribute("name", "홍길동");

request.setAttribute("name", "손수빈");

session.setAttribute("name", "아무개");

application.setAttribute("name", "강동원");

 

%>

<!-- java코드를 없애기 위한 방법 -->

<!-- 변수 선언 없어도 에러가 없음 -->

${ pageScope.name }<br />

${ requestScope.name }<br />

${ sessionScope.name }<br />

${ aplicationScope.name }<br />

<%-- <%=name2 %> 에러발생--%>

</body>

</html>


el05.jsp

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

pageEncoding="UTF-8"%>

<%@ page import="model1.BoardTO" %>

 

<%

 

BoardTO to = new BoardTO();

to.setSubject("제목");

to.setWriter("작성자");

 

//pageContext.setAttribute("to", to);

request.setAttribute("to", to);

%>

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<!-- setAttribute로 to를 받았기 때문에 표현 가능 -->

${ to.subject }<br />

${ to.writer }<br />

 

 

</body>

</html>

 

 

BoardTO - el05.jsp에서 사용할 DTO

package model1;

 

public class BoardTO {

 

private String subject;

private String writer;

 

public String getSubject() {

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

return subject;

}

public void setSubject(String subject) {

this.subject = subject;

}

public String getWriter() {

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

return writer;

}

public void setWriter(String writer) {

this.writer = writer;

}

 

}

 

 

el06.jsp

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

pageEncoding="UTF-8"%>

<%@ page import="model1.BoardTO" %>

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

 

<%

 

BoardTO to1 = new BoardTO();

to1.setSubject("제목1");

to1.setWriter("작성자1");

 

BoardTO to2 = new BoardTO();

to2.setSubject("제목2");

to2.setWriter("작성자2");

 

//BoardTO[] lists = {to1,to2};

 

//ArrayList의 내용을 가지고 올 수 있다.^^

ArrayList<BoardTO> lists = new ArrayList();

lists.add(to1);

lists.add(to2);

 

request.setAttribute("lists", lists);

%>

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<!-- setAttribute로 to를 받았기 때문에 표현 가능 -->

${ lists[0].subject }<br />

${ lists[0].writer }<br />

 

${ lists[1]['subject']}<br />

${ lists[1]['writer'] }<br />

 

${ lists[2].subject }<br />

${ lists[2].writer }<br />

 

 

</body>

</html>

 

 

el07.jsp

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

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

pageEncoding="UTF-8"%>

<%@ page import="model1.BoardTO" %>

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

 

<%

 

BoardTO to1 = new BoardTO();

to1.setSubject("제목1");

to1.setWriter("작성자1");

 

BoardTO to2 = new BoardTO();

to2.setSubject("제목2");

to2.setWriter("작성자2");

 

//해쉬맵 방식으로 가져올 수 있다.

HashMap<String,BoardTO> lists = new HashMap();

lists.put("to1",to1);

lists.put("to2",to2);

 

request.setAttribute("lists", lists);

%>

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

 

${ lists.to1.subject }<br />

${ lists.to2.subject }<br />

 

 

 

</body>

</html>

 

 

el08.jsp

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

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

pageEncoding="UTF-8"%>

 

<%@ page import="model1.BoardTO" %>

<%@ page import="model1.BoardListTO" %>

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

 

<%

 

BoardTO to1 = new BoardTO();

to1.setSubject("제목1");

to1.setWriter("작성자1");

 

BoardTO to2 = new BoardTO();

to2.setSubject("제목2");

to2.setWriter("작성자2");

 

BoardListTO listTO1 = new BoardListTO();

listTO1.setCpage("1");

listTO1.setBoardTO(to1);

 

BoardListTO listTO2 = new BoardListTO();

listTO2.setCpage("1");

listTO2.setBoardTO(to2);

 

 

ArrayList<BoardListTO> lists = new ArrayList();

lists.add(listTO1);

lists.add(listTO2);

 

 

 

request.setAttribute("lists", lists);

%>

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

 

${ lists[0].boardTO.subject }<br />

${ lists[1].boardTO.subject }<br />

 

 

 

</body>

</html>

결과


header01.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>

${ header }<br />

<br /><hr /><br />

${ header['host'] }<br />

${ header['user-agent'] }<br />

<!-- 사용할 수 없음 -->

${ header.host }<br />

${ header.user-agent }<br />

 

</body>

</html>

 

결과


위치, 온도정보 표시하는 예

//Thermometer.java (연습문제)
package model1;

import java.util.HashMap;
import java.util.Map;

public class Thermometer {
	private Map<String,Double> locationCelsiusMap = new HashMap<String, Double>();
	
	//위치, 온도정보
	public void setCelsius(String location, Double value) {
		locationCelsiusMap.put(location, value);
		
	}
	
	//location파라미터 값에 해당하는 위치의 섭씨온도
	public Double getCelsius(String location) {
		return locationCelsiusMap.get(location);
		
	}
	
	//location파라미터 값에 해당하는 위치의 화씨온도
	public Double getFahrenheit(String location) {
		Double celsius = getCelsius(location);
		if(celsius==null) {
			return null;
		}
		return celsius.doubleValue()*1.8+32.0;
	}
	
	//정보제공 메서드 (단순정보제공)
	public String getInfo() {
		return "온도계 변환기 1.1";
	}
	
}

 

//thermometer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model1.Thermometer" %>

<%
	Thermometer thermometer = new Thermometer();
	request.setAttribute("t", thermometer);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${t.setCelsius('서울',27.3)}
서울 온도:섭씨 ${t.getCelsius('서울')}도/ 화씨 ${t.getFahrenheit('서울') } }

<br />
정보: ${t.info}
</body>
</html>

request의 속성 출력하기

//useELObjct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setAttribute("name", "최범균");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

요청 URI: ${pageContext.request.requestURI} <br />
request의 name 속성: ${requestScope.name}<br />
code 파라미터:${param.code}<br />
</body>
</html>

표준 태그 라이브러리(JSTL)   -> jstl.jar , standard.jar 추가

- HTML 코드와 스크립트릿, 스크립트 코드가 뒤섞여 알아보기가 쉽지 않은데, 이를 해결하기 위해 커스텀 태그를 사용

//BoardTO
package model1;

public class BoardTO {
	
	private String subject;
	private String writer;
	
	
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	
}

 

//jstl01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- c접두어를 통해 접근 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
출력: <%="browser1" %> <br />
출력: ${"browser2" } <br />
출력: <c:out value="browser3" /> <br />
<%
	pageContext.setAttribute("data1", "browser4");

%>
출력:<%=pageContext.getAttribute("data1") %><br />
출력: ${data1 }<br />
출력: <c:out value="${data1}" /> <br />

출력: <c:out value="${data2}" /> <br />
출력: <c:out value="${data2}" default="browser" /> <br />
</body>
</html>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %

JSTL이 제공하는 태그의 종류 중 " 코어 " 라이브러리를 사용한다. 

//jstl02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:set var="data1" value="홍길동" />
<c:set var="data2">박문수</c:set>   <!-- setAttribute와 비슷한 선언방식(한 영역에 의한 선언) -->

출력: ${data1}<br />
출력: ${data2}<br />
출력:<c:out value="${data1}"/> <br />
</body>
</html>

 

<c:set var="data2">박문수</c:set>    -> 해당 방식으로 작성하면 setAttribute와 동일한 역할을 수행한다.

request의 속성 출력하기

 

//jstl03.java

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:set var="data" value="홍길동" />

<c:set var="data1" value="홍길동" scope="page"/>
<c:set var="data2" value="손수빈" scope="request"/>
<c:set var="data3" value="임꺾정" scope="session"/>
<c:set var="data4" value="장길산" scope="application"/>

출력: ${pageScope.data}<br />
출력: ${requestScope.data}<br />
출력: ${sessionScope.data}<br />
출력: ${applicationScope.data}<br />

출력: ${pageScope.data1}<br />
출력: ${requestScope.data2}<br />
출력: ${sessionScope.data3}<br />
출력: ${applicationScope.data4}<br />

</body>
</html>

 

//jstl04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:set var="name" value="홍길동" />
<c:out value="${name}" /><br/>
<c:remove var= "name"/>
<c:out value="${name}" default="이름없음"/>   <!-- remove한 자리에 default를 지정 -->
</body>
</html>

 

 

//jstl05.jsp

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="to" value="<%= new model1.BoardTO() %>" scope="page"/>
<c:set target="${to}" property="subject" value="제목" />
<c:set target="${to}" property="writer" value="작성자" />



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

제목:${to.subject }<br />  <!-- html안에서 데이터 가져올 수 있음 -->
작성자:${to.writer }<br />
</body>
</html>
728x90
반응형