*JAVA/JSP 35번 글의 시점부터는 노트북이 고장나는 바람에.. 다른 분의 글과 이전에 올렸던 글들을 참고하여, 다른 데스크탑의 윈도우 환경에 환경설정을 다시 진행한 후 작성하였습니다. 환경설정 관련 글들은 아래를 참고해 주세요.
- JDK11 설치 및 환경 변수(JAVA_HOME) 설정 - CLASSPATH는 추가하지 않음
자바(JAVA) 11 설치 및 환경설정 | 자바 11 환경 변수
자바로 코딩 공부를 하려면 개발 할 수 있는 환경을 만들어 주어야 한다. 그 순서를 먼저 작성하자면JAVA SE JDK 설치 -> JAVA 환경 변수 설정 -> IDE 설치 이렇게 볼 수 있겠다. 이 포스팅은 자바로 개
velog.io
- 톰캣 설치, 이클립스 설치 - 이 글을 쓰는 시점에서는 Tomcat 8버전이 없어, Tomcat 9버전 설치
JSP) JDK, 이클립스(eclipse), 톰캣 설치 및 환경 설정
1. JDK 설치 → Path 설정 2.eclipse JAVA EE버전 다운로드 3.웹컨테이너 톰캣 설치 →톰캣 환경설정 1. JDK 설치 - JAVA) 1. JDK 참고하여 설치하고 설정한다. -https://storyblogger.tistory.com/15?category=984696 2. 구글에
storyblogger.tistory.com
- 이클립스 JDK 버전 설정 - JDK11로 설정
[이클립스] JDK 버전 바꾸는 법
스프링을 사용하는 에러가 난다? 그러면 JRE 버전을 확인해보자! 프로젝트의 JRE System Library의 오른쪽을 살펴보면 [JavaSE-17]이라고 되어있다. 스프링이나 하이버네이트를 사용할 때, 자바 8이나 자
myvelop.tistory.com
- JDK 설치 및 환경 변수(JAVA_HOME) 설정, 톰캣 설치, 이클립스 설치 및 JDK 버전 설정 이후~ ⇒ 톰캣 버전과 jsp 파일 경로는 글 내용과 다르게 아래 이미지와 같음
JAVA/JSP 1. 개발 환경 구축 - 이클립스 기본 설정
*JDK 설치 및 환경 변수(JAVA_HOME) 설정, 톰캣 설치, 이클립스 설치를 완료한 상태OpenJDK 11: 자바 프로그램을 컴파일하고 실행해주는 기본 도구*이클립스 JDK-17이 설치되어있어서, https://coding-house.tisto
keep-programming-study.tistory.com
JAVA/JSP 1. 개발 환경 구축 - JSP 예제 테스트
1. 프로젝트 생성1) [File] → [New] → [Dynamic Web Project] 선택 2) 프로젝트 설정 화면 → Project name: HelloJSP, Target runtime: Apache Tomcat v9.0, Dynamic web module version: 4.0으로 설정 후 Next 클릭 3) 자바 소스 파일
keep-programming-study.tistory.com
JAVA/JSP 1. 개발 환경 구축 - 마지막 추가 설정
1. 외부 웹 브라우저로 실행하기-크롬이클립스는 웹 애플리케이션 실행 시, 자체 브라우저를 통해 실행 결과 출력웹 애플리케이션 배포 시 사용자는 크롬/파이어폭스 같은 전용 웹 브라우저로
keep-programming-study.tistory.com
- 오라클(Oracle Database 11gR2 Express Edition) 설치 및 설정
JAVA/JSP 14. 데이터베이스 - 특징, 오라클 설치(Oracle Database 11gR2 Express Edition), 사용자 계정 생성 및
1. 데이터베이스의 특징우리가 매일 PC나 스마트폰을 통해 접하는 거의 모든 웹 애플리케이션에서 사용함매일 업데이트되는 뉴스나 날씨 등의 정보는 데이터베이스가 없다면 클라이언트에 전달
keep-programming-study.tistory.com
JAVA/JSP 15. 데이터베이스 - 테이블 및 시퀀스 생성, JDBC 설정 및 데이터베이스 연결
*회원제 게시판 만들기-회원 인증 필요4. 테이블 및 시퀀스 생성1) 테이블 생성(1) member 테이블 - 아이디, 패스워드, 이름, 가입 날짜테이블 정의컬럼명데이터 타입 null 허용 키 기본값 설명idvarchar2
keep-programming-study.tistory.com
JAVA/JSP 16. 데이터베이스 - 커넥션 풀로 성능 개선, 간단한 쿼리 작성 및 실행
6. 커넥션 풀로 성능 개선웹은 클라이언트의 요청에 서버가 응답하는 구조→ Connection 객체 생성 때마다 네트워크 통신이 이뤄지며, 시간이 걸리는 작업들이 수반됨 == 시스템 성능에 큰 영향을
keep-programming-study.tistory.com
- 시퀀스 설정
JAVA/JSP 15. 데이터베이스 - 테이블 및 시퀀스 생성, JDBC 설정 및 데이터베이스 연결
*회원제 게시판 만들기-회원 인증 필요4. 테이블 및 시퀀스 생성1) 테이블 생성(1) member 테이블 - 아이디, 패스워드, 이름, 가입 날짜테이블 정의컬럼명데이터 타입 null 허용 키 기본값 설명idvarchar2
keep-programming-study.tistory.com
1. MVC 패턴 회원인증 구성도
2. 구현
1) 뷰(JSP 파일)
// src/main/webapp/member/MemberAuth.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberAuth.jsp</title>
</head>
<body>
<h2>MVC 패턴으로 회원인증하기</h2>
<p>
<!-- 1. 서블릿에서 회원인증 처리 후 결과 메시지 출력 -->
<strong>${ authMessage }</strong>
<br />
<!-- 2. 관리자 ID로 인증 요청 -->
<a href="./MemberAuth.mvc?id=admin1&pass=1234">회원인증(관리자)</a>
<!-- 3. 회원 ID로 인증 요청 -->
<a href="./MemberAuth.mvc?id=hello&pass=1234">회원인증(회원)</a>
<!-- 4. 비회원 ID로 인증 요청 -->
<a href="./MemberAuth.mvc?id=stranger&pass=1234">회원인증(비회원)</a>
</p>
</body>
</html>
2) MemberDAO.java
// Java Resources/src/member/MemberDAO.java
package member;
import common.JDBConnect;
public class MemberDAO extends JDBConnect {
// 명시한 데이터베이스로의 연결이 완료된 MemberDAO 객체를 생성합니다.
public MemberDAO(String drv, String url, String id, String pw) {
super(drv, url, id, pw);
}
// 명시한 아이디/패스워드와 일치하는 회원 정보를 반환합니다.
public MemberDTO getMemberDTO(String uid, String upass) {
MemberDTO dto = new MemberDTO(); // 회원 정보 DTO 객체 생성
String query = "SELECT * FROM member WHERE id=? AND pass=?"; // 쿼리문 템플릿
try { //5.
// 쿼리 실행
psmt = con.prepareStatement(query); // 동적 쿼리문 준비
psmt.setString(1, uid); // 쿼리문의 첫 번째 인파라미터에 값 설정
psmt.setString(2, upass); // 쿼리문의 두 번째 인파라미터에 값 설정
rs = psmt.executeQuery(); // 쿼리문 실행
// 결과 처리
if (rs.next()) {
// 쿼리 결과로 얻은 회원 정보를 DTO 객체에 저장
dto.setId(rs.getString("id"));
dto.setPass(rs.getString("pass"));
dto.setName(rs.getString(3));
dto.setRegidate(rs.getString(4));
}
}
catch (Exception e) {
e.printStackTrace();
}
return dto; // DTO 객체 반환
}
}
3) MemberDTO.java
// Java Resources/src/member/MemberDTO.java
package member;
public class MemberDTO {
// 멤버 변수 선언
private String id;
private String pass;
private String name;
private String regidate;
// 멤버 변수별 게터와 세터
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRegidate() {
return regidate;
}
public void setRegidate(String regidate) {
this.regidate = regidate;
}
}
4) JDBConnect.java 코드 수정
// Java Resources/src/common/JDBConnect.java
package common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBConnect {
public Connection con;
public Statement stmt;
public PreparedStatement psmt;
public ResultSet rs;
// 기본 생성자
public JDBConnect(String drv, String url2, String id2, String pw) {
try {
// JDBC 드라이버 코드
Class.forName("oracle.jdbc.OracleDriver");
// DB에 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "hello";
String pwd = "1234";
con = DriverManager.getConnection(url, id, pwd);
System.out.println("DB 연결 성공(기본 생성자)");
} catch (Exception e) {
e.printStackTrace();
}
}
// 연결 해제(자원 반납)
public void close() {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (psmt != null) psmt.close();
if (con != null) con.close();
System.out.println("JDBC 자원 해제");
} catch (Exception e) {
e.printStackTrace();
}
}
}
5) 컨트롤러(서블릿)
(1) web.xml에서 서블릿으로 매핑
<!-- src/main/webapp/WEB-INF/web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>HelloJSP</display-name>
... 생략 ...
<servlet> <!-- 서블릿 등록 -->
<servlet-name>MemberAuth</servlet-name> <!-- 1. 서블릿 매핑을 위한 서블릿명 -->
<servlet-class>member.MemberAuth</servlet-class> <!-- 2. 요청을 처리할 서블릿을 패키지를 포함하여 명시 -->
<init-param>
<param-name>admin_id</param-name>
<param-value>admin1</param-value>
</init-param>
</servlet>
<servlet-mapping> <!-- 서블릿과 요청명 매핑 -->
<servlet-name>MemberAuth</servlet-name> <!-- 3. 1과 동일한 서블릿명 -->
<url-pattern>/member/MemberAuth.mvc</url-pattern> <!-- 4. 컨텍스트 루트를 제외한 요청명 작성 -->
</servlet-mapping>
</web-app>
(2) 회원인증 컨트롤러(서블릿)
// Java Resources/src/member/MemberAuth.java
package member;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberAuth extends HttpServlet{
// 1. MemberDAO 타입의 DAO 객체를 멤버 변수로 선언
MemberDAO dao;
// 2. 서블릿 초기화를 위한 init 메서드(DB 연결을 위한 DAO 객체 생성)
@Override
public void init() throws ServletException {
// 3. application 내장 객체 얻기
ServletContext application = this.getServletContext();
// 4. web.xml에서 DB 연결 정보 얻기
String driver = application.getInitParameter("OracleDriver");
String connectUrl = application.getInitParameter("OracleURL");
String oId = application.getInitParameter("OracleId");
String oPass = application.getInitParameter("OraclePwd");
// 5. 4에서 가져온 DB 연결 정보로 DAO 생성
dao = new MemberDAO(driver, connectUrl, oId, oPass);
}
// 6. 클라이언트의 요청을 처리할 service() 메서드 정의
@Override
public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 7. 서블릿 초기화 매개변수에서 관리자 ID 받기
String admin_id = this.getInitParameter("admin_id");
// 8. 인증을 요청한 ID/패스워드
String id = req.getParameter("id");
String pass = req.getParameter("pass");
// 9. 회원 테이블에서 인증 요청한 ID/패스워드에 해당하는 회원 찾기
MemberDTO dto = dao.getMemberDTO(id, pass);
// 찾은 회원의 이름에 따른 처리
String name = dto.getName();
// 10. 일치하는 회원 찾음
if(name != null) {
req.setAttribute("authMessage", name+" 회원님 환영합니다.");
// 일치하는 회원 없음
} else {
// 11. 관리자
if(admin_id.equals(id))
req.setAttribute("authMessage", admin_id+"는 최고 관리자입니다.");
// 12. 비회원
else
req.setAttribute("authMessage", "귀하는 회원이 아닙니다");
}
// 13. MemberAuth.jsp로 포워드
req.getRequestDispatcher("/member/MemberAuth.jsp").forward(req, resp);
}
// 14. DAO 객체의 close() 메서드로 JDBC에서 사용하던 객체를 메모리에서 소멸
@Override
public void destroy() {
dao.close();
}
}
3. 프로그램 실행(MemberAuth.jsp 실행)
1) 첫 화면
2) [회원인증(관리자)] 링크 클릭
admin1이 아니라 null이라고 나와서 콘솔창에서 admin_id와 id 값이 찍히는지 확인
-> 모두 값이 제대로 찍혔으며, name+"는 최고 관리자입니다"의 name 자리에 admin_id를 넣었어야 했음
코드 수정 후 정상 작동하는 모습
3) [회원인증(회원)] 링크 클릭
4) [회원인증(비회원)] 링크 클릭