출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

archive.apache.org/dist/commons/fileupload/binaries/

 

Index of /dist/commons/fileupload/binaries

 

archive.apache.org

commons.apache.org/proper/commons-io/download_io.cgi

 

Commons IO – Download Apache Commons IO

Download Apache Commons IO Using a Mirror We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours)

commons.apache.org

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 업로드</title>
</head>
<body>

	<h1>파일 업로드</h1>
	
	<!-- 
				필수 1 : form tag 안의 속성 method="post" 
				필수 2 : form tag 안의 속성 enctype="multipart/form-data"
	 -->
	 
	<form action="upload.jsp"  method="post" enctype="multipart/form-data" >
	
		<input type="text" name="title"><br>
		
		<!-- 필수3 :  업로드 할 파일을 선택할 수 있는 input -->
		<input type="file" name="file"><br>
		
		<input type="submit">
	</form>
	

</body>
</html>

upload.jsp

<%@page import="java.io.File"%>
<%@page import="java.util.Iterator"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	boolean result = false;
	
	// 파라미터 이름이 title인 데이터를 저장할 변수
	String title = null;
	// 1. multipart/form-data 여부 확인
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	
	if(isMultipart){
		
		// 2. 업로드 할 파일을 보관 FileIte의 Factory 설정
		DiskFileItemFactory factory = new DiskFileItemFactory();
		
		// 3. 요청을 처리(form 안의 input 들을 분리 )할 ServletFileUpload 생성
		ServletFileUpload upload = new ServletFileUpload(factory);
		
		// 4. 사용자의 요청을 파싱(데이터를 추출해서 원하는 형식으로 만드는것)
		// FileItem ->  사용자의 요청 파라미터인 input의 객체
		List<FileItem> items = upload.parseRequest(request);
		
		Iterator<FileItem> itr = items.iterator();
		
		while(itr.hasNext()){
			
			FileItem item = itr.next();
			
			// 폼 필드와 파일 을 구분해서 처리
			if(item.isFormField()){
				
				// true -> type=file 인 것을 제외한 나머지 필드
				// 필드 이름, 파라미터 이름
				String fName = item.getFieldName();
				if(fName.equals("title")){
					title = item.getString("utf-8");
				}
				
				request.setAttribute("title", title);
				
			} else {
				
				// false -> type=file 인 필드
				String fName = item.getFieldName(); 		// 필드의 이름
				String userFileName = item.getName();		// 파일의 이름
				String contentType = item.getContentType();	// 컨텐트 타입
				long fileSize = item.getSize();				// 파일의 바이트 사이즈
				
				System.out.println("필드 이름 : "+fName);
				System.out.println("파일 이름 : "+userFileName);
				System.out.println("컨텐츠 타입 : "+contentType);
				System.out.println("File size : "+fileSize);
				
				// 파이을 서버의 특정 폴더에 저장(쓰기)
				if(!userFileName.isEmpty() && fileSize>0){
					
					// 파일을 실제 저장할 폴더의 시스템 경로
					String dir = request.getSession().getServletContext().getRealPath("/upload");
					System.out.println(dir);
					
					// 저장할 경로를 File 객체로 생성
					File saveFilePath = new File(dir);
					
					// 폴더가 존재하지 않으면 폴더를 생성
					if(!saveFilePath.exists()){
						saveFilePath.mkdir();
					}
					
					// 파일 쓰기(저장)
					item.write(new File(saveFilePath, userFileName));
					System.out.println("파일 저장 완료!");
					
					// 완료시에 전달할 데이터
					request.setAttribute("saveFileName", userFileName);
					
				}
				
			}
			
		}
		// 정상 처리
		result = true;
		request.setAttribute("result", result);
		
	}
	
	
		
%>

<jsp:forward page="upload_view.jsp"/>

upload_view.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:if test="${result}">
		<h1>파일 업로드가 되었습니다.</h1>
		<h3>
			TITLE : ${title}<br> 파일 이름 : ${saveFileName}
		</h3> 
		<img alt="프로필 사진" src="<c:url value="/upload/${saveFileName}"/>">
	</c:if>
	
	<c:if test="${!result}">
		<h1>파일 업로에 문제가 발생했습니다. 다시 시도해주세요.</h1>
	</c:if>

</body>
</html>

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] JSTL - fmt  (0) 2020.12.23
[JSP] JSTL 설치 및 사용 / core <c:~>  (0) 2020.12.23
[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ 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>

	1. <fmt:formatNumber value="1000000"/> <br>
	2. <fmt:formatNumber value="1000000" groupingUsed="false"/><br>
	3. <c:set var="number" value="123456789"/>
	 	<fmt:formatNumber value="${number}"/><br>
	4. <fmt:formatNumber var="fNumber" value="${number}"/> 
		 ${fNumber}<br>
		 
	통화 :  <fmt:formatNumber value="${number}" type="currency" currencySymbol="원"/> , <fmt:formatNumber value="${number}" type="currency"/><br>
	퍼센트 :  <fmt:formatNumber value="${number/50000000}" type="percent"/><br>
	패턴 : <fmt:formatNumber value="${number}" pattern="000,000,000.00"/>
		

</body>
</html>

 

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


<%
	request.setAttribute("now", new Date());
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


 
<%-- 전부 홍콩 시간대로 바귐 <fmt:timeZone value="Hongkong"> --%>
	<b>date</b><br>
	${now}<br>
	<fmt:formatDate value="${now}"/><br>
	<fmt:formatDate value="${now}" type="date"/><br>
	<fmt:formatDate value="${now}" type="date" dateStyle="full"/><br>
	<fmt:formatDate value="${now}" type="date" dateStyle="short"/><br>
	<b>time</b><br>
	<fmt:formatDate value="${now}" type="time"/><br>
	<fmt:formatDate value="${now}" type="time" timeStyle="full"/><br>
	<fmt:formatDate value="${now}" type="time" timeStyle="short"/><br>
	<b>both</b><br>
	<fmt:formatDate value="${now}" type="both"/><br>
	<fmt:formatDate value="${now}" type="both" dateStyle="full" /><br>
	<fmt:formatDate value="${now}" type="both" dateStyle="short" timeStyle="short"/><br>
	<b>패턴</b> <br>
	<fmt:formatDate value="${now}" pattern="z a h:mm"/><br>
	<fmt:formatDate value="${now}" pattern="hh:mm"/><br>
	<fmt:formatDate value="${now}" pattern="yyy-MM-dd h:mm"/><br>
	<fmt:formatDate value="${now}" pattern="yyy-MM-dd h:mm" timeZone="Hongkong"/><br>
	
<%-- </fmt:timeZone> --%>
	
</body>
</html>

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] FileUpload  (0) 2020.12.24
[JSP] JSTL 설치 및 사용 / core <c:~>  (0) 2020.12.23
[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17

tomcat.apache.org/taglibs/standard/

 

서블렛과 JSP 버전에 맞는 JSTL 설치

내가쓰는 tomcat8.5는 1.2를 설치

 

 

if, forEach, Url을 많이 사용한다
ontains(x) >> contains

 

 

<c:out>태그

 

 

makeList.jsp

<%@page import="form.Member"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%


 List<Member> members = new ArrayList<Member>();
	members.add(new Member("cool1","1111","cool11","photo11.jpg"));
	members.add(new Member("cool2","2222","cool12","photo12.jpg"));
	members.add(new Member("cool3","3333","cool13",null));
	members.add(new Member("cool4","4444","cool14","photo14.jpg"));
	members.add(new Member("cool5","5555","cool15","photo15.jpg"));
	members.add(new Member("cool6","6666","cool16","photo16.jpg"));
	members.add(new Member("cool7","7777","cool17","photo17.jpg"));
	members.add(new Member("cool8","8888","cool18",null));
	members.add(new Member("cool9","9999","cool19",null));
	members.add(new Member("cool10","0000","cool10","photo10.jpg"));
	
	session.setAttribute("members", members);
	


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

<!-- 코어태그사용을 위한 태그라이브러리 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 모듈화가능 -->
<%@ include file="makeList.jsp"%>

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

	<h1>회원리스트</h1>

	<table border="1">
		<tr>
			<th>ID</th>
			<th>PASS</th>
			<th>NAME</th>
			<th>PHOTO</th>
		</tr>
        
		<c:forEach items="${members}" var="member">
			<tr>
				<td>${member.userId}</td>
				<td>${member.pass}</td>
				<td>${member.userName}</td>
				
				<td>
					<c:out value="${member.userPhoto}" escapeXml="false">
						<span style="color:red">프로필 사진 없음</span>
					</c:out>				
				</td>
				
			</tr>

		</c:forEach>
	</table>


</body>
</html>

 

<c:if>태그

 

!!!!!!!!!!!!!!!!! 참고

eq : =

ne : !=

 

<%@ 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="msg" value="user1" />
	msg : ${msg}
	<!-- 기본으로 page 속성에 들어가있음 -->
	<br>

	<%-- <c:if test="논리값이 true일때 출력"></c:if> --%>
	<c:if test="${true}">
		1) test 속성값이 true일때 출력
	</c:if>
	<br>

	<c:if test="${msg=='user1'}">
		2) test 속성값이 true일때 출력
	</c:if>
	<br>

	<c:if test="${msg=='user1'}" var="result" scope="page">
		3) test 속성값이 true일때 출력 : ${result}
	</c:if>
	<br>

	<c:if test="${msg eq 'user1'}" var="result1" scope="page">
		4) test 속성값이 true일때 출력 : ${result1}
	</c:if>
	<br>
	
	<c:if test="${msg ne 'user1'}" var="result2" scope="page">
		5) test 속성값이 true일때 출력 : ${result2}
	</c:if>	${result2}
	
	<br>
	
</body>
</html>

 

<c:choose>,<c:when>,<c:otherwise> 태그

 

 

이들 태그는 함께 사용되며 자바의 if ~ else if 문, switch 문과 유사하다.
<c:choose> 태그 내에는 <c:when> 태그가 여러 개 올 수 있다.

 

	<c:set var="number" value="12"/>
	
	<c:choose>
		<c:when test="${number>0}">
			양수입니다.
		</c:when>
		<c:when test="${number<0}">
			음수입니다.
		</c:when>
		<c:otherwise>
			0입니다.
		</c:otherwise>	
	</c:choose>
	
	<br>

 

<c:forEach> 태그

 

반복문과 관련된 태그로 자바의 for 문과 유사하다. 

가장 중요하고 널리 쓰이는 JSTL 태그 중 하나임.
여러 옵션 활용법을 잘 익혀 두어야 한다.

 

 

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

<!-- 코어태그사용을 위한 태그라이브러리 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 모듈화가능 -->
<%@ include file="makeList.jsp"%>

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

	<h1>회원리스트</h1>

	<table border="1">
		<tr>
			<th>INDEX</th>
			<th>COUNT</th>
			<th>ID</th>
			<th>PASS</th>
			<th>NAME</th>
			<th>PHOTO</th>
		</tr>
		<!-- index, count -->
		<c:forEach items="${members}" var="member" varStatus="status">
			<tr>
				<td>${status.index}</td>
				<td>${status.count}</td>
				<td>${member.userId}</td>
				<td>${member.pass}</td>
				<td>${member.userName}</td>
				
				<td>
					<c:out value="${member.userPhoto}" escapeXml="false">
						<span style="color:red">프로필 사진 없음</span>
					</c:out>				
				</td>
				
			</tr>
			<!-- index, count -->

		</c:forEach>
	</table>
	
	<c:forEach var="num" begin="1" end="10" step="2">
		${num} <br>
	
	</c:forEach>

</body>
</html>

 

 

 

 

<c:forTokens> 태그

 

 

<%@ 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:forTokens var="phoneNum" items="010-9999-7777" delims="-">
	${phoneNum}
</c:forTokens>


<c:forTokens var="phoneNum" items="010-9999-7777" delims="-" varStatus="stat">
	<input type="text" name="phoneNum${stat.count}" value="${phoneNum}">
	<c:if test="${stat.count<3}">-</c:if>
</c:forTokens>


</body>
</html>

 

URL 관련 태그

 

잘안씀

<c:url> 태그

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

	<!-- context경로/index.jsp -->
	<c:url value="/index.jsp"/><br>
	
	<c:url value="/index.jsp"/><br>
	<c:url value="/index.jsp"/><br>
	<c:url value="/index.jsp" var="indexLink"/><br>
	
	${indexLink}
	
	<br>
	<c:url value="/index.jsp">
		<c:param name="pageNumber" value="1"/>
		<c:param name="keyword" value="jstl"/>
	</c:url>
	
	
</body>
</html>

 

그외 : <c:remove>태그

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] FileUpload  (0) 2020.12.24
[JSP] JSTL - fmt  (0) 2020.12.23
[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17

 

 

 

내장객체의 표현식이 생략되었을 때 규칙.
1. pageScope영역에서 찾는다.
2. request  > 3. session > 4. application
[영역이작은쪽부터]

 

 

예제

 

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

<% 

	request.setAttribute("userName", "김태형1");
	session.setAttribute("userName", "김태형2");
	application.setAttribute("userName", "김태형3");
	session.setAttribute("userId", "V");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>
<!-- 
내장객체의 표현식이 생략되었을 때 규칙.
1. pageScope영역에서 찾는다.
2. request  > 3. session > 4. application
[영역이작은쪽부터]
-->

	requestScope.userName : ${requestScope.userName},
							${userName}, <!-- 영역 생략가능 -->
							<%= request.getAttribute("userName") %> <br>
	sessionScope.userId : ${sessionScope.userId}, ${userId}
							<%= session.getAttribute("userId") %> <br>
							
	param.code : <%=request.getParameter("code") %>, 
				${param.code}<br>

	pageContext : <%= pageContext.getRequest().getServletContext().getContextPath() %><br>
				${pageContext.request.requestURI}<br>
				${pageContext.request.requestURL}<br>
				${pageContext.request.contextPath}<br>
				
</h1>

<a href="view1.jsp">session페이지 확인</a>

</body>
</html>

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


<h1>
${sessionScope.userId}, ${userId}

</h1>
</body>
</html>

 

 

 

예제

test패키지 안의 자바클래스 product.java 생성

package test;

import java.util.Arrays;

//상품 정보를 가지는 beans 형식으로 정의
public class Product {
	
	// 상품 목록
	private String[] productList = {"item1","item2","item3","item4","item5",};

	// 테스트 변수
	private int price = 100;
	private int amount = 1000;
	
	public String[] getProductList() {
		return productList;
	}
	public int getPrice() {
		return price;
	}
	public int getAmount() {
		return amount;
	}
	
	public String getDisplay() {		
		return "price: "+ price + ", amount : " + amount;
	}
	@Override
	public String toString() {
		return "Product [productList=" + Arrays.toString(productList) + ", price=" + price + ", amount=" + amount + "]";
	}
	
	
	
	
}

 

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

	<jsp:useBean id="product" class="test.Product" scope="session"/>
	
	<%-- ${product} <br> --%>
	<%-- ${sessionScope.product} --%>
	
	<form action="selectProduct.jsp" method="post">
	
		<select name="sel">
		
		<%
			for(String item:product.getProductList()){
				out.println("<option>"+item+"</option>");
			}
		%>
			
		</select>
		
		<input type="submit" value="선택">
		
	</form>

</body>
</html>

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


	1. 선택한 상품 : ${param.sel} <br>
	2. 상품 설명 : ${product.display} <br>
	<!-- > display라는 변수는 없음 product.getDisplay() -->
	3. 상품 : ${product.productList[0]}
</body>
</html>

 

 

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] FileUpload  (0) 2020.12.24
[JSP] JSTL - fmt  (0) 2020.12.23
[JSP] JSTL 설치 및 사용 / core <c:~>  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17

lib에 복사붙여넣기함

 

 

 

 

- aia 라는 계정에 open이라는 스키마를 만들고 그 안에 스캇계정 테이블 dept와 emp 추가해주었음

 

 

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	// 모든 JAVA API를 사용할 수 있다.

Connection conn = null;

// 1. 드라이버 로드
Class.forName("com.mysql.cj.jdbc.Driver");

// 2. DB 연결 : connection 객체를 얻어온다.
String jdbcUrl = "jdbc:mysql://localhost:3306/open?serverTimezone=UTC";
String user = "aia";
String password = "aia";

conn = DriverManager.getConnection(jdbcUrl, user, password);

out.println("<h1>mysql 연결<h1>");

// statement 인스턴스 생성
Statement stmt = conn.createStatement();

// SQL
String sql_dept = "select * from dept";

ResultSet rs = stmt.executeQuery(sql_dept);
%>

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

	<h1>부서리스트</h1>


	<table border=1>
		<tr>
			<th>부서번호</th>
			<th>이름</th>
			<th>위치</th>

			<%
				while (rs.next()) {
			%>
		</tr>
		<td><%=rs.getInt(1)%></td>
		<td><%=rs.getString(2)%></td>
		<td><%=rs.getString("loc")%></td>
		</tr>

		<%
			}

		rs.close();
		stmt.close();
		conn.close();
		%>
	</table>


</body>
</html>

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] JSTL - fmt  (0) 2020.12.23
[JSP] JSTL 설치 및 사용 / core <c:~>  (0) 2020.12.23
[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Date time = new Date();
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 정보 출력</title>
</head>
<body>

	<h1>세션 정보</h1>
	<h3>
		세션 ID : <%= session.getId() %><br>
		세션 생성 시간 : <%= session.getCreationTime() %>, <%= format.format(session.getCreationTime()) %><br>
		최근 접속 시간 : <%=session.getLastAccessedTime()%>, <%= format.format(session.getLastAccessedTime())%><br>
	</h3>
</body>
</html>

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] JSTL 설치 및 사용 / core <c:~>  (0) 2020.12.23
[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] 쿠키처리를 위한 유틸리티 클래스 만들기  (0) 2020.12.17
[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17
[JSP] beans 빈즈  (0) 2020.12.17

CookieBox.java

package util;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

// 쿠키 객체를 생성하고 저장하고, 저장된 쿠키를  꺼내쓰는 기능
public class CookieBox {
	
	// Cookie 객체를 저장하는 Map 객체를 생성
	  Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
	
	// 초기화 : cookieMap에 cookie 데이터를 저장
	// 생성자 :
	public CookieBox(HttpServletRequest request) {
		// request를 통해 cookie 정보를 얻을 수 있다.
		Cookie[] cookies = request.getCookies();
		
		if(cookies!=null && cookies.length>0) {
			for(int i=0; i<cookies.length; i++) {
				// cookieMp에 Cookie 객체를 저장
				cookieMap.put(cookies[i].getName(), cookies[i]);
			}
		}
	}
	
	// 이름으로 쿠키 객체를 반환
	public Cookie getCookie(String name) {
		return cookieMap.get(name);
	}
	
	// 이름으로 쿠ㅋ키의 저장값을 반환
	public String getValue(String name) throws IOException {
		
		Cookie cookie = cookieMap.get(name); // Map에 name키가 업으면 null 반환
		
		if(cookie==null) {
			return null;
		}
		
		return URLDecoder.decode(cookie.getValue(),"UTF-8");
	}
	
	// cookieMap에 특정 이름의 쿠키가 존재하는지 여부 확인
	public boolean exists(String name) {
		return cookieMap.get(name) != null;
	}
	
	// 쿠기 객체를 생성해주는 메소드 : 객체를 생성하지 않고도 사용할 수 있는 메소드로 정의 : static 멤버로 정의
	// 오버로딩
	
	// 이름, 값을 가지고 cookie 객체 생성
	public static Cookie createCookie(String name, String value) {
		Cookie cookie = new Cookie(name, value);
		
		return cookie;
	}
	
	// 이름, 값, 경로, 유지시간을 가지고 cookie 객체 생성
	public static Cookie createCookie(
			String name, String value, String path, int maxAge) {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath(path);       // 경로 설정
		cookie.setMaxAge(maxAge);	// 쿠기 유지시간 설정		
		
		return cookie;
	}
	

	// 이름, 값, 경로, 유지시간, 도메인을 가지고 cookie 객체 생성
	public static Cookie createCookie(
			String name, String value, String path, int maxAge, String domain) {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath(path);       // 경로 설정
		cookie.setMaxAge(maxAge);	// 쿠기 유지시간 설정		
		cookie.setDomain(domain);	// 쿠키 도메인 설정
		
		return cookie;
	}
}

 

loginForm.jsp

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

<%
	CookieBox cookieBox = new CookieBox(request);

	// 삼항연산자 [null값 출력을 막기 위해]
	String saveId =  cookieBox.exists("uid")? cookieBox.getValue("uid"):"";	
	String checked = cookieBox.exists("uid")? " checked " :  "";
	
%>
<!DOCTYPE html>
<html lang="ko">

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인 폼</title>
</head>

<body>
	<h1>회원 로그인</h1>
	<hr>
	<form action="loginResult.jsp" method="get">
		<table>
			<tr>
				<th><label for="userid">아이디</label></th>
				<td><input type="text" id="userid" name="userid" value="<%= saveId%>"></td>
			</tr>
			<tr>
				<th><label for="pw">비밀번호</label></th>
				<td><input type="password" id="pw" name="pw"></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="checkbox" name="chk" value="on"<%= checked %>> 아이디
					저장</td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" value="로그인"></td>
			</tr>
		</table>
	</form>

</body>

</html>

 

 

loginResult.jsp

<%@page import="util.CookieBox"%>
<%@page import="form.LoginFormData"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%

LoginFormData lfData = new LoginFormData();

String userId = request.getParameter("userid");
String pass = request.getParameter("pw");

String chk = request.getParameter("chk");

if(chk!=null && chk.equals("on") && userId!=null && !userId.isEmpty()){
	// 쿠키 생성 저장해준다
	// uid =  userId를 저장하자
	response.addCookie(CookieBox.createCookie("uid", userId, "/", 60*60*24*365));
	
}else{
	// 저장하지 않기 & 저장이 되었다면 삭제하기
	response.addCookie(CookieBox.createCookie("uid", userId, "/", 0));
}

lfData.setUserId(userId);
lfData.setPass(pass);

request.setAttribute("loginData", lfData);
%>

<jsp:forward page="loginView.jsp"/>

 

 

체크하면 > 체크상태가 유지 되고 아이디가 기억됨

 

체크를 다시 풀면 > 쿠키에서 아이디가 사라지고 체크상태도 풀림

 

 

번외)

 

<%@page import="util.CookieBox"%>
<%@page import="java.net.URLDecoder"%>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%

// 쿠키 객체를 생성
Cookie c1 = new Cookie("userID", "V");
// response.addCookie(쿠키객체)
response.addCookie(c1);

Cookie c2 = new Cookie("userName", URLEncoder.encode("김태형", "UTF-8"));
c2.setMaxAge(60*20); // 20분 뒤 삭제!
response.addCookie(c2);

response.addCookie(CookieBox.createCookie("nickName","MC_JADU"));
response.addCookie(CookieBox.createCookie("age", "26","/",-1));



%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>쿠키생성, 저장</h1>
	<h3> <%= c1.getName()%>=<%=c1.getValue() %></h3>
	<h3> <%= c2.getName()%>=<%= URLDecoder.decode(c2.getValue(), "utf-8")%></h3>
	
	<a href="viewCookie.jsp">쿠키 정보 보기</a>
	
</body>
</html>

viewCookie.jsp

<%@page import="util.CookieBox"%>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%

	CookieBox cookieBox = new CookieBox(request);
	
 
%>

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

userID = <%= cookieBox.getValue("userID") %><br>
Age = <%= cookieBox.getCookie("age").getValue() %><br>
nickName이 존재하는가? = <%= cookieBox.exists("nickName") %>

 
 <h1><a href="editCookie.jsp">쿠키 수정하기</a></h1>
 <h1><a href="deleteCookie.jsp">쿠키 삭제하기</a></h1>

</body>
</html>

 

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17
[JSP] beans 빈즈  (0) 2020.12.17
[JSP] 내장객체와 속성관리 / 생명주기  (0) 2020.12.16

 

 

구성 요소

이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
값 : 쿠키의 이름과 관련된 값
유효시간 : 쿠키의 유지 시간
도메인 : 쿠키를 전송할 도메인
경로 : 쿠키를 전송할 요청 경로


쿠키 이름의 제약
쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.
콤마(,), 세미콜론(;), 공백(' ') 등의 문자는 포함할 수 없다.
'$'로 시작할 수 없다.

 

예제

makeCookie.jsp

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

// 쿠키 객체를 생성
Cookie c1 = new Cookie("userID", "V");
// response.addCookie(쿠키객체)
response.addCookie(c1);

Cookie c2 = new Cookie("userName", URLEncoder.encode("김태형", "UTF-8"));

response.addCookie(c2);


%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>쿠키생성, 저장</h1>
	<h3> <%= c1.getName()%>=<%=c1.getValue() %></h3>
	<h3> <%= c2.getName()%>=<%= URLDecoder.decode(c2.getValue(), "utf-8")%></h3>
	
	<a href="viewCookie.jsp">쿠키 정보 보기</a>
	
</body>
</html>

viewCookie.jsp

<%@page import="java.net.URLDecoder"%>
<%@ 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>

 <%
 
 	// 쿠키 가져오기!
 	Cookie[] cookies = request.getCookies();
 
 	if(cookies != null && cookies.length>0){
 		
 		for(int i=0; i<cookies.length; i++){
 			String name = cookies[i].getName();
 			String value = URLDecoder.decode(cookies[i].getValue(),"UTF-8");
 			
 			out.println("<h1>"+name+" : "+value+"</h1>");
 		}
 		
 	}else{
 		out.println("<h1>저장된 쿠키가 없습니다.</h1>");
 		
 	}
 
 %>

</body>
</html>

 

 


 

쿠키 값 변경

쿠키값 그냥 똑같은 이름으로 해주면 덮어써짐!

 

예제

쿠키 수정하기 > editCookie.jsp 를 추가!

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

<%
	// V를 BTS로 변경
	Cookie cookie = new Cookie("userID", "BTS");
	response.addCookie(cookie);

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

<h1>쿠키 userID의 값이 변경되었습니다.</h1>
<a href="viewCookie.jsp">바뀐 쿠키 정보 확인 </a>

</body>
</html>

 


 

쿠키 삭제하기

쿠키의 유지시간을 0으로 설정해준다.

예제

쿠키 수정하기 > deleteCookie.jsp 를 추가!

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


<%
	// 쿠키 삭제를 위해 쿠키의 유지 시간을 0으로 설정해준다.
	Cookie cookie = new Cookie("userID","");
	cookie.setMaxAge(0);
	response.addCookie(cookie);
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>쿠키 userID의 값이 삭제되었습니다.</h1>
<a href="viewCookie.jsp">삭제된 쿠키 정보 확인 </a>

</body>
</html>

 

 

 


 

알아만두기

 


 

ex) 하루동안 보지 않기

 

예제

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

// 쿠키 객체를 생성
Cookie c1 = new Cookie("userID", "V");
// response.addCookie(쿠키객체)
response.addCookie(c1);

Cookie c2 = new Cookie("userName", URLEncoder.encode("김태형", "UTF-8"));
c2.setMaxAge(60*20); // 20분 뒤 삭제!
response.addCookie(c2);


%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>쿠키생성, 저장</h1>
	<h3> <%= c1.getName()%>=<%=c1.getValue() %></h3>
	<h3> <%= c2.getName()%>=<%= URLDecoder.decode(c2.getValue(), "utf-8")%></h3>
	
	<a href="viewCookie.jsp">쿠키 정보 보기</a>
	
</body>
</html>

 

에러페이지 지정 및 작성

 

에러 페이지 지정

– <%@ page errorPage="예외발생시보여질JSP지정" %>

 

에러 페이지 작성

– <%@ page isErrorPage="true" %>
   > isErrorPage 속성이 true인 경우 에러 페이지로 지정
– exception 기본 객체 : 발생한 예외 객체
 > exception.getMessage() : 예외 메시지
 > exception.printStackTrace() : 예외 추적 메시지 출력
– IE에서 예외가 올바르게 보여지려면 에러 페이지가 출력한 응답 데이터 크기가 513 바이트보다 커야 함

 

예제

<%@ page errorPage="에러가나면이동할페이지"%>를 이용

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

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


	<%
		// 오류발생 구문
	String name = request.getParameter("name").toUpperCase();
	
	%>

</body>
</html>

viewErrorMessage.jsp

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

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

<h1>오류가 발생했습니다. 메인페이지로 이동해주세요</h1>
<h3>
	에러타입 : <%= exception.getClass().getName() %> <br>
	에러메세지 : <%= exception.getMessage() %>
	
</h3>
<a href="../index.jsp"> INDEX로 이동</a>

</body>
</html>

 

응답 상태 코드 별 에러 페이지 작성 및 지정

 

 

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고

ko.wikipedia.org

 

web.xml 파일에서 설정

<error-page>
    <error-code>에러코드</error-code>
    <location>에러페이지의 URI</location>
</error-page>

 

예제

 

 

error404.jsp

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

<h1>요청하신 페이지가 존재하지 않습니다. 404</h1>
<h1>주소를 확인 후 다시 다시 접속해주세요 :)</h1>

</body>
</html>

 

 

error500.jsp

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

<h1>서버에서 데이터를 처리하는 중 오류가 발생했습니다. 500</h1>
<h1>다시 시도해주세요 ㅠㅠ</h1>

</body>
</html>

 

 

에러 500 발생시키기 위한 페이지 > error500.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>

	<%= 10/0 %>
	
</body>
</html>

 

예외 타입 별 에러 페이지 지정

 

web.xml에서 설정

<error-page>
    <exception-type>예외클래스명</exception-type>
    <location>에러페이지의 URI</location>
</error-page>

 

예제

 

errorType.jsp

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

<h1>NullPointerException 발생~!</h1>
<h1>다시 시도해주세요 ㅠㅠ</h1>

</body>
</html>

 

 

에러 페이지의 우선 순위

예제

똑같은 NullPointerException이 발생하는 구문이지만 이동되는 에러페이지가 다르다.

아래 쪽 readParameter에는 <% page errorPage="viewErrorMessage.jsp"%> 구문이 있어서

web.xml에 NullPointerException타입의 에러페이지로 설정된 errorType.jsp가 뜨는 것이 아니라,

viewErrorMessage.jsp가 뜬다.

 

 

 

ㅇㅇ

JSP는 HTTP 프로토콜의 사용하는 웹 환경에서 구동되는 프로그램이다. HTTP는 비연결형으로 사용자가 서버에 특정 페이지를 요청하고 요청결과를 응답받으면 서버와의 연결이 끊기는 형태이다. 예를 들어 게시판에 글을 작성하는 페이지에서 작성한 내용은 다른 jsp에서 처리해야 하고 서버는 방금 글을 작성한 사람이 누구인지 모를 수 있다. 또 다른 예로 쇼핑몰에서 여러 상품 페이지를 이동하면서 장바구니에 물건을 담아 두고 한꺼번에 구매하고자 할 때 접속된 사용자별로 선택된 상품을 처리하는 경우 지금까지 배운 JSP 문법만 가지고는 이를 처리하기 어렵다. JSP 에서  page, request, session, application 내장객체를 통해 서로 다른 페이지에서 처리된 값을 저장하고 공유하기 위한 방법을 제공한다. 이는 컨테이너 기반 프로그램의 특징 중 하나로 실제 프로그램 구현 시 매우 중요한 기법이다.

 

➊ application은 모든 사용자가 공유하는 데이터를 저장할 수 있으며 톰캣이 종료될 때 까지 데이터를 유지할 수 있다(맨 위의 user1, user2 해당).
➋ session의 경우 사용자마다 분리된 저장 영역이 있으며 Page1, Page2, Page3 모두에서 공유되는 정보를 관리할 수 있다. 물론 이 데이터는 각자 공유 영역에서 관리되며 사용자 간에는 공유되지 않는다.
➌ 페이지 흐름이 Page1, Page2, Page3순으로 진행된다고 할 때, 한 페이지에서 다른 페이지로 데이터를 전달하려면 request 내장객체를 이용해야 한다(맨 아래의 user1에 해당한다). page 마다 생성됨.

 

  • request, session, application 은 각각 생성 시점과 소멸시점이 다르며 이를 잘 이해하고 적절한 내장객체를 이용해야 한다.
  • 각각의 내장객체는 모두 getAttribute(), setAttribute() 메서드를 통해 속성을 저장하거나 가져올 수 있다.

 

 

request, session, application을 이용한 속성 관리


- request, session, application은 맵 형태의 속성 관리 기능을 제공 한다.
- 속성을 저장하기 위해서는 setAttribute(String name, Object value) 형태를 취한다.
- 반대로 속성에 저장된 값을 가져오는 getAttribute(String name) 메서드는 name에 해당하는 Object 를 리턴한다.
- 리턴되는 타입이 Object 이므로 속성을 가지고 올 때에는 적절한 형 변환이 필요하다.
- 예를 들어 page1에서 session.setAttribute("name,"홍길동")으로 문자열 객체를 저장한다면.

  page3에서는 session.getAttribute("name")으로 저장된 값을 참조할 수 있다.

 

– PAGE 영역 - 하나의 JSP 페이지를 처리할 때 사용되는 영역 
– REQUEST 영역 - 하나의 HTTP 요청을 처리할 때 사용되는 영역 
– SESSION 영역 - 하나의 웹 브라우저와 관련된 영역 
– APPLICATION 영역 - 하나의 웹 어플리케이션과 관련된 영역

 

 

 

 

application 속성확인 예제

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

<%
   application.setAttribute("name", "김태형");
   application.setAttribute("age", "26");

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

	<h1><a href="applicationAttrView.jsp">application 속성 확인</a></h1>
	
</body>
</html>

applicationAttrView.jsp

 

<%@page import="java.util.Enumeration"%>
<%@ 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>


<%
	Enumeration<String> attrNames = application.getAttributeNames();
	
	while(attrNames.hasMoreElements()){
		
		String attrName = attrNames.nextElement();
		Object value = application.getAttribute(attrName);
		out.println(attrName + " = " + value.toString()+"<br>");
				
	}
	
%>

</body>
</html>

 

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

<%
	request.setAttribute("lang", "ko");
%>

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


	<%-- <jsp:forward page="forward.jsp" /> --%>

	<!-- ko가 나온다  리퀘스트공유 > 포워드 or 인클루드 -->
	<%
		response.sendRedirect("forward.jsp");
	/* null이나온다 */
	%>



</body>
</html>

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

	<h1><%= request.getAttribute("lang") %></h1>

</body>
</html>

forward page와 response의 차이

 

 

 

  • 서블릿으로 변경된 JSP 코드는 모두 _jspService() 메서드에 위치함.
  • 메서드 매개변수인 request, response 를 비롯한 pageContext, session, application, page, config, out 등 메서드 내에서 참조할 수 있는 참조변수들이 내장객체가 됨.

내장객체를 이용한 속성 관리 기법


내장객체가 단순히 특정한 기능을 제공하는 컨테이너 관리 객체라는 점 외에도 한 가지 특징이 있다. 바로 page, request, session, application 내장객체를 이용한 속성 관리 기법이다. 이들 내장객체는 각자 지정된 생명주기가 있으며 setAttribute( ), getAttribute( )라는 메서드를 통해 해당 생명주기 동안 자바 객체를 유지하는 기능을 제공한다.

 

 

 

REQUEST 내장객체

 

  • request는 사용자 요청과 관련된 기능을 제공하는 내장객체로 javax.servlet.http.HttpServletRequest 클래스에 대한 참조변수이다
  • 주로 클라이언트에서 서버로 전달되는 정보를 처리하기 위해 사용한다
  • 대표적으로 HTML 폼을 통해 입력된 값을 JSP에서 가져올 때 사용함

 

예제

 

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


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

	<h1>Request Form</h1>
	<hr>
	
	
	<!-- 중요 -->
	<form action="requestResult.jsp" method="get">
	
	<table>
		<tr>
			<td>이름</td>
			<td><input type="text" name="userName" id="userName"></td>
		</tr>
		<tr>
			<td>직업</td>
			<td>
			<select name="job">
					<option value="프로그래머">프로그래머</option>
					<option value="디자이너">디자이너</option>
					<option value="엔지니어">엔지니어</option>	
			</select>
			</td>
		</tr>
		<tr>
			<td>관심사</td>
			<td>
				<input type="checkbox" name="interest" value="java">JAVA<br>
				<input type="checkbox" name="interest" value="html5">html5<br>
				<input type="checkbox" name="interest" value="css3">css3<br>
				<input type="checkbox" name="interest" value="javascript">javascript<br>
				<input type="checkbox" name="interest" value="jsp">jsp<br>
			
			</td>
		</tr>
		<tr>
			<td></td>
			<td><input type="submit" value="보내기"><input type="reset" value="초기화"></td>
		</tr>
	</table>

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

 

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


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

	<h1>Request Result</h1>
	<hr>

	<table>
		<tr>
			<td>이름</td>
			<td><%=request.getParameter("userName")%></td>
		</tr>
		<tr>
			<td>직업</td>
			<td><%=request.getParameter("job")%></td>
		</tr>
		<tr>
			<td>관심사</td>
			<td>
				<%
					String[] interests = request.getParameterValues("interest");

				for (int i = 0; i < interests.length; i++) {
					out.println(interests[i]+"<br>");
				}
				
				%>

			</td>
	</table>


</body>
</html>

GET 방식

 

RESPONSE 내장객체

 

  • ddresponse는 request와 반대되는 개념으로, 사용자 응답과 관련된 기능을 제공.
  • 사용자 요청(request)을 처리하고 응답을 다른 페이지로 전달하는 등의 기능을 제공한다.
  • javax.servlet.http.HttpServletReponse 객체에 대한 참조변수로, request에 만큼 많이 사용되지는 않으나 setContentType, sendRedirect와 같은 메서드는 잘 알아두어야 한다.

 

 

예제

<%@ 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="resultPage.jsp">
		페이지 이동테스트 
		<select name="select">
			<option value="0">forward</option>
			<option value="1">sendRedirect</option>
		</select>
		<input type="submit">

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

 

resultPage.jsp

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

   <%
      String select = request.getParameter("select");
     int selectNum = Integer.parseInt(select);
     
     if(selectNum>0){
        out.println(selectNum);
        
        // 현재 페이지가 응답으로 처리가 되고, result.jsp 페이지를 다시 요청
        response.sendRedirect("result.jsp");
     } else {
        out.println(selectNum);
        %>
<!--          현재 페이지가 응답으로 처리되는 것이 아니라 result.jsp 페이지의 결과가 응답으로 실행
 -->   
 <jsp:forward page="result.jsp"></jsp:forward>
   <%
     }
     %>

</body>
</html>

 

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>최종 결과 페이지</title>
</head>
<body>

<h1>최종 결과 페이지</h1>

</body>
</html>

 

SESSION 내장객체

 

  • HTTP 프로토콜이 비연결형 프로토콜이기 때문에 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어진다. 따라서 한번 로그인한 사용자가 로그아웃할 때까지 페이지를 이동해도 보관해야 할 정보가 있다면 이에 대한 처리가 매우 곤란해진다.
  • 이러한 HTTP 프로토콜 문제점을 해결하려고 나온 것이 쿠키와 세션이다.
  • session 은 javax.servlet.http.HttpSession 인터페이스의 참조 변수 이다. 
  • session 은 접속하는 사용자 별로 따로 생성되며 일정시간 유지되고 소멸된다.
    이러한 세션의 특징을 이용해 setAttribute() 메서드를 이용해 임의의 값을 저장해 놓고 활용할 수 있음.

- 세션이 주로 사용되는 경우는 다음과 같다. 
➊ 사용자 로그인 후 세션을 설정하고 일정 시간이 지난 경우 다시 사용자 인증을 요구 할 때. 
➋ 쇼핑몰에서 장바구니 기능을 구현할 때. 
➌사용자의 페이지 이동 동선 등 웹 페이지 트래킹 분석 기능 등을 구현할 때.

 

 

예제

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

<%
	session.setAttribute("userName", "김태형");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session control</title>
</head>
<body>

	<h1>세션에 정보를 저장했습니다 :)</h1>
	<h1><a href="sessionView.jsp">세션의 속성 확인</a></h1>

</body>
</html>

sessionView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 속성값 확인</title>
</head>
<body>

	<h1>세션의 속성에 저장된 userName : <%= session.getAttribute("userName")%></h1>
	<h1><a href="../index.jsp">index로 이동</a></h1>
	
</body>
</html>

index.jsp

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

<h1>INDEX :  <%= session.getAttribute("userName")%></h1>


</body>
</html>

 

 

 

그 밖의 내장객체

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17
[JSP] beans 빈즈  (0) 2020.12.17
[JSP] 내장객체와 속성관리 / 생명주기  (0) 2020.12.16
[JSP] 지시어 & 액션 ( include / param / forward )  (0) 2020.12.15
[JSP] JSP / 서블릿 작성  (0) 2020.12.14
[JSP] apache tomcat 톰캣 환경설정  (0) 2020.12.14

지시어

 

 

 

 

기본적인 page 지시어는 자동 생성됨.

 

 

 

 

 

예제

 

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

div.header {
   text-align: center;
}

div.nav {
   text-align: center;
}

div.news, div.shopping {
   width: 45%;
}

div.news {
   float: left;
}

div.shopping {
   float: right;
}

div.footer {
   clear: both;
   text-align: center;
}
</style>
</head>
<body>

   <div class="header">
      <h1>include 지시어 : Header</h1>
      <hr>
   </div>

   <div class="nav">[게임] [쇼핑] [뉴스]</div>

   <div class="contents">
      <div class="news">
         <h3>[최신 뉴스]</h3>
         <hr>
         코로나 바이러스 발생 현황
      </div>

      <div class="shopping">
         <h3>[쇼핑정보] 인기상품</h3>
         <hr>
         좋은 스마트폰
      </div>
   </div>

   <div class="footer">copyright 2020@</div>

</body>
</html>

 

 

지시어를 사용해 위와 같은 페이지 만들기

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Frame Include</title>
<style>
div.header {
	text-align: center;
}

div.nav {
	text-align: center;
}

div.news, div.shopping {
	width: 45%;
}

div.news {
	float: left;
}

div.shopping {
	float: right;
}

div.footer {
	clear: both;
	text-align: center;
}
</style>

</head>
<body>

	<%@ include file="header.jsp"%>
	<%@ include file="nav.jsp"%>

	<div class="contents">
		<%@ include file="news.jsp"%>
		<%@ include file="shopping.jsp"%>

	</div>


  <%@ include file="footer.jsp" %>

</body>
</html>

 

header.jsp / footer.jsp / nav.jsp / new.jsp / shopping.jsp 각각생성

//header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <div class="header">
      <h1>include 지시어 : Header include 처리</h1>
      <hr>
   </div>
   
   
 //footer.jsp
 
   <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<div class="footer">copyright 2020@</div>



//nav.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<div class="nav">[게임] [쇼핑] [뉴스]</div>


//news.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
      <div class="news">
         <h3>[최신 뉴스]</h3>
         <hr>
         코로나 바이러스 발생 현황
      </div>
      
      
// shopping.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
      <div class="shopping">
         <h3>[쇼핑정보] 인기상품</h3>
         <hr>
         좋은 스마트폰
      </div>

 

액션

 

 

인클루드 / include 액션 / param

 

예제1)

 

위의 index.jsp에 footer 부분을 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Frame Include</title>
<style>
div.header {
	text-align: center;
}

div.nav {
	text-align: center;
}

div.news, div.shopping {
	width: 45%;
}

div.news {
	float: left;
}

div.shopping {
	float: right;
}

div.footer {
	clear: both;
	text-align: center;
}
</style>

</head>
<body>

	<%@ include file="header.jsp"%>
	<%@ include file="nav.jsp"%>

	<div class="contents">
		<%@ include file="news.jsp"%>
		<%@ include file="shopping.jsp"%>

	</div>

	<jsp:include page="footer.jsp">
		<jsp:param name="email" value="test@test.net" />
		<jsp:param name="tel" value="000-000-0000" />
	</jsp:include>



</body>
</html>

footer.jsp 부분도 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<div class="footer">copyright 2020@</div>
<div class="footer">email: <%= request.getParameter("email") %> , 
tel: <%= request.getParameter("tel") %></div>

실행 결과

 

포워드 forward 액션

 

예제2)

 

index.html에 forward page를 사용하면

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Frame Include</title>
<style>
div.header {
	text-align: center;
}

div.nav {
	text-align: center;
}

div.news, div.shopping {
	width: 45%;
}

div.news {
	float: left;
}

div.shopping {
	float: right;
}

div.footer {
	clear: both;
	text-align: center;
}
</style>

</head>
<body>

	<%@ include file="header.jsp"%>
	<%@ include file="nav.jsp"%>

	<div class="contents">
		<%@ include file="news.jsp"%>
		<%@ include file="shopping.jsp"%>

	</div>

	<jsp:forward page="footer.jsp">
		<jsp:param name="email" value="test@test.net" />
		<jsp:param name="tel" value="000-000-0000" />
	</jsp:forward>


</body>
</html>

footer 페이지만 보여지게 된다.

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17
[JSP] beans 빈즈  (0) 2020.12.17
[JSP] 내장객체와 속성관리 / 생명주기  (0) 2020.12.16
[JSP] 기본 객체와 영역 / 내장객체 / request / response / .. etc  (0) 2020.12.15
[JSP] JSP / 서블릿 작성  (0) 2020.12.14
[JSP] apache tomcat 톰캣 환경설정  (0) 2020.12.14

 

생성!

 

 

JSP 파일 만들고 작성하기 

 

 

 

 

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

<%
	Date now = new Date();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>now Date</title>
</head>
<body>

<h1>현재시간 : <%= now %></h1>

</body>
</html>

 

 

 

서블릿 작성

 

- 서블릿이란 서블릿 클래스를 상속해서 만들어진 객체이다.
- 웹 컨테이너는 서블릿 클래스를 가지고 서블릿 객체를 만든 다음 그 객체를 초기화해서 웹 서비스를 할 수 있는 상태로 만드는데, 이 작업을 거친 서블릿 객체만 서블릿이라고 할 수 있다.

 

 

package test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class firstweb1
 */
@WebServlet("/now1")
public class firstweb1 extends HttpServlet {

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		System.out.println("GET 방식의 요청");
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// doGet(request, response);
	}

}

 

 


 

 

그냥 일반 클래스 생성 > extends HttpServlet 해주고 

shift  + alt + s 해서 do get 오버라이딩

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
      // 응답 : html 생성해서 반환
      // 응답 관련 객체 : HttpServletResponse response
      
      // 컨텐트 타입과 character set 설정
      response.setContentType("text/html; charset=UTF-8");
      
      // 응답 처리에 사용할 날짜와 시간 데이터
      Date now = new Date();
      
      // HTML의 응답 처리를 위한 스트림 생성
      PrintWriter writer = response.getWriter();
      
      // 응답 데이터를 출력 : html 구조
      writer.println("<html>");
      writer.println("<head><title>now Date</title></head>");
      writer.println("<body>");
      writer.println("<h1>현재시간 : ");
      writer.println(now); // now.toString()
      writer.println("</h1>");
      writer.println("<h1>서블릿에서 생성된 응답코드</h1>");      
      writer.println("</body>");
      writer.println("</html>");
      
      writer.close();
   }
   
}

 

 


 

-서블릿 3.0버전부터는 @WebServlet 이노테이션을 사용하면, 웹 컨테이너가 자동 등록.

  <!-- 
  	서블릿 등록
  	서블릿 이름, 서블릿 클래스의 풀네임  
  -->
  
  <servlet>
  	<servlet-name>nowServlet</servlet-name>
  	<servlet-class>test.HelloServlet</servlet-class>  
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>nowServlet</servlet-name>
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>

 

 

 

 

정리 ) 위에했던 것

 

 

 

 

톰캣 다운받기

 

tomcat.apache.org/download-80.cgi

 

수업에선 이거 받았음 8.5

 

 

– startup.bat – 톰캣을 독립 프로세스로 시작

– shutdown.bat – 실행된 톰캣을 종료시킨다.

– catalina.bat – 톰캣을 시작하거나 종료한다.

 

 

 

이클립스 기본 환경 설정

 

preferences > server > runtime Environments

에서 add 누르고 tomcat 버전에 맞게 눌러준다.

create a new local server 체크해주고 next

 

 

 

이름 해주고 디렉토리는 톰캣이 설치된 곳으로 잡아준다.

(여기는 C드라이브에 바로 압축 풀었음)

 

 

완료후 옆에 이렇게 생기는 것을 볼 수 있다.

 

 

이클립스 기본 주석 설정하기

 

텍스트 인코딩 설정하기

 

1. [General] → [Workspace] → Text file encoding 항목을 Other 로 변경한 뒤 UTF-8로 설정

2. 자바 클래스 인코딩 설정 : [General] → [Content Types] → Java Class File에 

   대한 Default encoding 값을 UTF-8 로 입력 후 <Update> 버튼

3. JSP 파일 인코딩 설정 : [General]→[Content Types] → [Text] → JSP 항목을 UTF-8 로 변경 후 <Update> 버튼

4. CSS / HTML / JSP 코드 인코딩 설정 : [Web] → [HTML Files], [JSP Files] 항목을 ISO 10646/Unicode(UTF-8)로 변경

 

+ Recent posts