내용글
textarea - text
=> webeditor(html)
=> gmail
webeditor
- 자바스크립트 라이브러리
* 네이버 스마트에디터
https://naver.github.io/smarteditor2/
* toast
* CK Editor
필터로 인해 만들수 있는것들
1. 인코딩
2. 필수 입력 요소 검사
form.jsp - 실행
check - 검사
form_ok.jsp - 검사 맞을때
error.jsp - 검사 틀릴때
3. 로그인 검사
...
Servlet/JSP 이벤트소스와 리스너 종류
https://dololak.tistory.com/616
표현식(expression)
자바변수를 출력하는 방법 = <%= %>
=> 언어
=> 표현언어
내일이면 JSP 끝
다음엔 Javascript framework
ajax
jQuery
...
System - 리눅스
window - vmware player(무료)
mac - vmware fusion(회원가입 - 1달)
jsp framework
배포(서비스)
eclipse를 통해 run to server를 하는것은 개발용서버이고,
배포(서비스)를 위해 실행시키는법은 아파치톰캣을 이용해야한다
배포(서비스)용 폴더생성하는법
1. C:\Java\apache-tomcat-9.0.65\webapps 에 website1(예명)폴더를 만든다
2. website1 폴더에 WEB-INF폴더 생성 후 WEB-INF폴더에 lib폴더를 생성후 jar파일넣기
3. 개발용 폴더에서 mariadb폴더(jsp파일)를 복사후 website1폴더에 붙여넣는다
4. website1폴더에 index.jsp파일(없다면 만들기) 을 편집해

이렇게 경로를 설정한다
5. model1이라면 WEB-INF폴더에 classes폴더 생성후 클래스폴더 복사 붙여넣는다
6. model2라면 WEB-INF폴더에 views폴더 생성후 뷰 파일 집어넣기\
7. 또한 WEB-INF폴더에 classes폴더에 model2폴더(클래스파일이 있는)복사 후 붙여넣기
servlet또한 마찬가지
8. 실행시

cmd로 아파치톰캣 경로설정후 실행
9. 아까 index.jsp 로 경로설정을 해놓았기 때문에
http://localhost:8080/website1 까지만 입력후 엔터시에도 원하는경로로 갈수있다.
톰캣과 상관없는 폴더에서 배포하는 법

c드라이브에 java폴더에 website폴더 생성 -> site폴더 생성후 배포에 필수인 파일들 집어넣기

아파치톰캣폴더 -> conf -> Catalina -> localhost 폴더에 xml파일 생성후
경로설정
후에 아파치톰캣 실행우 localhost:8080/site1 입력후 엔터시 자동으로 list로 갈수있다
자동 웹 배포(eclipse)

배포하고 싶은프로젝트 우클릭 -> Export -> WAR file

Browse 로 Java폴더에 경로설정

파일을 복사

wabapp폴더에 붙여넣고 아파치 톰캣 실행시
war파일의 압축이 풀리면서 폴더생성된다.
필터(Filter)
필터란?
HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스이다.
필터는 요청과 응답 사이에 위치하여 최종 자원의 결과를 알맞게 변경할 수 있다.

Filter
web.xml로 만들기

<%@ 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>
index.jsp<br>
<%
System.out.println("index.jsp 호출");
%>
</body>
</html>
index.jsp
package 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 {
// TODO Auto-generated method stub
System.out.println("FirstFilter init() 호출");
String data1 = filterConfig.getInitParameter("data1");
String data2 = filterConfig.getInitParameter("data2");
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("FirstFilter 전처리");
arg2.doFilter(arg0, arg1);
System.out.println("FirstFilter 후처리");
}
}
FirstFilter.java
Filter를 implement한다
package 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 {
// TODO Auto-generated method stub
System.out.println("SecondFilter init() 호출");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("SecondFilter 전처리");
chain.doFilter(request, response);
System.out.println("SecondFilter 후처리");
}
}
SecondFilter.java
Filter를 implement한다.
<?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>secondfilter</filter-name>
<filter-class>filter.SecondFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>secondfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>firstfilter</filter-name>
<filter-class>filter.FirstFilter</filter-class>
<init-param>
<param-name>data1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>data2</param-name>
<param-value>value2</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>firstfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
web.xml
web.xml에서의 필터추가는
filter태그로 한다

init()메서드는 톰캣실행시 실행되고
Filter는 응답과 요청사이에 있다
후처리는 서버에서 웹으로 오는방향이기때문에 마지막에 추가한 Filter부터 출력
Filter클래스
애노테이션으로 만들기





<%@ 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>
index.jsp<br>
<%
System.out.println("index.jsp 호출");
%>
</body>
</html>
index.jsp
package 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;
@WebFilter( urlPatterns = { "*.jsp" } )
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("FirstFilter init()");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("FirstFilter 전처리");
chain.doFilter(request, response);
System.out.println("FirstFilter 후처리");
}
}
FirstFilter.java
(기본 클래스)
package 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.http.HttpFilter;
/**
* Servlet Filter implementation class SecondFilter
*/
@WebFilter("*.jsp")
public class SecondFilter extends HttpFilter implements Filter {
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
System.out.println("SecondFilter 전처리");
chain.doFilter(request, response);
System.out.println("SecondFilter 후처리");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("SecondFilter init()");
}
}
SecondFilter.java
(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.WebInitParam;
import javax.servlet.http.HttpFilter;
/**
* Servlet Filter implementation class ThirdFilter
*/
@WebFilter(
urlPatterns = { "*.jsp" },
initParams = {
@WebInitParam(name = "data1", value = "value1", description = "데이터1"),
@WebInitParam(name = "data2", value = "value", description = "데이터2")
})
public class ThirdFilter extends HttpFilter implements Filter {
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
System.out.println("ThirdFilter 전처리");
chain.doFilter(request, response);
System.out.println("ThirdFilter 후처리");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("data1 : " + fConfig.getInitParameter("data1"));
System.out.println("data2 : " + fConfig.getInitParameter("data2"));
}
}
ThirdFilter.java
(Filter클래스 생성시 파라메터 추가)

form클래스로 만들기

<%@ 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>
<!-- form.jsp -->
<form action="form_ok.jsp" method="post">
데이터 <input type="text" name="data" />
<input type="submit" value="데이터" />
</form>
</body>
</html>
form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String data = request.getParameter("data");
out.println("data : " + data);
%>
form_ok.jsp
package 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.http.HttpFilter;
/**
* Servlet Filter implementation class EncodingFilter
*/
@WebFilter("*.jsp")
public class EncodingFilter extends HttpFilter implements Filter {
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
// 전처리
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
EncodingFilter.java


Filter로 필수입력요소검사
<%@ 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>
<form action="./check/form_ok.jsp" method="post">
데이터1<input type="text" name="data1" />
/
데이터2<input type="text" name="data2" />
<input type="submit" value="전송">
</form>
</body>
</html>
form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
out.println("data1 : " + request.getParameter("data1") + "<br>");
out.println("data2 : " + request.getParameter("data2") + "<br>");
%>
form_ok.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>
<!-- error.jsp -->
필수 입력 요소가 없습니다.
</body>
</html>
error.jsp
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
/**
* Servlet Filter implementation class InputFilter
*/
@WebFilter("/check/*")
public class InputFilter extends HttpFilter implements Filter {
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
request.setCharacterEncoding("utf-8");
// 입력값 검사
if(!request.getParameter("data1").equals("")) {
chain.doFilter(request, response);
} else {
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
InputFilter.java



리스너(Listener)
리스너란?
웹 어플리케이션이 시작되거나 종료되는 시점에 특정 클래스의 메서드를 실행할 수 있는 기능.
- 웹 어플리케이션 초기화시 호출
- 웹 어플리케이션 종료시 호출

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>
index.jsp<br>
<%
System.out.println("index.jsp");
%>
</body>
</html>
index.jsp
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class FirstListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("FirstListener 시작");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("FirstListener 끝");
}
}
FirstListener.java
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SecondListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("SecondListener 시작");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("SecondListener 끝");
}
}
SecondListener.java
<?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>ListenerEx01</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>listener.FirstListener</listener-class>
</listener>
<listener>
<listener-class>listener.SecondListener</listener-class>
</listener>
</web-app>
web.xml

리스너 클래스로 생성



<%@ 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>
</body>
</html>
index.jsp
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class FirstListener
*
*/
@WebListener
public class FirstListener implements ServletContextListener {
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("FirstListener contextDestroyed");
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("FirstListener contextInitialized");
}
}
FirstListener.java
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class SecondListener
*
*/
@WebListener
public class SecondListener implements ServletContextListener {
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("SecondListener contextDestroyed");
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("SecondListener contextInitialized");
}
}
SecondListener.java
출력문은 전과 같음
<%@ 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 영역
ServletContext context = getServletContext();
context.setAttribute("name", "홍길동");
out.println("context 추가 완료<br>");
out.println("context : " + context.getAttribute("name") + "<br>");
out.println("context : " + application.getAttribute("name") + "<br>");// 결과는 위,아래 같음
context.setAttribute("name", "박문수");
out.println("context 수정 완료<br>");
out.println("context : " + context.getAttribute("name") + "<br>");
context.removeAttribute("name");
out.println("context 삭제 완료<br>");
out.println("context : " + context.getAttribute("name") + "<br>");
%>
</body>
</html>
index.jsp
package listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class ApplicationListener
*
*/
@WebListener
public class ApplicationListener implements ServletContextAttributeListener {
// 생성자는 필요없으니 지워주기
/**
* @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)
*/
public void attributeAdded(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("attributeAdded : " + event.getValue());
}
/**
* @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)
*/
public void attributeRemoved(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("attributeAdded : " + event.getName());
}
/**
* @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)
*/
public void attributeReplaced(ServletContextAttributeEvent event) {
// TODO Auto-generated method stub
System.out.println("attributeAdded : " + event.getValue());
}
}
ApplicationListener.java
리스너 클래스 생성시
ApplicationListener를 체크


표현언어
표현식과 표현언어
- 표현식 <%= member.getAddress().getZipcode() %>
- 표현 언어 ${member.address.zipcode}
이 코드에서 보듯 표현언어가 더 간결하고 보기쉽다.
<%@ 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>
<table width="800" border="1">
<tr>
<td width="30%">출력</td>
<td><% out.println( "2" ); %></td>
</tr>
<tr>
<td>출력</td>
<td><%="2"%></td>
</tr>
<tr>
<td>\${test}</td>
<td>${"test"} / ${test} / <%-- <%=test %> --%> </td> <!-- 변수 / 값 -->
</tr>
</table>
</body>
</html>

el01.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>
<table width="800" border="1">
<tr>
<td width="30%">\${2 + 5}</td>
<td>${ 2 + 5 }</td>
</tr>
<tr>
<td width="30%">\${2 mod 5} / \${ 2 div 5 }</td>
<td>${ 2 mod 5 } / ${ 2 div 5 }</td>
</tr>
<tr>
<td width="30%">\${ "10" + 2 }</td>
<td>${ "10" + 2}</td>
</tr>
<tr>
<td width="30%">\${ "10" + "2" }</td>
<td>${ "10" + "2" }</td>
</tr>
<tr>
<td width="30%">\${ "10" }\${ "2" }</td>
<td>${ "10" }${ "2" }</td>
</tr>
<tr>
<td width="30%">\${ "일" + 2 }</td>
<td>\${ "일" + 2}</td> <!-- \을 넣지 않는다면 에러(문자열 결합오류) -->
</tr>
<tr>
<td width="30%">\${ 2 < 3 }</td>
<td>${ 2 < 3 }</td>
</tr>
<tr>
<td width="30%">\${ 2 lt 3 }</td>
<td>${ 2 lt 3 }</td> <!-- less then -->
</tr>
<tr>
<td width="30%">\${ data } / \${ empty }</td>
<td>${ data } / ${ empty data }</td> <!-- less then -->
</tr>
<tr>
<td width="30%">\${ 2 lt 3 ? "작다" : "크다"}</td>
<td>${ 2 lt 3 ? "작다" : "크다"}</td> <!-- less then -->
</tr>
</table>
</body>
</html>

el02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 지역변수 는 출력x
String name = "홍길동";
// 객체(pagecontext, request, session, application)안에 저장된 값 만이 출력o
pageContext.setAttribute("name2", "홍길동");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
name1 : ${ name1 }<br>
name2 : ${ name2 }<br>
name2 : ${ pageScope.name2 }<br>
name2 : ${ pageScope['name2'] }<br>
</body>
</html>

el03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("name1", "홍길동");
request.setAttribute("name2", "박문수");
session.setAttribute("name3", "성춘향");
application.setAttribute("name4", "이몽룡");
pageContext.setAttribute("name", "홍길동");
request.setAttribute("name", "박문수");
session.setAttribute("name", "성춘향");
application.setAttribute("name", "이몽룡");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
page : ${ name1 }<br>
request : ${ name2 }<br>
session : ${ name3 }<br>
application : ${ name4 }<br><br>
<!-- 영역(범위)이 가장작은것부터 출력 -->
name : ${ name }<br><br>
<!-- 지정해 출력할수도 있음 -->
name : ${ pageScope.name }<br>
name : ${ requestScope.name }<br>
name : ${ sessionScope.name }<br>
name : ${ applicationScope.name }<br><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>
헤더정보
${ header['host'] }<br> <!-- 사용자 정보 -->
${ header['user-agent'] }<br> <!-- 브라우저, 클라우드 os정보 -->
</body>
</html>

el05.jsp
<%@page import="model1.BoardTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
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>
${ to.subject }<br>
${ to.writer }<br>
</body>
</html>
el06.jsp
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;
}
}
BoardTO

<%@ 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>
<form action="form_ok.jsp" method="post">
아이디<input type="text" name="id" />
비밀번호<input type="password" name="password" />
<input type="submit" value="전송" />
</form>
</body>
</html>
form.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.id }<br>
비밀번호 : ${ param.password }<br>
아이디 : ${ param['id'] }<br>
비밀번호 : ${ param['password'] }<br>
</body>
</html>
form_ok.jsp

