엑셀 다운로드시 날짜 형식의 데이터가 포함되어 있었다.

뷰에서는 YYYY-MM-DD hh:mm (2022-10-20 08:41)으로 잘 보여졌는데, 같은 데이터를 엑셀 다운로드 한 결과 yyyy-mm-dd h:mm (2022-10-20 8:41) 형식으로 보여지고 있었다.

구글링은 해보던 중 mso-number-format를 알게 되었고, mso-number-format형식 중 날짜형식 포맷 방법을 찾아 보았다.

mso-number-format:"mm\/dd\/yy" Date7
mso-number-format:"mmmm\ d\,\ yyyy" Date9
mso-number-format:"m\/d\/yy\ h:mm\ AM\/PM" D -T AMPM
mso-number-format:"Short Date" 01/03/1998
mso-number-format:"Medium Date" 01-mar-98
mso-number-format:"d-mmm-yyyy" 01-mar-1998
mso-number-format:"Short Time" 5:16
mso-number-format:"Medium Time" 5:16 am
mso-number-format:"Long Time" 5:16:21:00

하지만, 내가 원하는 포맷 방식은 나오지 않았다.

반나절을 고민.... 또 고민.

결론적으론 날짜서식을 문자열서식으로 포맷해주었더니 원하는 방식으로 잘 출력된다!!

mso-number-format:"\@" Text

mso-number-format 은 style에 지정해주면 된다!!

<td style='mso-number-format: \"@\";'>2022-10-20 08:46</td>

 

 

EL Tag(Expression Language) :  web 부분에서 java와 혼용하지 않기 위한 태그

형식 :  ${ 값, 연산식 }   

 

EL Tag와 Java 비교 사용 예시

<% // Java
   String str1 = "hello";
   request.setAttribute("_str", str1);
   String s = (String)request.getAttribute("_str");      /* 짐싸 */
%>
str1 = <%=s %>

<% // EL
   String str2 = "hi";
   request.setAttribute("_str", str2);
%>
str2 = ${ _str }

Java는 표현식(<%= %>)을 사용하여 value를 불러온다. (java는 getAttribute필요)

EL tag는 setAttribute에서 바로 value를 꺼내올 수 있다.

 

<%='값' %>
<br>
${ '값' }
<br>
${ 2 + 3 }

 

 

EL tag : empty 사용예시

<%
Object obj = new String("world");
if(obj != null) {
%>
   <p>obj는 null이 아닙니다</p>
<%
}
%>

<%
   request.setAttribute("world", obj);
%>
obj = ${ empty world }     <!-- false -->
<br>
obj = ${ not empty world } <!-- true -->

empty : boolean형 반환 obj가 비었니? 안비었니?

 

 

Java class 예시

package dto;

import java.io.Serializable;

public class MemberDto implements Serializable{

   private String message;
   
   public MemberDto() {
   }

   public String getMessage() {
      return message;
   }

   public void setMessage(String message) {
      this.message = message;
   }
   
}

 

 

<%
MemberDto dto = new MemberDto();
dto.setMessage("hello EL");

request.setAttribute("mem", dto);
%>

message:<%=dto.getMessage() %>
<br>
message:${ mem.message }

EL tag는 무조건 setAttribute를 거쳐야한다.

 

<%
	List<MemberDto> mlist = new ArrayList<>();

	MemberDto m = new MemberDto();
	m.setMessage("안녕");
	mlist.add(m);
	
	m = new MemberDto();
	m.setMessage("하이");
	mlist.add(m);
%>

<%=mlist.get(0).getMessage() %>
<br>

<%	
	request.setAttribute("mlist", mlist);
%>

${ mlist[1].message }
<br><br>
<input type="text" value="${ mlist[1].message }">
<p>${ mlist[1].message }</p>

 

배열 value 가져오는 예시

<%
   String array[] = { "hello", "world" };
   request.setAttribute("array", array);
%>

<%=array[0] %>
<br>
${ array[0] }
<br>
${ array[1] }

 

List value 가져오는 예시

<%
   List<String> list = new ArrayList<>();
   list.add("Tiger");
   list.add("Lion");
%>
<%=list.get(1) %>

<%
   request.setAttribute("mylist", list);
%>
<br>
${ mylist[1] }

Core Tag : 변수나 제어문을 사용할 수 있게 해주는 태그

 

Core Tag 사용시 jstl-1.2.jar, standard-1.1.2.jar파일이 있어야 한다.

 

 

 

Core Tag는 필히 page지시문에 jstl선언해주어야한다.

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

 

Core Tag와 Java 비교 사용예시

<%
   String data = "Core tag 입니다";
   request.setAttribute("_data", data); // 왼 : EL , 오: JAVA
%>

${ _data }      <!-- EL -->
<br>

<c:set var="_data" value="Core tag 입니다"/>
<!-- 위와 동일 -->
<c:out value="${ _data }"></c:out>
<br><br>

<!-- if -->
<%
	request.setAttribute("count", "10");
%>

<%
	String scount = (String)request.getAttribute("count");
	int count = Integer.parseInt(scount);
	if(count >= 10){
%>
	<p>count : <%=count %></p>
<%}%>


<!-- core tag는 자동으로 숫자로 해준다? -->
<c:if test="${count >= 10}">
	<p>count : <c:out value="${count}"></c:out>
	<p>count : ${count}</p>
</c:if>

<%
	request.setAttribute("name", "홍길동");
%>
<%
	String name = (String)request.getAttribute("name");
	if(name.equals("홍길동")){
%>
	<p>이름 : <%=name %></p>
<%} %>


<c:if test="${name == '홍길동' }">
<%-- <c:if test="${name eq '홍길동'}"> --%>
	<p>이름 : ${name}</p>
</c:if>


<!-- for -->
<%
	for(int i = 0; i < 10; i++){
%>
	<p><%=i %></p>
<%} %>

<!-- varStatus="i" : 밖으로 나가는 값 -->
<c:forEach begin="0" end="9" step="1" varStatus="i">
	<p>${i.index}</p>
</c:forEach>

<br><br>


<%
   List<MemberDto> list = new ArrayList<>();
   
   MemberDto dto = new MemberDto();
   dto.setMessage("hello");
   list.add(dto);
   
   dto = new MemberDto();
   dto.setMessage("world");
   list.add(dto);
   
   request.setAttribute("mylist", list);
%>
<%-- 데이터만 다 돌리고 싶을땐 :  var="mem" items="${mylist}" 이것만 있으면 된다. --%>
<c:forEach begin="0" end="1" var="mem" items="${mylist}" varStatus="i">
   <p>index:${i.index} data:${mem.message}</p>
</c:forEach>

 

c:set 변수의 선언
var 변수명
value 변수에 넣을 값
c:out 변수 출력
value 변수에 넣을 값
c:if 조건문 (if문)
test 조건 판별식
value 변수에 넣을 값
c:forEach 반복문 (for문)
begin 시작값
end 종료값
step 증감값
var 현재 아이템의 변수명
varStatus 반복상태의 값을 지닌 변수
items 반복데이터가 있는 아이템명

 

내장객체 이동성 메서드 종류 

response.sendRedirect()

pageContext.forward()

 

 

 

우선 java class를 선언하겠다.

package test;

public class TestClass {
	private String text;
	
	public TestClass() {}

	public TestClass(String text) {
		super();
		this.text = text;
	}
	public String getText() {
		return text;
	}
		this.text = text;
	}
}

위 class는 String text의 setter와 getter 그리고 파라미터로 text를 받는 생성자만 넣은 간단한 class이다.

 

위 코드의 생성자 파라미터를 받아 이동하여 페이지에 출력해주는 예제를 들어보겠다.

 

sendRedirect 예시

<%@page import="test.TestClass"%>
<%@ 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>
<%
TestClass cls = new TestClass("send");
session.setAttribute("test", cls);
// 위와 동일
// request.getSession().setAttribute("test", cls);

response.sendRedirect("send_ex2.jsp");
%>
</body>
</html>

 

send_ex2.jsp 예시

<%@ page import="test.TestClass" %>
<%@ 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>
<%
TestClass cls = (TestClass)session.getAttribute("test");
%>

<h3>TestClass 넘어온 Text : <%=cls.getText() %></h3>
</body>
</html>

설명

session.setAttribute에 값을 저장

response.sendRedirect로 이동한다.

 

sendRedirect는 request.setAttribute로 값을 저장하여 가지고 갈 수 없다.

session.setAttribute(String name, Object value) 

첫 번째 파라미터 찾을 이름, 두 번째 인수에 객체명을 지정한다.

session.getAttribute(String name)

파라미터에 setAttribute에 지정해놓은 찾을 이름을 지정한다.Object로 넘어오기 때문에 형변환은 필수이다.

 

 

 

실행화면

 


forward 예시

<%@page import="test.TestClass"%>
<%@ 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>
<%
TestClass cls = new TestClass("forward");
request.setAttribute("test", cls);

pageContext.forward("forward_ex2.jsp");
// 위와 동일
// request.getRequestDispatcher("forward_ex2.jsp").forward(request, response); 
%>
</body>
</html>

 

forward_ex2.jsp 예시

<%@page import="test.TestClass"%>
<%@ 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>
<%
TestClass cls = (TestClass)request.getAttribute("test");
%>

<h3>TestClass 넘어온 Text : <%=cls.getText() %></h3>
</body>
</html>

설명

request.setAttribute에 값을 저장 

pageContext.forward로 이동한다.

request.setAttribute(String name, Object value) 

첫 번째 파라미터 찾을이름, 두 번째 인수에 객체명을 지정한다.

request.getAttribute(String name)

파라미터에 setAttribute에 지정해놓은 찾을 이름을 지정한다.

Object로 넘어오기 때문에 형변환은 필수이다.

 

실행화면

 

session.setAttribute와 request.setAttribute의 차이점

session은 저장을 해서 가져가는 것이기 때문에 request에 비해 무겁다.

request는 단타성, 일회성이다.

 

form tag 사용하여 입력값 넘기기

 

데이터를 넘기는 jsp 예시1

<%@ 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>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<form action="insertAf.jsp">

아이디&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" id="id" name="id" size="20" placeholder="id입력"><br>
패스워드&nbsp;&nbsp;
<input type="password" id="pwd" name="pwd" size="20" placeholder="pw입력"><br><br>

취미<br> <!-- id접근법 확인  -->
<input type="checkbox" id="hobby1" name="hobby" value="잠자기">잠자기
<input type="checkbox" id="hobby2" name="hobby" value="노래하기">노래하기
<input type="checkbox" id="hobby3" name="hobby" value="게임하기">게임하기<br><br>

연령대
<input type="radio" id="age" name="age" value="10대" checked="checked">10대
<input type="radio" id="age" name="age" value="20대">20대
<input type="radio" id="age" name="age" value="30대">30대
<input type="radio" id="age" name="age" value="40대">40대
<input type="radio" id="age" name="age" value="50대">50대
<input type="radio" id="age" name="age" value="60대 이상">60대 이상<br><br>

기타 하고싶은 말<br>
<textarea rows="10" cols="30" id="massage" name="massage"></textarea><br>

<input type="submit" value="전송">
<input type="reset" value="취소">

</form> 
</body>
</html>

설명

submit 버튼을 누르게 되면 insertAf.jsp로 이동하게 된다.

 

실행화면


데이터를 넘기는 jsp 예시 2

.. 위 예시와 동일 ..
<body>

<form id="frm">
.. 위 예시와 동일 ..
<textarea rows="10" cols="30" id="massage" name="massage"></textarea><br>

<button type="button" id="send">전송</button>
</form>
<script type="text/javascript">
$(document).ready(function(){
	$("#send").click(function(){
		
		if($("#id").val() == ''){
			alert("id를 입력해주세요");
			return;
		}
		$("#frm").attr("action", "insertAf.jsp"); // attribute setting
		$("#frm").submit();
	});
});
</script>

설명

send를 클릭할 경우 form의 action 속성을 추가하고, 값으로 연결할 jsp파일명.jsp를 넣는다.

submit()를 호출하여 전송한다.

submit()

form tag의 전송 이벤트 함수이다.

 

실행화면

 

데이터를 받는 jsp예시(insertAf.jsp)

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

<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String hobby[] = request.getParameterValues("hobby");

String age = request.getParameter("age");
String massage = request.getParameter("massage");

out.println("id : "+ id +"<br>");
out.println("pwd : "+ pwd +"<br>");
if(hobby != null && hobby.length > 0){
	for(int i = 0; i < hobby.length; i++){
		out.println("hobby : "+ hobby[i] +"<br>");
	}
}
out.println("age : "+ age +"<br>");
out.println("massage : "+ massage +"<br>");
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

설명

내장함수 설명 글로 설명은 대체하겠다.

실행화면

 

테이블을 사용하여 구구단 작성하기

(새로고침 시 테이블의 행과 열이 증가해가는 페이지)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!	int size = 0; %>
<%	size++; %>

<table border="1">
	<% for(int i=1; i<size; i++){ %>
	<tr>
		<% for(int j=1; j<size; j++){ %>
			<td><%=i %>x<%=j %>=<%=i*j %>
		<% } %>
	</tr>
	<% } %>
</table>
</body>
</html>

 

설명

새로고침 할 때마다 증가를 시켜주기 위해선 전역변수를 잡아 주고 scriptlet에서 값을 증가 시켜준다.

table을 잡아주고 이중for문을 사용하는데 이때 i는 size보다 작아야 한다.(size는 새로고침 시마다 1씩 증가한다.)

td tag에 구구단을 넣기 위해 표현식을 사용한다.

변수 선언 후 페이지 새로고침 될 때마다 1씩 값 증가시키기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%! int num; %>
<%  num++;   %>
<h3>num : <%=num %></h3>

</body>
</html>

 

아주 간단한 문제이다.

 

선언부에 전역변수를 선언 후

scriptlet에서 변수를 증가시켜준다.

 

JSP(Java Server Page)란 ?

Server(web)를 통해서 Client form(document form (== 웹브라우저 전체))을 만들어 내는 코드이다.

Html안에 Java코드 사용한다. (Html과 Java가 섞여서 가독성이 좋지 못하다.)

Client에게 요청이 오면 Web Server를 거쳐 Web container에 들어가서 jsp파일이나 html파일에서 데이터를 찾아서 반환한다.

 

JSP 기본 문법 정리

문법명 형식 설명
주석문 <%--  --%> 1줄 주석문은 없다. 
html주석문 ( <!--  --> )도 사용가능하다.

page 지시문









<%@    %>








인코딩 클래스 가져 오기, 세션 관리 등 JSP 프로그램 전체의 동작에
관한 정의합니다.

예시) <@ page 속성 명 = "속성 값"속성 명 = "속성 값"... %>

속성명 속성설명
contentType JSP 프로그램의 응답시의 MIME 타입과 문자 인코딩을 지정합니다. 
session  HTTP 세션을 사용할지 여부를 지정합니다. (기본값 True)
pageEncoding JSP 프로그램을 Servlet 프로그램으로 변환 할 때의 문자 인코딩을 지정합니다. 
language JSP 프로그램에서 사용하는 언어를 지정합니다.
import     JSP 프로그램에서 가져올 클래스 패키지를 지정합니다.
errorPage   JSP 프로그램에서  잡을 수 없는 예외를 처리 할 페이지를 지정합니다.
autoFlush
버퍼에 데이터가 쌓여 때 자동으로 클라이언트에 데이터를 보낼 것인지를 지정합니다.
buffer
클라이언트로 전송하는 데이터를 버퍼링 할 때 버퍼의 용량을 지정합니다. 용량은 kb로 지정합니다. 기본 크기는 8kb입니다. 버퍼하지 않으면 none을 지정합니다.
선언부 <%!      %> 전역변수, class, function를 선언하는 영역이다.
변수, 메소드 선언시 반드시; (세미콜론)가 필요합니다.
선언에서 선언 된 변수, 메소드는 처음 요청이있을 때 한 번만 호출됩니다. 
따라서 계속되는 요구에도 변수의 값은 초기화되지 않고, JSP 컨테이너 (Tomcat )
다시 시작할 때까지 값이 유지됩니다.
위치는 관계없지만 대부분 문서 윗쪽에 작성한다.
scriptlet <%       %> 실제 코드들이 들어가있는 부분이다.( == 코드부)
스크립틀릿은 JSP 태그에서는 표현할 수없는 작업을 Java 코드를 작성하고 자유로운
작업을 수행하는 경우에 사용합니다. 
Java 코드를위한 각 코드에는 반드시; (세미콜론)가 필요합니다.
scriptlet에서 선언 된 변수는 요청 때마다 호출됩니다. 
따라서 그 요청이 있을 때마다 변수의 값이 초기화됩니다.
표현식 <%=     %> Java 코드를 작성하고 그 결과를 표시합니다. 
따라서 실행 결과를 반환 코드 밖에 기술할 수는 없습니다. 
실행 결과를 리턴하지 void 메소드나 변수의 선언만 식으로 설명 할 수 없습니다. 
표현식에서는 ; (세미콜론)을 작성하지 않습니다.

 

내장(암시)객체

new(생성)을 하지 않고 바로 사용이 가능한 객체를  의미합니다.

 

자주 사용하는 내장객체 / 메소드 정리

객체명 객체 설명 메소드 메소드 설명
request 

javax.servlet.http.HttpServletRequest
인터페이스 객체 변수 입니다. 
클라이언트에서 전송 된 매개 변수 데이터 헤더 정보, Cookie를 취득 할 때 사용합니다. 


getParameter (String) 파라미터 값을 받을 때 사용합니다.
매개 변수가없는 경우는 Null이 반환됩니다.
getParameterValues​​ (String) 파라미터 값들을 받을 때 사용합니다.
String 형의 배열로 반환됩니다.
매개 변수가없는 경우는 Null이 반환됩니다.
 setAttribute(String name, Object value)  첫번째 파라미터 데이터 이름, 두 번째 인수에
데이터 값을 지정하고 세션 범위의 데이터 값을
등록합니다. 이미 데이터 이름이 있으면 새로 지정된 데이터 값을 덮어 씁니다.
 getAttribute(String name) 인수에 지정된 데이터 이름에 해당하는 세션 범위의 데이터 값을 반환합니다. 해당 데이터 이름이없는 경우는
null를 리턴합니다.
response javax.servlet.http.HttpServletResponse
인터페이스 객체 변수입니다.

클라이언트에 헤더 정보, HTTP 상태, Cookie 등을 반환 할 때 사용합니다. 
sendRedirect (String) 인수에 지정된 URL로 리디렉션(이동)합니다.
pageContext

javax.servlet.jsp.PageContext 클래스의 객체 변수입니다. 
이 객체는 JSP에서 사용되는 모든 객체를 관리 할 수 있습니다. 

forward (String) 인수에 지정된 URL에 요청을 전송합니다.처리는 전송 된 URL에
인계됩니다. URL은 상대 경로로 지정할 수 있습니다. 
forward 메서드 전에 어떤 값을 출력하는 처리를 해서는
안됩니다. 
값을 출력하는 작업을 수행하는 경우는 예외가 슬로우됩니다.
include (String) 인수에 지정된 URL의 리소스를 실행하고 처리 결과를 전송 바탕으로 반환합니다.URL은 상대 경로로 지정할 수 있습니다.
session

암시 객체 sessionjavax.servlet.http.HttpSession 인터페이스 객체 변수입니다. 
클라이언트와 서버 간의 세션 관리에 사용합니다. 
 page 지시어의 session 속성에 false가 설정되어있는 경우이 암시 객체를 사용 할 수 없습니다.
 setAttribute(String name, Object value)  첫번째 파라미터 데이터 이름, 두 번째 인수에
데이터 값을 지정하고 세션 범위의 데이터 값을
등록합니다. 이미 데이터 이름이 있으면 새로 지정된 데이터 값을 덮어 씁니다.
getAttribute (String) 인수에 지정된 데이터 이름에 해당하는 세션 범위의 데이터 값을 반환합니다. 해당 데이터 이름이없는 경우는
null를 리턴합니다.
out javax.servlet.jsp.JspWriter 클래스의 객체 변수입니다. 
브라우저에 출력이나 버퍼링 등 주로 출력 계의 메소드가 정의되어 있습니다. 
println (var) 인수에 지정된 값과 OS 환경에 맞게 개행 문자를 출력합니다.

 

+ Recent posts