Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 추상메서드
- cursor문
- 정수형타입
- 참조형변수
- 한국건설관리시스템
- Java
- exception
- 집합_SET
- 자바
- 제네릭
- 생성자오버로드
- 사용자예외클래스생성
- 환경설정
- 대덕인재개발원
- EnhancedFor
- NestedFor
- 자동차수리시스템
- 어윈 사용법
- 인터페이스
- abstract
- 메소드오버로딩
- 객체 비교
- 컬렉션프레임워크
- oracle
- 다형성
- 예외미루기
- 예외처리
- 컬렉션 타입
- GRANT VIEW
- 오라클
Archives
- Today
- Total
거니의 velog
231004_Servlet 5 본문
[dbinfo.properties]
# 이 줄은 주석 처리 줄 입니다...
# 이 properties 파일을 작성하는 방법은
# 'key값=value값' 과 같은 모양으로 작성합니다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=pc_09
password=java
[DBUtil3.java]
package kr.or.ddit.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
// JDBC드라이버를 로딩하고
// Connection객체를 생성해서 반환하는 메서드로 구성된 class
//(dbinfo.properties 파일의 내용을 이용하여 설정하기)
//==> ResourceBundle 객체 이용하기
public class DBUtil3 {
static ResourceBundle bundle; // ResourceBundle객체 변수 선언
static {
// 객체 생성
bundle = ResourceBundle.getBundle("kr.or.ddit.jdbc.config.dbinfo");
try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName(bundle.getString("driver"));
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String user = "pc_09";
// String password = "java";
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("DB 연결 실패~~~");
e.printStackTrace();
}
return conn;
}
}
[MemberVO.java]
package kr.or.ddit.vo;
public class MemberVO {
private String mem_id;
private String mem_pass;
private String mem_name;
private String mem_tel;
private String mem_addr;
public MemberVO() {}
public MemberVO(String mem_id, String mem_pass, String mem_name, String mem_tel, String mem_addr) {
this.mem_id = mem_id;
this.mem_pass = mem_pass;
this.mem_name = mem_name;
this.mem_tel = mem_tel;
this.mem_addr = mem_addr;
}
public String getMem_id() {
return mem_id;
}
public void setMem_id(String mem_id) {
this.mem_id = mem_id;
}
public String getMem_pass() {
return mem_pass;
}
public void setMem_pass(String mem_pass) {
this.mem_pass = mem_pass;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_tel() {
return mem_tel;
}
public void setMem_tel(String mem_tel) {
this.mem_tel = mem_tel;
}
public String getMem_addr() {
return mem_addr;
}
public void setMem_addr(String mem_addr) {
this.mem_addr = mem_addr;
}
@Override
public String toString() {
return "MemberVO [mem_id=" + mem_id + ", mem_pass=" + mem_pass + ", mem_name=" + mem_name + ", mem_tel="
+ mem_tel + ", mem_addr=" + mem_addr + "]";
}
}
[MemberDao.java]
package kr.or.ddit.member.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import kr.or.ddit.util.DBUtil3;
import kr.or.ddit.vo.MemberVO;
public class MemberDao {
private static MemberDao dao;
private MemberDao() {}
public static MemberDao getinstance() {
if (dao == null) dao = new MemberDao();
return dao;
}
// 세션에 무엇을 저장할지에 따라 메서드가 달라짐
public MemberVO getLoginMember(MemberVO memVo) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
MemberVO memberVo = null; // 로그인한 결과가 저장될 변수
try {
conn = DBUtil3.getConnection();
String sql = "select * from mymember where mem_id = ? and mem_pass = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memVo.getMem_id());
pstmt.setString(2, memVo.getMem_pass());
rs = pstmt.executeQuery();
if (rs.next()) {
memberVo = new MemberVO();
memberVo.setMem_id(rs.getString("mem_id"));
memberVo.setMem_pass(rs.getString("mem_pass"));
memberVo.setMem_name(rs.getString("mem_name"));
memberVo.setMem_tel(rs.getString("mem_tel"));
memberVo.setMem_addr(rs.getString("mem_addr"));
}
} catch (SQLException e) {
memberVo = null;
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
}
if (pstmt != null)
try {
pstmt.close();
} catch (SQLException e) {
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
}
}
return memberVo;
}
}
[SessionLogin.java]
package kr.or.ddit.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.or.ddit.member.dao.MemberDao;
import kr.or.ddit.vo.MemberVO;
@WebServlet("/sessionLogin.do")
public class SessionLogin extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 사용자가 입력한 id와 pass를 파라미터로 받는다.
String userId = request.getParameter("id");
String userPass = request.getParameter("pass");
// 실제 회원인지 아닌지 검사
MemberDao memDao = MemberDao.getinstance();
// 입력받은 데이터를 MemberVO객체에 담는다.
MemberVO memVo = new MemberVO();
// 파라미터로 받은 아이디와 비밀번호 받기
memVo.setMem_id(userId);
memVo.setMem_pass(userPass);
// 세션객체 만들기(서버가 가진 데이터)
HttpSession session = request.getSession();
// if("admin".equals(userId) && "1234".equals(userPass)) {session.setAttribute("loginID", userId);}
// DB에서 id와 pass를 이용하여 해당 회원 정보를 가져온다.
MemberVO returnMemVo = memDao.getLoginMember(memVo);
if(returnMemVo == null) { // 로그인 실패...
response.sendRedirect(request.getContextPath() + "/basic/session/sessionLogin.jsp");
}else { // 로그인 성공
// Session에 로그인 정보 저장
session.setAttribute("loginMember", returnMemVo);
response.sendRedirect(request.getContextPath() + "/basic/session/sessionLogin.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
[SessionLogout.java]
package kr.or.ddit.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionLogout.do")
public class SessionLogout extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Session을 삭제한 후 JSP 페이지 이동
HttpSession session = request.getSession();
session.invalidate(); // 세션 삭제
response.sendRedirect(request.getContextPath() + "/basic/session/sessionLogin.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
[sessionLogin.jsp]
<%@page import="kr.or.ddit.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login 처리</title>
<%
// JSP문서에서 HttpSession객체는 'session'이라는 이름으로 이미 생성되어 있다.
// 세션에 저장된 '로그인 정보' 가져오기.
// String loginId = (String) session.getAttribute("loginID");
MemberVO memVo = (MemberVO) session.getAttribute("loginMember"); // 키값으로 가져옴
%>
</head>
<body>
<%
// if(loginId == null) { // 로그인이 안되었을 떄...
if(memVo == null) { // 세션이 없을 때...(로그인이 안 되었을 때)
%>
<form action="<%= request.getContextPath() %>/sessionLogin.do" method="get">
<table border="1">
<tr>
<td>ID : </td>
<td><input type="text" name="id" placeholder="ID 입력하세요"></td>
</tr>
<tr>
<td>PASS : </td>
<td><input type="password" name="pass" placeholder="PassWord 입력하세요"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="Login"/>
</td>
</tr>
</table>
</form>
<%
}else { // 로그인이 되었을 때...
%>
<%-- <h2><%= loginId %>님 반갑습니다...</h2> --%>
<h2><%= memVo.getMem_id() %>, <%= memVo.getMem_name() %>님 반갑습니다...</h2>
<br />
<br />
<a href="<%= request.getContextPath() %>/sessionLogout.do">로그아웃</a>
<%
}
%>
</body>
</html>
- http://localhost:8090/webTest/basic/session/sessionLogin.jsp
[심화 과정 - MyBatis로 작성]
[mybatis-config.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- DB연결 정보가 저장된 properties파일에 대한 정보를 설정한다. -->
<properties resource="kr/or/ddit/mybatis/config/dbinfo.properties" />
<!-- MyBatis 설정과 관련된 기본 setting 설정 -->
<settings>
<!-- 데이터가 null로 전달되었으면 빈칸으로 인식하지 말고 null로 인식하라 -->
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
<typeAliases>
<typeAlias type="kr.or.ddit.vo.MemberVO" alias="memVo" />
</typeAliases>
<!-- DB연결 설정 -->
<environments default="oracleDev">
<environment id="oracleDev">
<!-- 오라클 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${pass}" />
</dataSource>
</environment>
<!-- <environment id="m1">
MySql
</environment> -->
</environments>
<mappers>
<mapper resource="kr/or/ddit/mybatis/mappers/member-mapper.xml" />
</mappers>
</configuration>
[member-mapper.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="member">
<select id="getLoginMember" parameterType="memVo" resultType="memVo">
select * from mymember where mem_id = #{mem_id} and mem_pass = #{mem_pass}
</select>
</mapper>
[MemberVO.java]
package kr.or.ddit.vo;
public class MemberVO {
private String mem_id;
private String mem_pass;
private String mem_name;
private String mem_tel;
private String mem_addr;
public MemberVO() {}
public MemberVO(String mem_id, String mem_pass, String mem_name, String mem_tel, String mem_addr) {
this.mem_id = mem_id;
this.mem_pass = mem_pass;
this.mem_name = mem_name;
this.mem_tel = mem_tel;
this.mem_addr = mem_addr;
}
public String getMem_id() {
return mem_id;
}
public void setMem_id(String mem_id) {
this.mem_id = mem_id;
}
public String getMem_pass() {
return mem_pass;
}
public void setMem_pass(String mem_pass) {
this.mem_pass = mem_pass;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_tel() {
return mem_tel;
}
public void setMem_tel(String mem_tel) {
this.mem_tel = mem_tel;
}
public String getMem_addr() {
return mem_addr;
}
public void setMem_addr(String mem_addr) {
this.mem_addr = mem_addr;
}
@Override
public String toString() {
return "MemberVO [mem_id=" + mem_id + ", mem_pass=" + mem_pass + ", mem_name=" + mem_name + ", mem_tel="
+ mem_tel + ", mem_addr=" + mem_addr + "]";
}
}
[ILoginMemberDao.java]
package kr.or.ddit.login.dao;
import kr.or.ddit.vo.MemberVO;
public interface ILoginMemberDao {
/**
* 회원 ID와 패스워드가 저장된 MemberVO객체를 인수값으로 받아서
* 해당 회원을 검색하여 반환하는 메서드
*
* @param memVo 검색할 회원ID와 패스워드가 저장된 MemberVO객체
* @return 검색된 회원 정보가 저장된 MemberVO객체(검색된 데이터가 없으면 null 반환)
*/
public MemberVO getLoginMember(MemberVO memVo);
}
[ILoginMemberService.java]
package kr.or.ddit.login.service;
import kr.or.ddit.vo.MemberVO;
public interface ILoginMemberService {
/**
* 회원 ID와 패스워드가 저장된 MemberVO객체를 인수값으로 받아서
* 해당 회원을 검색하여 반환하는 메서드
*
* @param memVo 검색할 회원ID와 패스워드가 저장된 MemberVO객체
* @return 검색된 회원 정보가 저장된 MemberVO객체(검색된 데이터가 없으면 null 반환)
*/
public MemberVO getLoginMember(MemberVO memVo);
}
[LoginMemberDaoImpl.java]
package kr.or.ddit.login.dao;
import org.apache.ibatis.session.SqlSession;
import kr.or.ddit.util.MyBatisUtil;
import kr.or.ddit.vo.MemberVO;
public class LoginMemberDaoImpl implements ILoginMemberDao {
private static LoginMemberDaoImpl dao;
private LoginMemberDaoImpl() {}
public static LoginMemberDaoImpl getInstance() {
if(dao == null) dao = new LoginMemberDaoImpl();
return dao;
}
@Override
public MemberVO getLoginMember(MemberVO memVo) {
SqlSession session = MyBatisUtil.getSqlSession();
MemberVO loginMemberVo = null;
try {
loginMemberVo = session.selectOne("member.getLoginMember", memVo);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(session != null) session.close();
}
return loginMemberVo;
}
}
[LoginMemberServiceImpl.java]
package kr.or.ddit.login.service;
import kr.or.ddit.login.dao.ILoginMemberDao;
import kr.or.ddit.login.dao.LoginMemberDaoImpl;
import kr.or.ddit.vo.MemberVO;
public class LoginMemberServiceImpl implements ILoginMemberService {
private ILoginMemberDao dao;
private static LoginMemberServiceImpl service;
private LoginMemberServiceImpl() {
dao = LoginMemberDaoImpl.getInstance();
}
public static LoginMemberServiceImpl getInstance() {
if(service == null) service = new LoginMemberServiceImpl();
return service;
}
@Override
public MemberVO getLoginMember(MemberVO memVo) {
return dao.getLoginMember(memVo);
}
}
[SessionLoginDB.java]
package kr.or.ddit.login.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.or.ddit.login.service.ILoginMemberService;
import kr.or.ddit.login.service.LoginMemberServiceImpl;
import kr.or.ddit.vo.MemberVO;
@WebServlet("/sessionLoginDB.do")
public class SessionLoginDB extends HttpServlet {
private static final long serialVersionUID = 1L;
private ILoginMemberService service;
public SessionLoginDB() {
service = LoginMemberServiceImpl.getInstance();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 사용자가 입력한 회원 ID와 패스워드를 받는다.
request.setCharacterEncoding("utf-8");
String userId = request.getParameter("id");
String userPass = request.getParameter("pass");
// 입력받은 데이터를 VO에 저장한다.
MemberVO memVo = new MemberVO();
memVo.setMem_id(userId);
memVo.setMem_pass(userPass);
// Service에게 VO데이터를 주고 결과를 받아온다.
MemberVO loginMemberVo = service.getLoginMember(memVo);
// 받은 결과를 이용하여 로그인 여부를 검사한다.
// ==> 받은 결과가 null이 아니면 로그인 성공
HttpSession session = request.getSession();
if(loginMemberVo != null) { // 로그인 성공
session.setAttribute("loginMember", loginMemberVo);
}
// 로그인 페이지로 이동한다.
response.sendRedirect(request.getContextPath() + "/basic/session/dbLogin/sessionLoginDB.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
[SessionLogoutDB.java]
package kr.or.ddit.login.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionLogoutDB.do")
public class SessionLogoutDB extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate(); // 세션 삭제
// 로그인 페이지로 이동한다.
response.sendRedirect(request.getContextPath() + "/basic/session/dbLogin/sessionLoginDB.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
[sessionLoginDB.jsp]
<%@page import="kr.or.ddit.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login 처리</title>
<%
// JSP문서에서 HttpSession객체는 'session'이라는 이름으로 이미 생성되어 있다.
// 세션에 저장된 '로그인 정보' 가져오기.
// String loginId = (String) session.getAttribute("loginID");
MemberVO loginVo = (MemberVO) session.getAttribute("loginMember"); // 키값으로 가져옴
%>
</head>
<body>
<%
// if(loginId == null) { // 로그인이 안되었을 떄...
if(loginVo == null) { // 세션이 없을 때...(로그인이 안 되었을 때)
%>
<form action="<%= request.getContextPath() %>/sessionLoginDB.do" method="post" style="text-align: center;">
<table border="1" style="display: inline-block;">
<tr>
<td>ID : </td>
<td><input type="text" name="id" placeholder="ID 입력하세요"></td>
</tr>
<tr>
<td>PASS : </td>
<td><input type="password" name="pass" placeholder="PassWord 입력하세요"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="Login"/>
</td>
</tr>
</table>
</form>
<%
}else { // 로그인이 되었을 때...
%>
<%-- <h2><%= loginId %>님 반갑습니다...</h2> --%>
<h2><%= loginVo.getMem_id() %>, <%= loginVo.getMem_name() %>님 반갑습니다...</h2>
<br />
<br />
<a href="<%= request.getContextPath() %>/sessionLogoutDB.do">로그아웃</a>
<%
}
%>
</body>
</html>
- http://localhost:8090/webTest/basic/session/dbLogin/sessionLoginDB.jsp
[log4j.properties]
# Root logger option
# 1. 로그 출력 Level은 INFO부터 할것임.
# 2. rootLogger 에 사용할 로깅 Appender로 stdout이라는것과
# logfile이라는 것 두가지를 사용하겠다
#log4j.rootLogger=error, stdout, logfile
log4j.rootLogger=debug, stdout
# Direct log messages to stdout
# ConversionPattern은 로그가 어떠한 형식으로 출력될것인지
# 그 포맷을 정의하는 것.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %F-(%C{2}:%L) - %m%n
# Direct log message to log file
# logfile이라는 appender는 로그를 파일로 출력해주는 놈인데,
# 파일path를 정의 할 수 있다.
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=D:/application.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{2} - %M:%L) - %m%n
log4j.appender.logfile.Append=true
'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
231005_JSON (0) | 2023.10.05 |
---|---|
231004_유스케이스 다이어그램 작성 (0) | 2023.10.04 |
231002_Servlet 4 (0) | 2023.09.27 |
230927_Servlet 3 (2) | 2023.09.27 |
230926_Servlet 2 (0) | 2023.09.26 |