고마구의 개발 블로그
240628 10주차 금요일 - JSP 05 본문
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>판매 물품 목록</title>
</head>
<body>
<form action="basket.do" method="get">
삼성 메모리카드 [40000원] 개수 : <input type="number" name="memory" min=0 max=99 value=0><br>
Asus 메인보드 [100000원] 개수 : <input type="number" name="board" min=0 max=99 value=0><br>
마이크론 파워 서플라이 [80000] 개수 : <input type="number" name="power" min=0 max=99 value=0> <br>
라이젠 CPU [150000] 개수 : <input type="number" name="cpu" min=0 max=99 value=0><br>
장바구니 쿠폰 : <input type="checkbox" name="bcoupon" value="0.07">7%<br>
전자제품 쿠폰(중복가능) : <input type="checkbox" name="coupon" value="0.05">5%
<input type="checkbox" name="coupon" value="0.1">10%
<input type="checkbox" name="coupon" value="0.15">15% <br>
<input type="submit" value="장바구니에 담기"><input type="reset"
value="초기화">
</form>
</body>
</html>
- scope - (스코프)
java 변수는 전역 변수와 지역변수로 되어 있는데,
jsp같은 경우 서버 클라이언트와 같은 복잡한 구조여서
jsp에서는 특정 범위에서 데이터를 저장할 수 있는 4개의 객체를 제공한다.
사용자가 사용할 범위에 맞춰서 적절히 사용하면 된다.
- 페이지 스코프 : JSP 페이지 내에서만 유효한 스코프입니다.
- 변수를 선언하면 해당 페이지에서만 사용할 수 있습니다.
- 요청 스코프 : HTTP 요청 단위로 유효한 스코프입니다.
- 클라이언트가 서버에 요청을 보낼 때 생성되고, 응답을 받을 때까지 유지됩니다.
- 세션 스코프 : 웹 애플리케이션 사용자 세션 단위로 유효한 스코프입니다.
- 사용자가 로그인한 후 로그아웃할 때까지 유지됩니다.
- 애플리케이션 스코프 : 웹 애플리케이션 전체에 걸쳐 유효한 스코프입니다.
- 웹 애플리케이션이 시작되고 종료될 때까지 유지됩니다.
- page는 해당 page에서 만 접근 가능 하다.
현재 요청한 page1.jsp에서 사용하는 변수를 현재 요청한 page1.jsp에서만 사용할 수 있다.
- request인 경우 요청이 끝날때 까지 접근 가능하다.
현재 요청한 page1.jsp에서 사용하는 변수를 redirect인 경우 page2.jsp에서 사용할 수 없고,
forward 인경우 page2.jsp에서 사용할수 있다.
- session의 경우 page1.jsp이든 page2.jsp이든 관계 없이 같은 사용자라면 언제나 모든 페이지에서 접근 가능하다.
- application인 경우는 누구나 모든 페이지에서 접근 가능하다.
// scope종류
// 1. page 해당 페이지에서만 접근가능 : pageContext
pageContext.setAttribute("page1", "hello page");
// 2. request 요청이 종료할때 까지 값을 유지 : request
request.setAttribute("request1", "hello request");
// 3. session 같은 사용자일때만 값을 유지 : session
session.setAttribute("session1","hello session");
// 4. application 모든 사용자가 값을 유지 : application
application.setAttribute("application1", "hello application");
// 같은 jsp
<%
out.println((String)pageContext.getAttribute("page1"));
out.println((String)request.getAttribute("request1"));
out.println((String)session.getAttribute("session1"));
out.println((String)application.getAttribute("application1"));
%>
// 결과 : hello page, hello request, hello session, hello application,
// 다른 jsp
<%
out.println((String)pageContext.getAttribute("page1"));
out.println((String)request.getAttribute("request1"));
out.println((String)session.getAttribute("session1"));
out.println((String)application.getAttribute("application1"));
%>
// 결과 : null null hello session, hello application,
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String uri = request.getRequestURI();
String conPath = request.getContextPath();
String command = uri.substring(conPath.length());
String viewPage="";
if(command.equals("/basket.do")) {
int memory=Integer.parseInt(request.getParameter("memory"));
int board=Integer.parseInt(request.getParameter("board"));
int power=Integer.parseInt(request.getParameter("power"));
int cpu=Integer.parseInt(request.getParameter("cpu"));
String bcoupon=request.getParameter("bcoupon");
String[] coupons=request.getParameterValues("coupon");
double csum=0;
HttpSession products=request.getSession();
if(products.getAttribute("")!=null) {
int[] countArr = (int[])products.getAttribute("count");
countArr[0]+=memory;
if(countArr[1]!=board) {countArr[1]+=board;}
if(countArr[2]!=power) {countArr[2]+=power;}
if(countArr[3]!=cpu) {countArr[3]+=cpu;}
products.setAttribute("count",countArr);
}else{
products.setAttribute("count", new int[10]);
int[] countArr = (int[])products.getAttribute("count");
countArr[0]=memory; countArr[1]=board;
countArr[2]=power; countArr[3]=cpu;
products.setAttribute("count",countArr);
}
HttpSession couponrate=request.getSession();
products.setAttribute("rate", new double[10]);
double[] rateArr = (double[])products.getAttribute("rate");
if(coupons!=null) {
for(String coupon:coupons) {
csum+=Double.parseDouble(coupon);
rateArr[0]=csum;
}
}
if(bcoupon!=null) {
double b=Double.parseDouble(bcoupon);
csum+=b;
rateArr[1]=b;
}
rateArr[2]=csum;
products.setAttribute("rate",rateArr);
viewPage="basket2.jsp";
}else if(command.equals("/remove.do")) {
HttpSession couponrate=request.getSession();
couponrate.invalidate();
HttpSession products=request.getSession();
products.invalidate();
viewPage="shopping.jsp?alert=true";
}else if(command.equals("/shopping.do")) {
viewPage="shopping.jsp";
}
response.sendRedirect(viewPage);
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int[] countArr = (int[])session.getAttribute("count");
int totalmemory=(countArr[0]*40000);
if(countArr[0]!=0){
out.println("삼성 메모리카드 [40000원] <br>");
out.println(countArr[0]+"개 = "+totalmemory+"원");
out.println("<hr><br>");
}
%>
<%
int totalboard=(countArr[1]*40000);
if(countArr[1]!=0){
out.println("Asus 메인보드 [100000원]<br>");
out.println(countArr[1]+"개 = "+totalboard+"원");
out.println("<hr><br>");
}
%>
<%
int totalpower=(countArr[2]*40000);
if(countArr[2]!=0){
out.println("마이크론 파워 서플라이 [80000원]<br>");
out.println(countArr[2]+"개 = "+totalpower+"원");
out.println("<hr><br>");
}
%>
<%
int totalcpu=(countArr[3]*40000);
if(countArr[3]!=0){
out.println("라이젠 CPU [150000원] <br>");
out.println(countArr[3]+"개 = "+totalcpu+"원");
out.println("<hr><br>");
}
%>
<%
double total=0+totalmemory+totalboard+totalpower+totalcpu;
if(total==0){
out.println("선택한 상품이 없습니다.");
}else{
out.println("쿠폰 적용전 총 구매 금액 ");
out.println(Math.round(total)+"원 <br>");
out.println("쿠폰 할인율");
double[] rateArr = (double[])session.getAttribute("rate");
double bcoupon=rateArr[1];
double Ecoupon=rateArr[0];
double coupon=rateArr[3];
out.println("<br> 장바구니 쿠폰 "+Math.round(bcoupon*100)+"%");
out.println("<br> 전자제품 쿠폰 총"+Math.round(Ecoupon*100)+"%");
out.println("<br> 총 할인율"+Math.round(coupon*100)+"%<br>");
double ctotal=total*(1+coupon);
out.println("결제 금액은 "+Math.round(ctotal)+"원 입니다");
}
%>
<form action="shopping.do" method="get">
<input type="submit" value="장바구니 수정">
</form>
<form action="remove.do" method="get">
<input type="submit" value="쇼핑목록 삭제">
</form>
</body>
</html>
'KDT풀스택과정 공부' 카테고리의 다른 글
240701 11주차 월요일 - JDBC 01 (0) | 2024.07.01 |
---|---|
240629 10주차 토요일 (0) | 2024.06.29 |
240627 10주차 목요일 - JSP 04 (0) | 2024.06.27 |
240626 10주차 수요일 - JSP 03 (0) | 2024.06.26 |
240625 10주차 화요일 - JSP 02 (0) | 2024.06.25 |