본문 바로가기

카테고리 없음

56/Filter/Listener/표현언어(EL)

내용글

              textarea - text

              => webeditor(html)

                            => gmail

              webeditor

                            - 자바스크립트 라이브러리

                            * 네이버 스마트에디터

                                                  https://naver.github.io/smarteditor2/

                            * toast

                                          https://ui.toast.com 

                            * CK Editor

                                          https://cksource.com 

 

 

필터로 인해 만들수 있는것들

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 요청과 응답을 변경할 수 있는 재사용 가능한 클래스이다.

필터는 요청과 응답 사이에 위치하여 최종 자원의 결과를 알맞게 변경할 수 있다.

 

필터의 체인구조(기본구조는 필터1만)

 


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클래스

애노테이션으로 만들기

1. 필터클래스 만드는법
2. 필터클래스 이름 설정
3. 필터 맵핑

 

4. 서블릿 필터 interface추가


<%@ 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클래스 생성시 파라메터 추가)

 

runtime시 출력문

 


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

 

데이터1 공백시


리스너(Listener)

 

리스너란?

웹 어플리케이션이 시작되거나 종료되는 시점에 특정 클래스의 메서드를 실행할 수 있는 기능.

- 웹 어플리케이션 초기화시 호출

- 웹 어플리케이션 종료시 호출

 

클래스 생성시 Filter interface하기

 


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

 

출력시


리스너 클래스로 생성

1
2. 리스너클래스명 정하기
3. lifecycle 선택


<%@ 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