보라코딩

Day63_230328_ JSP (session_로그인_장바구니, JDBC) 본문

코딩/Servlet, JSP, MyBatis

Day63_230328_ JSP (session_로그인_장바구니, JDBC)

new 보라 2023. 3. 28. 18:16

scope에 대해 배웠다.

 

page < request < session < application

 

 

 

 

 


 

 

 

 

01. 세션(Session)에 값 저장하기

형식 session.setAttribute(String name, Object value);

 -. session에 값을 저장하기 위해서는 그 값을 저장하는 대상을 식별하기 위한 키가 있어야 한다.

 -. name이 바로 세션에 저장된 특정 값을 찾아오기 위한 키로 사용된다.

 -. 이 키와 일대일 대응으로 저장하고 싶은 값을 value 위치에 지정한다.

 -. name과 value는 1:1 대응이다.

 -. name은 String 형으로 들어가고 value는 Object형이어야만 한다.

    (즉 int, doublic, char등의 primitive 형은 사용할 수 없다.)

 -. 동일한 이름으로 세션에 저장하게 되면, 항상 덮어씌우게 된다.

 

02. 세션(Session)에 저장된 값 얻어오기

형식 Object getAttribute(String name)

 -. 세션에 저장된 값을 얻어오기 위해 사용되는 getAttribute 메소드를 사용한다.

 -. 세션 객체 안에 지정한 name에 해당되는 속성이 없으면 getAttribute가 null 값을 되돌린다.

 -. 주의할 점은 반환되는 값이 Object형이기 때문에 반드시 적절한 형변환을 해야한다.

 -. 세션에 저장된 값을 String 형태로 얻어오려면 cast 연산자로 형 변환을 해야한다.

     왜냐하면 getAttribute 메소드는 결과값을 Object 형으로 되돌리기 때문이다.

 -. 세션 내부에서는 이를 Object 형으로 관리하고 이를 되돌려질 때에도 Object형으로 되돌린다.

 -. 만일 primitive 형인 int변수에 저장하려면 레퍼 클래스인 Integer 형으로 변환해야 한다.

 

 


 

session 이용한 로그인 화면


login.jsp 에서 아이디, 비밀번호 넣고 로그인 버튼 누른다(submit)

=> loginProc.jsp에서 다시 login.jsp로 재요청한다.

=> login.jsp에서 ok면 로그인 성공 화면을 보여준다.

=> login.jsp에서 fail이면 invalidate() 초기화하고 loginMessage.jsp (로그인실패 화면)로 이동한다.

    => 로그인 실패 alert 후 다시 login.jsp로 이동한다.

=> 로그인 후 로그아웃하면 logout.jsp으로 이동하여  invalidate() 초기화하고 login.jsp로 이동한다.

 

 

 

 

login.jsp

로그인이 되어 있지 않으면 

로그인 화면을 보여준다.

 

로그인 성공시 로그인 화면을 보여주고

실패시 redirect 

 

 

 

 

loginProc.jsp

요청페이지에서 아이디와 비밀번호값을 받아

로그인 성공인지 실패인지

세션에 저장한다.

 

마지막에 페이지전환도

 

 

 

 

 

logout.jsp

세션 초기화하고

로그인화면으로 전환

 

 

 

 

 

loginMessage.jsp

로그인실패 알림 후

로그인화면으로 전환

 

 

 

 


그렇다면 System.out.println()과 out.println()의 차이는 무엇일까?

이클립스로 테스트 해보았다.

1. System.out.println() : 이클립스 콘솔에 출력됨

2. out.println() : 웹 화면에 출력됨

 


 

 

ex03_login.jsp

 

 

 

 

 

ex03_shopping.jsp

요청페이지에서 이름을 받아온다.

select로 선택하게 만들고

form을 submit으로 addList.jsp로 이동한다.

 

 

 

 

ex03_addList.jsp

리스트를 만든다.

다만 세션에 리스트가 없는 경우에만 리스트를 새로 만든다.

그리고 세션에 리스트를 넣어준다. (재사용 할 수 있도록)

 

그리고 장바구니 목록에 담는다. (list에)

 

 

 

 

 

ex03_list_calc.jsp

세션에 넣은 list를 가져와서

장바구니 목록을 보여준다.

 

이때 html을 사용하고 싶을 때 out.print를 사용하는 것이 편하다.

 

 

 

 

 

ex03_logout.jsp

로그아웃 화면에서는 alert창과 함께 초기화해주고

로그인화면으로 돌아간다.

 

 

 

 


JDBC

 

 

새 프로젝트 생성

 

 

 

저번에 썼던 ojdbc8.jar 파일 찾아서

 

 

lib에 복붙

 

 

자바로 jdbc 연결하는 과정을 훨씬 간단하게 할 수 있다.

 

 

 

 

오랜만에 오라클

테이블 생성 후 insert

 

 

 

DB 파일을 sql 폴더 만들어서 txt 파일에 넣어두었다.

 

 

 

 

 

list.jsp 

list.jsp 파일에 작성한다.

 

 

 

 

 

 

 

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%-- JDBC 프로그램으로 DB데이터 가져와서 화면 출력 --%>
<%
// JDBC 프로그램을 위한 변수 선언
final String DRIVER = "oracle.jdbc.OracleDriver";
final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
final String USER = "mystudy";
final String PASSWORD = "mystudypw";

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

// 전체인원 저장
int count = 0;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>전체목록</title>
</head>
<body>
<h1>사원목록[list.jsp]</h1>
<table border>
<thead>
<tr>
<th>사번</th>
<th>성명</th>
<th>날짜</th>
<th>금액</th>
</tr>
</thead>
<tbody>
<%
try {
//1. JDBC 드라이버 로딩
Class.forName(DRIVER);

//2. DB연결 <- Connection 객체 생성 <- DriverManager
conn = DriverManager.getConnection(URL, USER, PASSWORD);

String sql = " SELECT SABUN, NAME, REGDATE, PAY FROM EMPLOYEE ";
//3. Statement 문 실행(SQL 문 실행)
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();

//4. SQL 실행 결과에 대한 처리
//   - SELECT : 조회(검색) 데이터 결과 값에 대한 처리
while (rs.next()){ %>
<tr>
<td><%=rs.getInt("SABUN")%></td>
<td><%=rs.getString("NAME")%></td>
<td><%=rs.getDate("REGDATE")%></td>
<td><%=rs.getInt("PAY")%></td>
</tr>
<%
}
rs.close();

//전체 데이터 건수 확인
rs = pstmt.executeQuery("select count(*) AS CNT from employee");
if(rs.next()){
count = rs.getInt("CNT");
}

//   - INSERT, UPDATE, DELETE : int 값(건수) 처리
} catch (Exception e){
e.printStackTrace();
} finally {
//5. 클로징 처리에 의한 자원 반납
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (Exception e){

}
}
%>

</tbody>
</table>

<p> 전체인원 : <%=count%>명</p>
</body>
</html>

 

 

 

상세보기 만들었다.

 

'코딩 > Servlet, JSP, MyBatis' 카테고리의 다른 글

Day65_230330_ JSP (CRUD_회원정보)  (0) 2023.03.30
Day64_230329_ JSP(JDBC CRUD)  (0) 2023.03.29
Day62_230327_ JSP  (1) 2023.03.27
Day61_230324_ Servlet, JSP  (0) 2023.03.27
Day60_230323_ Servlet  (0) 2023.03.23