로그인페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="../include/header.jsp"%>
<section>
<div align="center">
<h3>MVC1 로그인연습</h3>
<form action="login_ok.jsp" method="post">
<input type="text" name="id" placeholder="아이디" required><br>
<input type="password" name="pw" placeholder="비밀번호" required><br>
<input type="submit" value="로그인" class="btn btn-default">
<input type="button" value="취소" class="btn btn-danger" onclick="location.href='join.jsp'">
</form>
</div>
</section>
<%@include file="../include/footer.jsp"%>
=============
로그인 처리페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/*
1. 로그인 페이지에서 넘어오는 id, pw를 받습니다.
2. 반환유형UserVO login메서드에 (id, pw)를 매개변수로 넘깁니다.
id, pw기반으로 로그인검증 해서 결과가 있다면, UserVO에 select결과를 저장합니다.
없다면 null을 반환합니다.
3. login_ok에서는 UserVO가 null이 아니면(로그인 성공) UserVO를 세션에 저장후에
mypage.jsp로 리다이렉트
4. null이라면 실패를 의미하므로, script로 "아이디 비밀번호를 확인하세요"를 출력한 후에
다시 로그인 페이지로 이동
*/
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
UsersDAO dao = UsersDAO.getInstance();
UsersVO vo = dao.login(id, pw);
if(vo == null) { //성공
%>
<script>
alert("아이디 비밀번호를 확인하세요");
history.go(-1);//뒤로가기
</script>
<%
}else {
session.setAttribute("userVO", vo); //세선에 저장
response.sendRedirect("mypage.jsp");
}
%>
===============
로그아웃페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션삭제
session.invalidate();
response.sendRedirect(request.getContextPath() + "/index.jsp"); //절대경로
%>
===================
내정보페이지
<%@page import="com.myweb.user.model.UsersVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../include/header.jsp"%>
<%
//세션이 없는경우
if(session.getAttribute("userVO") == null) {
response.sendRedirect("login.jsp");
}
UsersVO vo = (UsersVO)session.getAttribute("userVO");
%>
<section>
<div align="center">
<h3><%=vo.getId() %>(<%=vo.getName() %>)님의 정보관리</h3>
<a href="update.jsp">[정보수정]</a>
<a href="delete.jsp">[회원탈퇴]</a>
</div>
</section>
<%@ include file="../include/footer.jsp"%>
=========================
정보수정페이지
<%@ include file="../include/header.jsp"%>
<%
//회원정보는 세션에 있습니다
//이 페이지에 진입했을때, 비밀번호를 제외한 회원정보를 input태그에 미리 보이도록 처리
UsersVO vo = (UsersVO)session.getAttribute("userVO");
%>
<section>
<div align="center">
<h3>MVC1 정보수정</h3>
<hr>
<form action="update_ok.jsp" method="post">
<table border="1">
<tr>
<td>아이디</td>
<td><input type="text" name="id" value="<%=vo.getId() %>" placeholder="4글자이상" readonly></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pw" placeholder="4글자이상" required pattern="\\w{4, }"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name" value="<%=vo.getName() %>" placeholder="이름은 필수입니다" required></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="email" name="email" value="<%=vo.getEmail() %>"></td>
</tr>
<tr>
<td>주소</td>
<td><input type="text" name="address" value="<%=vo.getAddress() %>"></td>
</tr>
</table>
<input type="submit" value="정보수정" class="btn btn-default">
<input type="button" value="마이페이지" class="btn btn-primary" onclick="location.href='mypage.jsp'">
</div>
</section>
<%@ include file="../include/footer.jsp"%>
===================
정보수정 처리페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String email = request.getParameter("email");
String address = request.getParameter("address");
//2.DAO에 update()메서드를 생성하고, 업데이트 구문을 수행합니다
//성공실패 여부를 1 or 0으로 리턴
//3.수정성공시 script태그 이용해서 "회원정보가 수정되었습니다" 출력후에 마이페이지로 이동
//수정실패시에는 "회원정보 수정에 실패했습니다" 출력후에 마이페이지로 이동
UsersDAO dao = UsersDAO.getInstance();
UsersVO vo = new UsersVO(id, pw, name, email, address, null);
int result = dao.update(vo);
if(result == 1){
session.setAttribute("userVO", vo);//성공시 세션정보수정
%>
<script>
alert("회원정보가 수정되었습니다");
location.href = "mypage.jsp";
</script>
<%
}else{
%>
<script>
alert("회원정보 수정에 실패했습니다");
location.href = "mypage.jsp";
</script>
<%
}
%>
==========================
회원탈퇴 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="../include/header.jsp"%>
<section>
<div align="center">
<h3>기본 비밀번호를 입력하세요</h3>
<form action="delete_ok.jsp" method="post">
<input type="password" name="pw" required><br>
<input type="submit" value="탈퇴하기" >
</form>
</div>
</section>
<%@include file="../include/footer.jsp"%>
==========================
회원탈퇴 처리페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//앞에서 비밀번호를 받았기 때문에, 비밀번호 검증후 삭제를 진행합니다.
/*
1. 사용자가 입력한 pw값과 id를 기반으로 login() 메서드를 실행시켜서
비밀번호가 맞는지 검증합니다.
2. login() 가 null을 반환하면 "현재 비밀번호를 확인하세요" 출력 뒤로가기
login() 가 값을 가진다면 delete()메서드를 호출해서 삭제를 진행하면 됩니다.
3. 삭제 성공시에는 세션을 전부 지우고 index페이지로 리다이렉트
삭제 실패시에는 마이페이지로 리다이렉트
*/
request.setCharacterEncoding("utf-8");
UsersVO vo = (UsersVO)session.getAttribute("userVO");
String id = vo.getId();
String pw = request.getParameter("pw");
//id,pw값 확인
UsersDAO dao = UsersDAO.getInstance();
UsersVO result = dao.login(id, pw); //id,pw가 일치하면
if(result == null){
%>
<script>
alert("현재 비밀번호를 확인하세요");
history.go(-1);
</script>
<%
}else {
//탈퇴
int result2 = dao.delete(id);
if(result2 == 1){ //성공
session.invalidate();
response.sendRedirect( request.getContextPath());
}else {//실패
%>
<script>
alert("탈퇴에 실패했습니다. 관리자에게 문의하세요");
history.go(-1);
</script>
<%
}
}
%>
==============================
UsersDAO(MVC1방식)클래스파일에 입력된 로그인,정보수정,탈퇴
//로그인
public UsersVO login(String id, String pw) {
UsersVO vo = null;
String sql = "select * from users where id = ? and pw = ?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
rs = pstmt.executeQuery();
if(rs.next()) {
String ids = rs.getString("id");
String name = rs.getString("name"); //name컬럼을 꺼낸다
String email = rs.getString("email");
String address = rs.getString("address");
//Timestamp regdate = rs.getTimestamp("regdate");
vo = new UsersVO(ids, null, name, email, address, null);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, pstmt, rs);
}
return vo;
}
//정보수정
public int update(UsersVO vo) {
int result = 0;
String sql = "update users set pw = ?, name = ?, email = ?, address = ? where id = ?";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getPw());
pstmt.setString(2, vo.getName());
pstmt.setString(3, vo.getEmail());
pstmt.setString(4, vo.getAddress());
pstmt.setString(5, vo.getId());
result = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, pstmt, null);
}
return result;
}
//회원탈퇴
public int delete(String id) {
Connection conn = null;
PreparedStatement pstmt = null;
int result = 0;
String sql = "delete from users where id = ?";
try {
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
result = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, pstmt, null);
}
return result;
}
}
=================================
* 연결 풀(Connection Pool)
- 데이터베이스 연결 풀은 데이터에 대한 요청이 발생하면 재사용되는 것으로, 데이터베이스 의 수행 능력을 향상시키기 위해 사용됩니다.
- 연결 풀에서 하나의 연결이 생성되어 풀에 배치되면 새로운 연결이 만들어지지 않도록 재사 용하지만, 만약 모든 연결이 사용 중에 있으면 새로운 연결이 만들어져 풀에 추가됩니다.
- 연결 풀을 통해 사용자는 데이터베이스 연결을 위해 기다리는 시간을 축소시켜줍니다.
- JSP의 연결풀 설정
- 커넥션 풀 설정은 Eclipse-> Servers폴더에 -> context.xml을 수정합니다
커넥션풀
- 커넥션 풀링은 미리 정해진 개수만큼 DB커넥션을 풀에 준비해두고, 어플리케이션이 요청할 때마다 Pool에서 꺼내서 할당하며, 다시 돌려 받아서 Pool에 넣는 기법
DateSource
- DB에 이용되는 URL, id, pw, DriverClass 를 미리 정의해 놓고 사용 하는 객체

* 커넥션 풀 코드 -
<Resource
auth="Container"
driverClassName = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@localhost:1521/XEPDB1"
username = "jsp"
password = "jsp"
name = "jdbc/oracle"
type = "javax.sql.DataSource"
maxActive = "300"
maxWait = "1000"
/>
JSP의 연결풀 설정
- 커넥션 풀 설정은 Eclipse-> Servers폴더에 -> context.xml을 수정합니다.

=================================
* EL(Expression Language)
-EL이란 JSP에서 저장객체를 출력할때 스크립팅을 전혀 쓰지 않을 수 있는 기술입니다.
-EL은 일종의 스크립트 언어로 자료 타입, 수치 연산자, 논리 연산자, 비교 연산자 등을 제공하며 표현식을 대체할 수 있 습니다.


%{sessionScope.userVO.id} 이런식으로 사용
=======
el의 사용예시
<body>
<h3>EL태그는 표현식을 대체합니다</h3>
<%=1 + 2 %><br>
${1 + 2 }<br>
${1 > 2}<br>
${1 == 2}<br>
${1 == 2 ? '같음' : '다름' }<br>
${1 < 2 && 1 > 2 }<br>
${ 1< 2 || 1 > 2 }<br>
${'홍길동' == '홍길동' }<br>
<h3>el태그에서 지원하는 문법</h3>
${1 == 2 or 1 > 2 }<br>
${1 == 2 and 1 > 2 }<br>
${'홍길동' eq '홍길동' }<br> <!--equarls의 줄임표현 -->
${not false }<br>
</body>
</html>
결과값
EL태그는 표현식을 대체합니다
3
3
false
false
다름
false
true
true
el태그에서 지원하는 문법
false
false
true
true
==================================
param객체.
param객체 사용법
입력페이지
<body>
<form action="el_form_ok.jsp" method="post">
이름:<input type="text" name="name"><br>
아이디:<input type="text" name="id"><br>
비밀번호:<input type="password" name="pw"><br>
<input type="submit" value="EL확인"><br>
</form>
</body>
========
출력페이지
<body>
<h3>form으로 넘어오는 값은 param이름으로 받을 수 있습니다</h3>
${param.name }<br>
${param.id }<br>
${param.pw }<br>
</body>
결과값
form으로 넘어오는 값은 param이름으로 받을 수 있습니다
asd
asd
123
'JSP' 카테고리의 다른 글
| jsp day12 (MVC2를 이용한 웹생성(보드구현)) (0) | 2022.01.27 |
|---|---|
| jsp day11 (EL(내장객체태그),JSTL (JSP Standard Tag Library),코어와포맷,MVC2 패턴) (0) | 2022.01.27 |
| jsp day09 (dao를 이용한 서블릿 변경작업,MVC1 전체적인 컴포넌트 설계를 이용한 홈페이지 작업(헤더,푸터 나누기,회원가입,클로즈파일생성) (0) | 2022.01.24 |
| jsp day08 (로그인 페이지 만들기,DAO와VO클래스 (0) | 2022.01.21 |
| jsp day07(영화 페이지 만들기 실습, 예외페이지,액션태그,포워드와리다이렉트의 차이,포워드실습,자바빈,jdbc복습, 로그인페이지만들기db연동) (0) | 2022.01.20 |