[ 웹 어플리케이션의 4가지 영역(Scope) = 내장객체 ]
- 기본 객체의 영역은 객체의 유효기간이라고도 불리며, 객체를 누구와 공유할 것인가를 나타낸다.
- 공유되는 데이터 : 속성(Attribute)
- 속성(Attribute)을 공유할 수 있는 유효 범위 : 영역(Scope)
![](https://blog.kakaocdn.net/dn/VY4I8/btr0uwTbLUc/MUvS5a2C0zOebg6q5eK3l1/img.png)
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>
[ 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>
[ 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>
[쇼핑몰 장바구니 구성?]
마트 들어간 순간 로그인
카트 고유번호 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>
[ 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>
<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>
<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 |