일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- null/not null
- 추상메서드
- 멱등성
- 컬렉션 프레임워크
- 오버로딩
- jsoup
- 프로그래머스 코테
- SQL
- 메세지 큐
- 즉시로딩
- N+1
- Java
- git 기초
- 원시타입
- delete
- InterruptedException
- 프로그래머스
- 서버 스크립트
- 연산자와의 관계
- bufferedInputStream
- 오버라이딩
- 참조타입
- Shared Lock
- 지연로딩
- exclusive lock
- foreigen key
- select
- 변수와 상수
- 변수와 메서드
- 피연산자
- Today
- Total
[JAVA_Back-End]
[JSP] Maven Project설정 + Filter/Event/EL/JSTL 본문
자료실
라이브러리2개?
복사 -> 붙여넣어줌
자바 프로젝트 관리용 도구 => build tool: war(web) / jar (JAVA)
build tool
1. 프로젝트 생성, 테스트 빌드, 배포
2. 라이브러리 추가, 버전관리
초창기 => Apache Ant
이후
- maven (xml방식으로 관리) => maven repository
- Maven Repository: Search/Browse/Explore (mvnrepository.com)
- gradle (json방식으로 관리) - 추세(Android)
java project - maven project
dynamic web project - maven project
*jdk라이브러리 구
maven project(구형)
dynamic web project -> maven project
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>
//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!");
%>
//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!");
%>
Filter의 사용 (FilterEx03)
form, form_ok 오류
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)
//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>
'Programming > JSP' 카테고리의 다른 글
[JSP] JSTL (0) | 2023.10.23 |
---|---|
[JSP] Session / Cookie (로그인, 로그아웃 폼 만들기) (0) | 2023.10.12 |
[JSP] JAVA코드 DAO / DTO 생성2 (파일 업로드 다운로드 포함) (0) | 2023.10.11 |
[JSP] JAVA코드 DAO / DTO 생성하여 구현 (0) | 2023.10.10 |
[JSP] 게시판 답글 기능 구현하기 (1) | 2023.10.05 |