데일리로그C:
article thumbnail

[ 웹 어플리케이션의 4가지 영역(Scope) = 내장객체 ]

- 기본 객체의 영역은 객체의 유효기간이라고도 불리며, 객체를 누구와 공유할 것인가를 나타낸다.

- 공유되는 데이터 : 속성(Attribute)

- 속성(Attribute)을 공유할 수 있는 유효 범위 : 영역(Scope) 

page

- 웹 브라우저(클라이언트)의 요청에 대해 단 하나의 JSP 페이지에서만 호출

- 하나의 페이지 내에서만 공유(다른  jsp로 넘어가면 사라짐)

- 기본객체 : pageContext

 

request

- 웹 브라우저의 한 번의 요청에 단지 한 개의 페이지만 요청(즉 하나의 요청 처리하는데 사용되는 모든  jsp를 포함)

- 때에 따라 같은 request 영역이면 두개의 페이지가 같은 요청을 공유

- 주로 페이지 모듈화에 사용

- 요청 시 ~~~ 응답 시까지 유지됨

- 기본객체 : request 

 

session

- 하나의 웹 브라우저에 1개의 session 객체 생성(브라우저별로 1개씩 = 크롬, 네이버, 등등 )

- 같은 웹 브라우저 내에서는 요청되는 페이지들은 같은 객체 공유

- 세션이 생성되면 하나의 웹 브라우저와 관련된 모든 요청은 하나의  session 영역에 포함됨

- 사용자 상태

- 브라우저 종료시까지 유지됨

- 기본객체 : session

 

application

- 하나의 웹 어플리케이션(웹사이트)에 1개의 application 객체를 생성 

- 서버 시작 ~~~ 서버끝까지 유지됨(서버 종료시켜야만 사라짐)

- 기본객체 :  application

⊙application( )
--> application.setAttribute("변수명","값") :  application 에 값을 저장
--> application.getAttribute("변수명") : setAttribute에 사용했던 변수값으로 application에 저장된 데이터 불러옴
                                                             (즉, 서버에 저장되어있는 사용자 입력값을 불러옴)
--> application.removeAttribute("변수명") : 해당 변수명으로 저장된 application 값 삭제

 

1. a01.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>

<form action="a02.jsp" method="post"> <!-- name, id 라는 변수를 a02로 넘기겠다 -->
<table border="1">
	<tr><td colspan="2">Application 영역에 저장할 내용들</td></tr>
	<tr>
		<td>이름</td>
		<td><input type="text" name="name"></td>
	</tr>
	<tr>
		<td>아이디</td>
		<td><input type="text" name="id"></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="전송"></td>
	</tr>
</table>
</form>

</body>
</html>

2. a02.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>

<h2>영역과 속성 테스트</h2>
<%
request.setCharacterEncoding("UTF-8"); // a01에서 받아오는 것들 중 한글 있을 수 있으므로 

String name=request.getParameter("name"); //param으로 넘어온 값을 변수 name에 넣기
String id=request.getParameter("id"); //param으로 넘어온 값을 변수 id에 넣기

if(name != null && id != null){ // 값이 있다면 (application에 저장)
	application.setAttribute("name",name); //내장객체 application에 name이라는 변수의 값을 추가
	application.setAttribute("id",id); //내장객체 application에 id이라는 변수의 값을 추가
}
%>

<h3><%=name %>님 반갑습니다.<br><%=name %>님의 아이디는 <%=id %>입니다.</h3> <!-- 받아온 값을 보이게 -->

<form action="a03.jsp" method="post"> <!--이메일, 주소, 번호를 a03에게 param으로 보내기 -->
<table border="1">
	<tr><td colspan="2">Session 영역에 저장할 내용들</td></tr>
	<tr>
		<td>e-mail 주소</td>
		<td><input type="text" name="email"></td>
	</tr>
	<tr>
		<td>집 주소</td>
		<td><input type="text" name="address"></td>
	</tr>
	<tr>
		<td>전화번호</td>
		<td><input type="text" name="tel"></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="전송"></td>
	</tr>
</table>
</form>

</body>
</html>

3. a03.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>

<h2>영역과 속성 테스트</h2>

<%
request.setCharacterEncoding("UTF-8");

String email=request.getParameter("email"); // application.set으로 넘어온 값을 get으로 받기
String address=request.getParameter("address");
String tel=request.getParameter("tel");

session.setAttribute("email",email); // session이라는 내장객체에 변수의 값들(사용자 입력값)을 담자
session.setAttribute("address",address);
session.setAttribute("tel",tel);

String name=(String)application.getAttribute("name"); // string으로 변환해서
%>

<h3><%=name %>님의 정보가 모두 저장되었습니다.</h3> //  h3에 보여지게

<a href="a04.jsp">확인하러 가기</a>

</body>
</html>

4.a04.jsp 

* Enumeration e : 객체들을 집합체 형태로 관리해주는 인터페이스

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

<h2>영역과 속성 테스트</h2>

<table border="1">
	<tr><td colspan="2">Application 영역에 저장된 내용들</td></tr>
	<tr>
		<td>이름</td>
		<td><%=application.getAttribute("name") %></td> // a02.jsp에서 application.set한 값 get으로 가져오기
	</tr>
	<tr>
		<td>아이디</td>
		<td><%=application.getAttribute("id") %></td>
	</tr>
</table>
<br>

<table border="1">
	<tr><td colspan="2">Session 영역에 저장된 내용들</td></tr>
<%
Enumeration e=session.getAttributeNames(); // session이 가지고 있는 names에 

while(e.hasMoreElements()){ // 
	String attributeName=(String)e.nextElement();
	String attributeValue=(String)session.getAttribute(attributeName);
%>
	<tr>
		<td><%=attributeName %></td> // 변수명 name을 출력 (ex 이름)
		<td><%=attributeValue %></td> // 값 value 출력 (ex 홍길동)
	</tr>
<%
}
%>
</table>

</body>
</html>

 

 

 

좌 : 브라우저 종료(session은 날라감) // 우 : run 취소(둘다 날라감)

 


 

[ page영역과 request 영역 비교 ]

1. page 영역과 request 영역의 속성 값 모두 현재페이지에서는 출력 잘됨

    BUT page 객체는 다른페이지로 값을 넘길 수 없음

2. forward 기능을 이용해서 페이지를 다른 페이지로 변경후 page 영역을 소멸시키고 request 영역은 유지 되는 것을 확인

    --> forward 액션 태그로 요청을 다른 페이지로 포워딩했을 경우 request 를 공유

 

* session에 정보 담아놓으면 안됨!(계속 정보 남아있기때문에) --> request가 가장 적절

 

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

<% // 내가 지정한 변수와 값을 객체에 담고싶다면 setAttribute 메소드 이용 (!!set!!)
pageContext.setAttribute("pageScope", "pageValue"); //("변수명","값") --> 현재페이지 사용 가능, 다른페이지는 X
request.setAttribute("requestScope", "requestValue"); // ("속성명","값") --> 현재페이지, 다른페이지 둘다 가능
%> 

pageValue = <%=pageContext.getAttribute("pageScope") %><br> <!-- 출력(!!get!!) = pageValue -->
requestValue = <%=request.getAttribute("requestScope") %>  <!-- 출력(!!get!!) = requestValue -->

</body>
</html>

b02.jsp

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

<%
pageContext.setAttribute("pageScope", "pageValue"); // b03.jsp 로 전달 안됨
request.setAttribute("requestScope", "requestValue"); // b03.jsp로 전달 됨
%>

<!-- application, request, session은 b03으로 전달 가능 -->
<jsp:forward page="b03.jsp"></jsp:forward> <!-- 주체는 b02(주소값 가짐), 변수값 두개 줄게 b03 니가 일해  -->

</body>
</html>

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

pageValue = <%=pageContext.getAttribute("pageScope") %><br>

requestValue = <%=request.getAttribute("requestScope") %>

</body>
</html>

우 :  주체는 b02(set으로 값 담고)이지만 내용은 b03(get으로 값 꺼내옴)꺼임

 


[ request 객체 - parameter, attribute 두 속성 차이점 ]

[ parameter ] -->  웹 환경은 HTTP 프로토콜 위에서 동작

⊙ 클라이언트가 서버에 웹페이지를 요청(request)  --> http 요청을 보낼때 parameter 끼워보냄
  ㄴ> 서버가 이 요청(request)에 해당하는 것을 응답(response)해줌

1. form 태그 안에 있는 변수들(input의 name="변수명" )  ==  요청의 parameter 가 되는 것임
2. servlet 에서 String 변수명 = request.getParameter("변수명"); 으로 사용자 입력값 받을 수 있음
3. 사용자 입력값을 다른 곳으로 정보 넘겨줘야함 (request 객체의 attribute 사용)
     ㄴ> servlet 에서 request.setAttribute("변수명","값");  값 넘겨주고
     ㄴ> jsp 에서 <%=변수명%> 형식으로 값  받음

⊙ getParameter() : 사용자 입력값을 가져올때 사용하는 메소드(request 영역의 값을 가져옴)
    ㄴ> String 타입으로 반환
    ㄴ> parameter 는 get 밖에 없음!!

=========> 결론 : 브라우저(사용자)에서 넘어온 값
 
[ Attribute ] 
  --> form이 아닌 다른 곳으로 정보 넘겨주기 위해 request 객체의 속성 attribute 사용함
       즉. 웹 어플리케이션 상에서 정보 공유 위해 속성 사용

⊙ getAttribute (String key) : key에 해당 value 값을 얻어오는 역할
    ㄴ> setAttribute 로 값 받아옴 BUT 값(속성) 없으면 무조건 null 반환
    ㄴ> Object 타입으로 반환(형 변환 필수임!!)

⊙ setAttribute ("key","value") : 해당 key 에 value 값 넣는 역할

=========> 결론 : 개발자가 코딩으로 설정하는 값

결론!!!!!   request객체에   넣을 땐(담고싶을때) set   // 꺼낼 땐 get !!!!!!!!!!!

 

1. f01.jsp  --> forward 된 값들은 request 타이핑 안해도 넘어감(jsp 한정으로! 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>

<h2>포워드 액션 테스트</h2>

<form action="f02.jsp" method="POST"> <!-- 4개 변수(forwardPage,name,age,address) f02에 전달 -->
<input type="hidden" name="forwardPage" value="f03.jsp">
<table>
	<tr>
		<td>이름	</td>
		<td><input type="text" name="name"></td>
	</tr>
	<tr>
		<td>나이	</td>
		<td><input type="text" name="age"></td>
	</tr>
	<tr>
		<td>주소	</td>
		<td><input type="text" name="address"></td>
	</tr>
	<tr>
		<td><input type="submit" value="전송"></td>
	</tr>
</table>
</form>

</body>
</html>

2. f02.jsp

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

<%request.setCharacterEncoding("UTF-8"); %>

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

<!-- <% %> request 살아있음 -->
 
<!-- 값은 f01 input hidden 이 가지고 있음 -->
<jsp:forward page='<%=request.getParameter("forwardPage") %>' >  
	<jsp:param name="tel" value="034-1234-5678"/>
</jsp:forward>

</body>
</html>

3. f03.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>

<h2>포워드 된 페이지(f03.jsp)</h2>

<table>
	<tr>
		<td>이름</td>
		<td><%=request.getParameter("name") %></td>
	</tr>
	<tr>
		<td>나이</td>
		<td><%=request.getParameter("age") %></td>
	</tr>
	<tr>
		<td>주소</td>
		<td><%=request.getParameter("address") %></td>
	</tr>
	<tr>
		<td>전화번호</td>
		<td><%=request.getParameter("tel") %></td>
	</tr>
</table>

</body>
</html>

 

 


 

템플릿(영역들로 구성되어있는 것)  --> 프로젝트1에서 했던 거임

top --> header 영역

bottom --> footer 영역

left --> left 영역

template --> index 영역

 


 

[ 세션 객체 ]

1. s01.jsp

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

<%
	String name ="세션 값 없음."; //전역변수 처리(else)
	String age ="세션 값 없음."; //전역변수 처리(else)
	
	if (session.getAttribute("name")!=null){ // session값이 있다면
		name=(String)session.getAttribute("name"); //지역변수 처리(사용자 입력값 얻어오기)
	}
	if (session.getAttribute("age")!=null){ // session값이 있다면
		age=(String)session.getAttribute("age"); //지역변수 처리(사용자 입력값 얻어오기)
	}
%>

<html>
<head>
<title>Session Test</title>
</head>
<body>

<h2>세션 테스트</h2>

<input type="button" onclick="location.href='s02.jsp'" value="세션 값 저장"> <!--누르면 s02로 -->
<input type="button" onclick="location.href='s03.jsp'" value="세션 값 삭제"> <!--누르면 s03로 -->
<input type="button" onclick="location.href='s04.jsp'" value="세션 초기화"> <!--누르면 s04로 -->

<h3>name : <%=name %></h3>
<h3>age : <%=age %></h3> 

</body>

</html>

2.s02.jsp  --> 세션 값 저장

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

<%session.setAttribute("name","홍길동"); %>

<%session.setAttribute("age","23"); %> 

<script>
location.href="s01.jsp"; // 이름,나이 두개 들고 다시 s01로
</script>

3.s03.jsp  --> 세션 값 삭제(name만)

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

<%session.removeAttribute("name"); %>

<script>
location.href="s01.jsp";
</script>

4.s04.jsp  --> 세션 값 전부다 초기화

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

<!--내가 만든 변수의 값들을 전부다 초기화  -->
<%session.invalidate(); %>

<script>
location.href="s01.jsp";
</script>

좌 : a01 실행 // 우 : 세션값저장 클릭
좌 : 세션 값 삭제 클릭 // 우 : 세션초기화 클릭

 

[쇼핑몰 장바구니 구성?]
마트 들어간 순간 로그인
카트 고유번호  session으로 주기
장바구니 넣었다가 취소하면 장바구니만 지우기
주문하고 나면 카트 주문내역만 지우고(로그인은 두고) 새로운 카트번호 부여

로그아웃하면 session 값 전부 삭제

 


 

[ 쿠키 객체 ]

: 사용자 사이트에 정보 저장(문서로) --> 서버가 아니라 사용자 컴퓨터 본체에 저장

ㄴ> <ex> 로그인 유지 or 아이디 저장 // 24시간동안 안보기

 

t01.jsp

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

<%
	Cookie cookie=new Cookie("name","yejin"); // 규칙임("변수명","값")
	cookie.setMaxAge(600); //초단위(시간이 지나면 쿠키 사용 X)
	response.addCookie(cookie); //생성한 쿠키를 클라이언트로 전송(사용자 컴퓨터에 저장시킴)
%>

<html>
<head>
<title>Cookie Test</title>
</head>
<body>

<h2><%=cookie.getName() %></h2> <!-- 내가 만든 객체 -->
<h2><%=cookie.getValue() %></h2>
<h2><%=cookie.getMaxAge() %></h2>

<a href="t02.jsp">쿠키 값 불러오기</a>

</body>
</html>

t02.jsp

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

<%
	String name="";
	String value="";

	//쿠키가 생성되었는지 확인여부(쿠키 기본 뼈대임)
	String cookie = request.getHeader("Cookie");
	
	if(cookie!=null){ // 쿠키가 있다면
		Cookie cookies[]=request.getCookies();
		
		for(int i=0;i<cookies.length;i++){
			if(cookies[i].getName().equals("name")){
				name=cookies[i].getName();
				value=cookies[i].getValue();
			}
		}
	}
%>

<html>
<head>
<title>Cookie Test</title>
</head>
<body>

<h2>쿠키 이름 = <%=name %></h2>
<h2>쿠키 값 = <%=value %></h2>

</body>
</html>

 

1. cookieExample1.jsp

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

<%
	String language="korea";
	String cookie = request.getHeader("Cookie");
	
	if(cookie!=null){
		Cookie cookies[]=request.getCookies();

		for(int i=0;i<cookies.length;i++){
			if(cookies[i].getName().equals("language")){
				language=cookies[i].getValue();
			}
		}
	}
%>

<html>
<head>
<title>쿠키를 이용한 화면 설정 예제</title>
</head>
<body>

	<%if(language.equals("korea")){%>
		<h3>안녕하세요. 이것은 쿠키 예제입니다.</h3>
	<%}else{ %>
		<h3>Hello. This is Cookie example.</h3>
	<%} %>


	<form action="cookieExample2.jsp" method="post">
		<input type="radio" name="language" value="korea" 
		  <%if(language.equals("korea")){%>checked<%}%>>한국어 페이지 보기
		<input type="radio" name="language" value="english"
		  <%if(language.equals("english")){%>checked<%}%>>영어 페이지 보기
		<input type="submit" value="설정">
	</form>

</body>
</html>

2. cookieExample2.jsp

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

<%
	Cookie cookie=new Cookie("language",request.getParameter("language")); 
	cookie.setMaxAge(60*60*24); //24시간
	response.addCookie(cookie); //생성한 쿠키를 클라이언트로 전송
%>

<script>
	location.href="cookieExample1.jsp"
</script>

쿠키는 부모, 자식이 있음

팝업창이 자식 (24시간 안보기 체크하고 닫기) 

ㄴ> 부모창에서 refresh하면  1) 쿠키값있으면(체크 했으면) 팝업창 안뜨고 2) 없으면 팝업창 다시 뜨게

 


[ 첨부파일, 썸네일

 

첨부파일 -->  lib 폴더에 cos.jar 복붙

썸네일 --> lib 폴더에  jai-core , jai-codec , JimiProClasses 복붙

 

1. fileUploadForm.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>

<section id = "uploadFormArea">

<form action="fileUpload.jsp" method="post" enctype="multipart/form-data">
<table>
	<tr>
		<td colspan="2" class = "td_title" >파일 업로드 폼</td>
	<tr>
		<td>올린 사람 : </td>
		<td><input type="text" name="name" id="name"></td>
	</tr>
	<tr>
		<td>제목 : </td>
		<td><input type="text" name="subject" id="subject"></td>
	</tr>
	<tr>
		<td>파일명1 : </td>
		<td><input type="file" name="fileName1" id="fileName1"></td>
	</tr>
	<tr>
		<td>파일명2 : 
		</td><td><input type="file" name="fileName2" id="fileName2"></td>
	</tr>
	<tr>
		<td colspan=2 align=center><input type="submit" value="전송"></td>
	</tr>
</table>
</form>

</section>

</body>
</html>

2. fileUpload.jsp  --> 404오류 발생 (다음에 다시!!!)

<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.*" %> 

<!-- 썸네일에 필요한 import 부분 -->
<%@page import="com.sun.jimi.core.Jimi"%>
<%@page import="com.sun.jimi.core.JimiUtils"%>
<%@page import="java.awt.Image"%>
<%@page import="java.io.IOException"%>

<%
	//String uploadPath=request.getRealPath("/upload"); 첨부파일에 필요한 jar 파일 : core
	String uploadPath="C:\\upload"; 

	int size = 10*1024*1024;
	String name="";
	String subject="";
	String filename1="";
	String filename2="";
	String origfilename1="";
	String origfilename2="";

	try{
		MultipartRequest multi=new MultipartRequest(request,uploadPath,size,"UTF-8",new DefaultFileRenamePolicy());

		name=multi.getParameter("name");
		subject=multi.getParameter("subject");
	
		Enumeration files=multi.getFileNames();

		String file1 =(String)files.nextElement(); // 첫번째 파일명

		filename1=multi.getFilesystemName(file1); // 실질적으로 올라간 rename

		origfilename1= multi.getOriginalFileName(file1);

		String file2 =(String)files.nextElement(); // 두번째 파일명

		filename2=multi.getFilesystemName(file2); // 실질적으로 올라간 rename

		origfilename2=multi.getOriginalFileName(file2);
		// 첨부파일 처리 끝
		
		
		//썸네일(jar파일 필요 ) -- 예외처리(try, catch 이용)
		String thum_file1 = "";

		if(filename1 != "") { //첨부가 있다면
	        String filePath ="C:\\upload\\"; // 첨부된 파일 다시 가져옴
	        //out.print(filePath);	 
	        String orgImg = filePath+filename1;//원본파일
	      	//out.print(orgImg);
	        thum_file1 = "thum_"+filename1;//썸네일파일
	     	//out.print(thum_file1);
	        String thumbImg = filePath+"thum_"+filename1;
	      	//out.print(thumbImg);
	        int thumbWidth = 60 ;//썸네일 가로
	        int thumbHeight = 60 ;//썸네일 세로

	        
	        try {
	        	Image thumbnail = JimiUtils.getThumbnail(orgImg, thumbWidth, thumbHeight, Jimi.IN_MEMORY);// 썸네일 설정
	        	//Jimi.putImage(thumbnail, thumbImg);// 썸네일 생성
	        }catch(Exception e) {
	        	e.printStackTrace();
	        }
		}

	}catch(Exception e){
		e.printStackTrace();
	}
%>

<html>
<body>

<form name="filecheck" action="fileCheck.jsp" method="post">
	<input type="hidden" name="name" value="<%=name%>">
	<input type="hidden" name="subject" value="<%=subject%>">
	<input type="hidden" name="filename1" value="<%=filename1%>">
	<input type="hidden" name="filename2" value="<%=filename2%>">
	<input type="hidden" name="origfilename1" value="<%=origfilename1%>">
	<input type="hidden" name="origfilename2" value="<%=origfilename2%>">
</form>

<a href="#" onclick="javascript:filecheck.submit()">업로드 확인 및 다운로드 페이지 이동</a>

</body>
</html>

 

 

1. write.jsp  --> c드라이브에 upload 폴더 만든 후 !

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

<html>
<head>
<title>썸네일 이미지 폼</title>
</head>
<body>

<h3>썸네일 이미지 폼 예제</h3>

<form action="insert.jsp" method="post" enctype="multipart/form-data"> 
	이미지 파일 : <input type="file" name="filename"><p>
	<input type="submit" value="전송">
</form>

</body>
</html>

 

2.insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.awt.Graphics2D" %>
<%@ page import="java.awt.image.renderable.ParameterBlock" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.media.jai.JAI" %>
<%@ page import="javax.media.jai.RenderedOp" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<%
    ServletContext context = request.getServletContext();

	//String imagePath=context.getRealPath("image");
	String imagePath = "C:\\upload";

	int size = 1*1024*1024 ;
	String filename="";
	String filename2="";

	try{
		MultipartRequest multi = new MultipartRequest(request,
		  					  imagePath,
							  size,
							  "utf-8",
							new DefaultFileRenamePolicy());

		Enumeration files=multi.getFileNames();

		String file = (String)files.nextElement();

		filename = multi.getFilesystemName(file); //rename 부여

	}catch(Exception e){
		e.printStackTrace();
	}

	ParameterBlock pb=new ParameterBlock();
	pb.add(imagePath+"/"+filename);
	RenderedOp rOp=JAI.create("fileload",pb);

	BufferedImage bi= rOp.getAsBufferedImage();
	BufferedImage thumb=new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

	Graphics2D g=thumb.createGraphics();
	g.drawImage(bi,0,0,100,100,null);

	filename2 = "sm_"+filename;
	File file=new File(imagePath+"/"+filename2);
	ImageIO.write(thumb,"jpg",file);
%>

<html>
<head>
<title>이미지 썸네일 예제</title>
</head>
<body>

-원본 이미지-<br>
<img src="upload/<%=filename %>"><p>

-썸네일 이미지-<br>
<img src="upload/<%=filename2 %>">

</body>
</html>

전송하면 upload 폴더에 저장됨

 


 

[ preparedStatement ]

[Statement]  --> jsp1  에서 많이 사용했음
-  sql 구문 실행하는 역할(오직 전달하는 역할)

<ex>
String sql = "select * from student";     / /  select 구문 rs, Query 로!

Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {
%>
        num : <%=rs.getInt("num") %> |
        name : <%=rs.getString("name") %> ||
<%
}
out.print("<hr>");

rs.close();
stmt.close();
con.close();
%>

[PreparedStatement]
- 매개변수 사용

<ex>
Connection con_p = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = con_p.prepareStatement(sql_p);
ResultSet rs_p = pstmt.executeQuery();

while(rs_p.next()) {
%>
       num : <%=rs_p.getInt("num") %> |
       name : <%=rs_p.getString("name") %> ||
<%
}
rs_p.close();
pstmt.close();
con_p.close();
%>

<ex>
String id = request.getParameter("id");
String pass =request.getParameter("pass");

String sql = "select * from member3 where id=? and password=?"; // db 칼럼명 = ?

Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, id);
pstmt.setString(2, pass);

ResultSet rs = pstmt.executeQuery();

 

 

1. DB에 student 추가

 

2. statementTest.jsp --> 수정전

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC";	
String user="root";
String password="1111";

Connection conn = null; 
Statement stmt = null;

//예외처리 꼭 해야함(java에선!) --> try, catch, finally(catch없다면, 생략 가능) 이용
String sql="INSERT INTO student (num,name) VALUES (7,'홍길동')"; // 변수가 넘어온다면 변수처리해야함
 	
	try {		
		conn=DriverManager.getConnection(url, user, password);
		stmt=conn.createStatement();
  		
  		int result=stmt.executeUpdate(sql); //실행구간(없으면 0건, 1건이면 1건)

  		if(result!=0){
  			out.println("<h3>레코드가 등록되었습니다.</h3>");
		}
  		
  		

	}catch(Exception e){
		out.println("<h3>레코드 등록에 실패하였습니다.</h3>");
		e.printStackTrace();
 	}

	finally{
		try{
			stmt.close();
			conn.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
%>

수정후

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web?serverTimezone=UTC";	
String user="root";
String password="1111";

Connection conn = null; 
Statement stmt = null;

int num =123; //변수처리
String name = "홍길동"; //변수처리

//예외처리 꼭 해야함(java에선!) --> try, catch, finally(catch없다면, 생략 가능) 이용
String sql="INSERT INTO student VALUES ("+num+",'"+name+"')"; // 변수가 넘어온다면 변수처리해야함
 	
conn=DriverManager.getConnection(url, user, password);
stmt=conn.createStatement();
stmt.executeUpdate(sql); //sql 여기에 들어감
	
stmt.close();
conn.close();
		
%>

 

3. preparedStatement.jsp --> 수정전

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC";	
String user="root";
String password="1111";

Connection conn = null; 
PreparedStatement pstmt = null;

// int num =123; 변수처리
// String name = "홍길동" 변수처리
String sql="INSERT INTO student (num,name) VALUES (?,?)";

	try {
		conn=DriverManager.getConnection(url, user, password);
  		pstmt=conn.prepareStatement(sql);
		
  		pstmt.setInt(1,123); //매칭처리 (1, num)
  		pstmt.setString(2, "홍길동"); //매칭처리  (2, name)
  		
  		pstmt.executeUpdate(); //매칭처리 끝났다면 실행하시오
  		
	}catch(Exception e){
		out.println("<h3>레코드 등록에 실패하였습니다.</h3>");
		e.printStackTrace();
 	}

	finally{
		try{
			pstmt.close();
			conn.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

%>

수정후  --> preparedStatement 는 ? 사용, " " 사용안함, 매칭처리 해야함

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web?serverTimezone=UTC";	
String user="root";
String password="1111";

Connection conn = null; 
PreparedStatement pstmt = null;

// "+변수+" 쓰기싫으면 이거 쓰면 됨!
int num =1234; //변수처리
String name = "홍길동"; //변수처리
//String code = "notice";

String sql="INSERT INTO student (num,name) VALUES (?,?)";
//String sql="INSERT INTO "+code+" (num,name) VALUES (?,?)"; statement 와 preparedstatement 혼합

	
conn=DriverManager.getConnection(url, user, password);
pstmt=conn.prepareStatement(sql); //sql 여기에 들어감

pstmt.setInt(1,num); //매칭처리 (1, num)
pstmt.setString(2, name); //매칭처리  (2, name)
		
pstmt.executeUpdate(); //매칭처리 끝났다면 실행하시오
  		
	
pstmt.close();
conn.close();
	

%>

4. resultSetTest.jsp

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web";	
String user="root";
String password="1111";

// statement (sql은 rs에 들어감)
String sql = "select * from student";

Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {
%>
	num : <%=rs.getInt("num") %> |
	name : <%=rs.getString("name") %> ||
<%
}
out.print("<hr>");

rs.close();
stmt.close();
con.close();

// preparedstatement  (sql은 pstmt에 들어감)
Connection con_p = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = con_p.prepareStatement(sql);
ResultSet rs_p = pstmt.executeQuery();

while(rs_p.next()) {
%>
	num : <%=rs_p.getInt("num") %> |
	name : <%=rs_p.getString("name") %> ||
<%
}
rs_p.close();
pstmt.close();
con_p.close();
%>

 


[회원관리시스템 구현]

1. 회원가입

1) joinForm.jsp

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

<html>
<head>
<title>회원관리 시스템 회원가입 페이지</title>
<style>
	table{
		margin : auto;
		width : 400px;
		border : 1px solid gray;
		text-align: center;
	}
	.td_title{
		font-weight: bold;
		font-size: x-large;
	}
</style>
</head>
<body>

<form name="joinform" action="joinProcess.jsp" method="post">  <!--7개 변수 넘김  -->

<table border=1>
	<tr>
		<td colspan="2" class = "td_title">
			회원가입 페이지
		</td>
	</tr>
	<tr>
		<td><label for = "id">아이디 : </label></td>
		<td><input type="text" name="id" id="id"/></td>
	</tr>
	<tr>
		<td><label for = "pass">비밀번호 : </label></td>
		<td><input type="password" name="pass" id="pass"/></td>
	</tr>
	<tr>
		<td><label for = "name">이름 : </label></td>
		<td><input type="text" name="name" id="name"/></td>
	</tr>
	<tr>
		<td><label for = "age">나이 : </label></td>
		<td><input type="text" name="age" id="age"/></td>
	</tr>
	<tr>
		<td><label for = "gender1"></label>성별 : </td>
		<td>
			<input type="radio" name="gender" value="남" checked id="gender1"/>남자
			<input type="radio" name="gender" value="여" id="gender2"/>여자
		</td>
	</tr>
	<tr>
		<td><label for = "email">이메일 주소 : </label></td>
		<td><input type="text" name="email" id="email"/></td>
	</tr>
	<tr>
		<td colspan="2">
			<a href="javascript:joinform.submit()">회원가입</a>&nbsp;&nbsp;
			<a href="javascript:joinform.reset()">다시작성</a>
		</td>
	</tr>
</table>
</form>

</body>
</html>

2) joinProcess.jsp

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web?serverTimezone=UTC"; /* DB명 수정할 것 */
String user="root";
String password="1111";

request.setCharacterEncoding("utf-8");

String id = request.getParameter("id");
String pass = request.getParameter("pass");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String gender = request.getParameter("gender");
String email = request.getParameter("email");

// 존재하는 아이디일 경우
String sql_count = "select count(*) from member3 where id=?";

Connection con_count = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt_count = con_count.prepareStatement(sql_count);

pstmt_count.setString(1, id);

ResultSet rs_count = pstmt_count.executeQuery();

// total이 0이면 미존재, 1이면 존재
int total=0;
if(rs_count.next()) {
	total = rs_count.getInt(1);
}
rs_count.close();
pstmt_count.close();
con_count.close();


if(total == 0){ // 회원가입가능
	String sql = "insert into member3 values(?,?,?,?,?,?)";
	
	Connection con = DriverManager.getConnection(url, user, password);
	PreparedStatement pstmt = con.prepareStatement(sql);
	
	pstmt.setString(1, id);
	pstmt.setString(2, pass);
	pstmt.setString(3, name);
	pstmt.setInt(4, age);
	pstmt.setString(5, gender);
	pstmt.setString(6, email);
	
	pstmt.executeUpdate();
	
	pstmt.close();
	con.close();
	
	response.sendRedirect("main.jsp");
	
}else { // 회원가입 불가능
	out.print("<script>alert('중복된 아이디가 있습니다.');history.back();</script>");
}
%>

 

 

 

 

2. 로그인

1) loginForm.jsp

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

<html>
<head>
<title>회원관리 시스템 로그인 페이지</title>
<style>
	table{
		margin : auto;
		width : 400px;
		border : 1px solid gray;
		text-align: center;
	}
	.td_title{
		font-weight: bold;
		font-size: x-large;
	}
</style>
</head>
<body>

<form name="loginform" action="loginProcess.jsp" method="post"> <!-- 변수 두개 넘김 -->

<table>
	<tr>
		<td colspan="2" class = "td_title">
			로그인 페이지
		</td>
	</tr>
	<tr>
		<td><label for = "id">아이디 : </label></td>
		<td><input type="text" name="id" id="id"/></td>
	</tr>
	<tr>
		<td><label for = "pass">비밀번호 : </label></td>
		<td><input type="password" name="pass" id="pass"/></td>
	</tr>
	<tr>
		<td colspan="2">
			<a href="javascript:loginform.submit()">로그인</a>&nbsp;&nbsp;
			<a href="joinForm.jsp">회원가입</a>
		</td>
	</tr>
</table>
</form>

</body>
</html>

2) loginProcess.jsp

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

<%
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/web";	
String user="root";
String password="1111";

request.setCharacterEncoding("utf-8");

String id = request.getParameter("id");
String pass =request.getParameter("pass");

String sql = "select * from member3 where id=? and password=?";  // db 칼럼명 = ?

Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, id);
pstmt.setString(2, pass);

ResultSet rs = pstmt.executeQuery();

// 전역변수 선언
String m_id ="";

if(rs.next()) {
	m_id = rs.getString("id");
}

if(m_id.equals("")){ // 매칭된 회원이 없다면
	out.print("<script>alert('존재하지 않는 아이디이거나 비밀번호가 올바르지 않습니다.');</script>");
} else {
	session.setAttribute("id", m_id);
	response.sendRedirect("main.jsp");
}

%>

3) main.jsp

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

<%
	String session_id=null;

	if (session.getAttribute("id")!=null){
		session_id=(String)session.getAttribute("id");
	}else{
		out.println("<script>");
		out.println("location.href='loginForm.jsp'");
		out.println("</script>");
	}
%>
<html>
<head>
<title>회원관리 시스템 메인 페이지</title>
</head>
<body>

<h3><%=session_id %> 로 로그인하셨습니다.</h3>

<a href="loginForm.jsp">로그인</a>
<a href="joinForm.jsp">회원가입</a>
<a href="member_list.jsp">회원목록</a>


</body>
</html>

'JAVA > model2' 카테고리의 다른 글

230228_web2(4)-회원목록  (0) 2023.02.28
230227_web2(3) admin  (0) 2023.02.27
230224 _ EL -- 연산, 피라미드  (1) 2023.02.24
23.02.22_EL,JSTL,servlet 등  (0) 2023.02.22
bb6  (0) 2023.01.30
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...