빅데이터 서비스 교육/JSP Servlet

JSP 복습 (수정)

Manly 2022. 6. 2. 17:36
반응형

Maven Project : 다운로드를 하나하나 해줘야 하는것을 피하기 위해

                         porm.xml에 dependencies 안에 넣으면 자동으로 다운

 

라이브러리: 가져와서 쓰는 도구 

프레임워크: 정해진 틀안에서 사용

 

MyBatis 프레임워크 사용법

 

 

DB와 연결 관련  -> config.xml

 

 

SQL문 -> mapper.xml

 

 

 

 

 

MyBatis 장점

 

MyBatis 설정

1. 필요 라이브러리 다운 (ojdbc6, lombok, maybatis)

2. config.xml (데이터 베이스 연결 정보들 )

-> MyBatis / 시작하기 페이지에서 가져와서

property들의 value값들을 사용자 환경에 맞게 바꿔준다 / mappers도 고쳐준다

DAO를 쓰기위해 통로 설정해주려고 config.xml 설정하고 그다음 mapper파일 설정

 

SqlSessionManager - > config.xml를 가져와 읽고 해석해주는 도구

SqlSessionManager.java (class)를 완성 -> mybatis 환경설정완료

 

 

 

 

- 회원가입

1.

Main.jsp에서 회원가입 관련 태그들에서

form 태그 actioin -> 데이터 보낼 곳 설정

input태그들 name값 설정

submit 생성

 

2.

form태그 actioin 에서 보낸다고 설정한 JoinService.java(servlet)에서

String email = request.getParameter("email"); 등 (email, pw, tel, address)      값을 꺼내올땐 request에서 

main에서 보낸 input태그들의 요청들을 input태그들의 name값을 통해 받아온다

 

3. Servlet에서 받아온 데이터들을 하나로 묶어주기

 

com.model에  class 하나 만들어서 MemberVO

 

필드에 (email, pw, tel, address)를

private String email; 각각 선언해 주고

lombok을 이용해 annotation으로 

@Data // 기본 메서드만 생성 (Getter/Setter, toString)
@AllArgsConstructor // 모든 요소를 매개변수로 갖는 생성자 생성
@NoArgsConstructor // 기본생성자  만들고

 

JoinService.java(servlet)에서 데이터들을 하나로 묶어준다.

 

흐름 : main.jsp -> Servlet(JoinService.java) -> DAO -> SqlSessionManager.java( config.xml를 가져와 읽고 해석)

-> 

 

 

 

Main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="UTF-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" href="assets/css/main.css" />
	</head>
	<body>

		<!-- Wrapper -->
			<div id="wrapper">

				<!-- Header -->
					<header id="header" class="alt">
						<a href="index.html" class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a>
						<nav>
								<a href="#menu">로그인</a>
							<!-- 로그인 후 Logout.jsp로 이동할 수 있는'로그아웃'링크와 '개인정보수정'링크를 출력하시오. -->
						</nav>
					</header>

				<!-- Menu -->
					<nav id="menu">	
						<ul class="links">
							<li><h5>로그인</h5></li>
								<form>
									<li><input type="text"  placeholder="Email을 입력하세요"></li>
									<li><input type="password"  placeholder="PW를 입력하세요"></li>
									<li><input type="submit" value="LogIn" class="button fit"></li>
								</form>
						</ul>
						<ul class="actions vertical">
							<li><h5>회원가입</h5></li>
							<!-- 이동: JoinService, name값 달아주기 -->
								<form action="JoinService" method="post">
									<li><input type="text" name="email" placeholder="Email을 입력하세요"></li>
									<li><input type="password" name="pw" placeholder="PW를 입력하세요"></li>
									<li><input type="text" name="tel" placeholder="전화번호를 입력하세요"></li>
									<li><input type="text" name="address" placeholder="집주소를 입력하세요"></li>
									<li><input type="submit" value="JoinUs" class="button fit"></li>
								</form>
						</ul>
					</nav>			
				<!-- Banner -->
					<section id="banner" class="major">
						<div class="inner">
							<header class="major">
										<h1>로그인 한 세션아이디를 출력해주세요</h1>
								<!-- 로그인 후 로그인 한 사용자의 세션아이디로 바꾸시오.
									 ex)smart님 환영합니다 -->
							</header>
							<div class="content">
								<p>아래는 지금까지 배운 웹 기술들입니다.<br></p>
								<ul class="actions">
									<li><a href="#one" class="button next scrolly">확인하기</a></li>
								</ul>
							</div>
						</div>
					</section>

				<!-- Main -->
					<div id="main">

						<!-- One -->
							<section id="one" class="tiles">
								<article>
									<span class="image">
										<img src="images/pic01.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">HTML</a></h3>
										<p>홈페이지를 만드는 기초 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic02.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">CSS</a></h3>
										<p>HTML을 디자인해주는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic03.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Servlet/JSP</a></h3>
										<p>Java를 기본으로 한 웹 프로그래밍 언어/스크립트 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic04.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">JavaScript</a></h3>
										<p>HTML에 기본적인 로직을 정의할 수 있는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic05.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">MVC</a></h3>
										<p>웹 프로젝트 중 가장 많이 사용하는 디자인패턴</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic06.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Web Project</a></h3>
										<p>여러분의 최종프로젝트에 웹 기술을 활용하세요!</p>
									</header>
								</article>
							</section>
					<!-- Two -->
							<section id="two">
								<div class="inner">
									<header class="major">
										<h2>나에게 온 메세지 확인하기</h2>
									</header>
									<p></p>
									<ul class="actions">
										<li>로그인을 하세요.</li>
										<li><a href="#" class="button next scrolly">전체삭제하기</a></li>
									</ul>
								</div>
							</section>

					</div>

				<!-- Contact -->
					<section id="contact">
						<div class="inner">
							<section>
								<form>
								<div class="field half first">
										<label for="name">Name</label>
										<input type="text"  id="name" placeholder="보내는 사람 이름" />
									</div>
									<div class="field half">
										<label for="email">Email</label>
										<input type="text"  id="email" placeholder="보낼 사람 이메일"/>
									</div>

									<div class="field">
										<label for="message">Message</label>
										<textarea  id="message" rows="6"></textarea>
									</div>
									<ul class="actions">
										<li><input type="submit" value="Send Message" class="special" /></li>
										<li><input type="reset" value="Clear" /></li>
									</ul>
								</form>
							</section>
							
							<section class="split">
								<section>
									<div class="contact-method">
										<span class="icon alt fa-envelope"></span>
										<h3>Email</h3>
										<a href="#">로그인 한 사람의 이메일을 출력</a>
										<!-- 로그인 한 사용자의 이메일을 출력하시오 -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-phone"></span>
										<h3>Phone</h3>
										<span>로그인 한 사람의 전화번호를 출력</span>
										<!-- 로그인 한 사용자의 전화번호를 출력하시오 -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-home"></span>
										<h3>Address</h3>
										<span>로그인 한 사람의 집주소를 출력</span>
										<!-- 로그인 한 사용자의 집주소를 출력하시오 -->
									</div>
								</section>
							</section>					
						</div>
					</section>

				<!-- Footer -->
					<footer id="footer">
						<div class="inner">
							<ul class="icons">
								<li><a href="#" class="icon alt fa-twitter"><span class="label">Twitter</span></a></li>
								<li><a href="#" class="icon alt fa-facebook"><span class="label">Facebook</span></a></li>
								<li><a href="#" class="icon alt fa-instagram"><span class="label">Instagram</span></a></li>
								<li><a href="#" class="icon alt fa-github"><span class="label">GitHub</span></a></li>
								<li><a href="#" class="icon alt fa-linkedin"><span class="label">LinkedIn</span></a></li>
							</ul>
							<ul class="copyright">
								<li>&copy; Untitled</li><li>Design: <a href="https://html5up.net">HTML5 UP</a></li>
							</ul>
						</div>
					</footer>

			</div>

		<!-- Scripts -->
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.scrolly.min.js"></script>
			<script src="assets/js/jquery.scrollex.min.js"></script>
			<script src="assets/js/skel.min.js"></script>
			<script src="assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="assets/js/main.js"></script>

	</body>
</html>

JoinService.java (Servlet)

package com.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 com.model.MemberDAO;
import com.model.MemberVO;

@WebServlet("/JoinService")
public class JoinService extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	//회원가입 하는 기능을 수행
	// 1. 요청받은 값을 꺼내오기
	request.setCharacterEncoding("UTF-8");	
		
	String email = request.getParameter("email");
	String pw = request.getParameter("pw");
	String tel = request.getParameter("tel");
	String address = request.getParameter("address");
	
	// 2. 받아온 데이터들을 하나로 묶어주기
	// mybatis는 매개변수 하나만 받을 수 있어서
	MemberVO vo = new MemberVO();
	// spring때 기본생성자로 만든 후 setter로 값 셋팅하기때문에
	vo.setEmail(email);
	vo.setPw(pw);
	vo.setAddress(address);
	vo.setTel(tel);
	
	// 3. DAO 생성하기
	MemberDAO dao = new MemberDAO();
	
	// 4. insert 메소드 생성
	//   매개변수로 vo를 가져가기
	int row = dao.insert(vo);
	
	//5. 성공, 실패여부 판단
	if(row>0) {
		//6. 성공했다면 forward 방식으로 join_success.jsp로 이동
		// request객체에 email을 담아서 이동하기
		request.setAttribute("email", email);
		RequestDispatcher rd = request.getRequestDispatcher("join_success.jsp");
		rd.forward(request, response);
	}else {
		response.sendRedirect("main.jsp");
	}
	
	}
}

MemberVO.java (class)

package com.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data // 기본 메서드만 생성 (Getter/Setter, toString)
@AllArgsConstructor // 모든 요소를 매개변수로 갖는 생성자 생성
@NoArgsConstructor // 기본생성자

public class MemberVO {
	
	private String email;
	private String pw;
	private String tel;
	private String address;
	
}

MemberDAO.java (class)

package com.model;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.database.SqlSessionManager;

public class MemberDAO {
	
	// 데이터베이스 연결과 관련된 공통 도구를 필드로 꺼내오기
	private SqlSessionFactory sqlFactory = SqlSessionManager.getSqlSessionFactory();
	private SqlSession session = null;
	private int row = 0;
	
	public int insert(MemberVO vo) {
		
		try {
		// 1. sqlSessionFactory에서부터 연결할 수 있는 객체 꺼내오기
		 session = sqlFactory.openSession(true);
		
		// 2. insert 구문을 실행시킬 수 있는 기능을 수행
		// point!! sql문은 전부 mapper에서 가지고 있다.
		row = session.insert("insert", vo);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
		// 3. session 반납
		session.close();
		}
		return row;
		
		
	}
	
	
}

MemberMapper.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">
<!-- namespace : mapper 파일을 구분할 수 있는 고유 식별자 -->
<!-- 이름을 지정해줄 때 DAO 클래스파일명과 일치시키는 경우가 많음 -->
<mapper namespace="com.model.MemberDAO">
<!-- parmeterType : alias 지정했는지 확인할 것 -->
<insert id="insert" parameterType="com.model.MemberVO">
insert into jdbc_member
values(
#{email},
#{pw},
#{tel},
#{address})

</insert>


</mapper>

SqlSessionManager.java (class)

package com.database;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionManager {

	// Connection Pool 
	// SqlSessionFactory: SQL 연결을 만들어내고, 가지고 있는 객체
	private static SqlSessionFactory sqlSessionFactory;
	
	// 초기화 블럭: 프로그램이 시작되자마자 /즉 static 변수들이 할당 되자마자 실행
	static {
		
		try {
			// resource --> config.xml파일의 경로
			// .xml -> 파일을 가져올때는 /로 연결해준다.
			String resource = "com/database/config.xml";
			// xml파일을 가져와서 해석해서 쓴다는 의미
			InputStream inputStream = Resources.getResourceAsStream(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		}catch(Exception e){
			e.printStackTrace();
		}

	}

	// 다른 DAO파일에서 sqlSessionFactory를 꺼낼 수 있도록 하는
	// Getter
	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
}

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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
      <!-- 프로젝트 때는 property만 수정하기 -->
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@Localhost:1521:xe"/>
        <property name="username" value="hr"/>
        <property name="password" value="hr"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 내가 사용할 실제 sql 파일이 들어있는 mapper로 설정해줄 것 -->
  <mappers>
    <mapper resource="com/database/MemberMapper.xml"/>
  </mappers>
</configuration>

가입한 이메일명이 가입 후 축하메세지로 나오게

 

<li>메세지시스템의 새로운 이메일은 <%=(String)request.getAttribute("email") %>입니다.</li>
<li><button onclick='location.href="main.jsp"'>시작하기</button></li>

반응형

'빅데이터 서비스 교육 > JSP Servlet' 카테고리의 다른 글

JDBC MVC 패턴  (0) 2022.05.18
JSP 내장객체 (Scope) & JDBC & Maven  (0) 2022.05.16
JSP Session  (0) 2022.05.13
JSP Cookie  (0) 2022.05.12
JSP request, response  (0) 2022.05.11