자바 - 스프링을 배우고 싶다.
그 전에 자바 - 서블릿 - jsp를 이용하여 간단한 회원가입을 만들어 보자. (1년전에 수업들은걸 되살려보자!!)
그 전에 우리나라 대기업들이 많이 쓰는 스프링이 무엇인지, 서블릿, jsp, tomcat이 무엇인지 간단히 알아보고 가보자
MVC : 디자인 패턴 중 하나로 하나의 프로젝트를 구성할 때 3가지 역할로 구분한 패턴이다.
Model - 애플리케이션의 데이터를 나타낸다. 데이타베이스 안의 상수, 초기화값, 변수, 값 등을 뜻한다. 또한 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트를 말한다. (예를 들어 좋아요 0개에서 버튼을 누르면 1이 된다. 여기서 초기의 0이란 값과 누르고 나서의 1이란 값이다.)
View - 말 그대로 보이는 것. 출력되는 모든 것들이다. (예를 들어 좋아요 0개에서 버튼을 누르면 1이 된다. 여기서 좋아요 0개의 버튼, 누르고 난 후의 1이란 좋아요 버튼 보이는 것들 모두 뷰이다.)
Controller - 데이터와 UI(사용자 인터페이스)를 잇는 역할을 한다. (예를 들어 좋아요 0에서 버튼을 누르면 1이 된다. 여기서 버튼을 누르면 > 0(초기의 값) + 1 => 1(누르고 나서의 값) 이다.)
스프링이란 ?
자바를 위한 오픈 소스 애플리케이션 프레임워크, 동적인 웹사이트를 개발하기 위한 여러가지 서비스를 간단하게 제공해준다.
Servelet?
서블릿이란 클라이언ㅌ트의 요청을 처리하고, 그 결과를 반환해주는 자바 웹프로그래밍 기술이다.
uri 맵, WAS로 응답을 전달 하는 등의 기능을 한다.
jsp(Java Server Page)?
HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하여 웹브라우저에 돌려주는 서버 사이드 스크립트 언어다.
apache tomcat ?
WAS(Web application server)의 하나이다. WAS란 웹 어플리케이션이 동작하도록 지원하는 목적을 가졌다.(서비스 및 비즈니스 로직을 담고 있는 서버 라고 할 수 있다.) tomcat은 java코드를 실행할 수 있는 자바 HTTP웹 서버 환경을 제공해 준다.
서블릿을 만들고 web app libraries에 ojdbc6.jar, tomcat~.jar을 넣는 것과 같은 기본적인건 제외하고
설명하겠당
sec02.ex01과 test02이 오늘 살펴볼 코드이다.
sec02.ex01부분은 servlet, test02은 jsp이다.
jsp부분 listMembers, memberForm이 MVC중 V(VIEW)부분, MemberController는 Controller부분, MemberDAO와 MemberVO는 Model부분이라 할 수 있따.
1. MemberController
package sec02.ex01;
import java.io.IOException;
import java.util.List;
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;
@WebServlet("/member/*")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDAO memberDAO;
//memberDAO 생성
public void init() throws ServletException
{
memberDAO = new MemberDAO();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nextPage = null;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
//URL에서 요청명을 가져옴
String action =request.getPathInfo();
//최초 요청이거나 각 action마다 가는 페이지를 설정
if (action ==null || action.equals("/listMembers.do")) {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
//listMember.jsp로 포워딩
nextPage = "/test02/listMembers.jsp";
}
else if(action.equals("/addMember.do")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
MemberVO memberVO = new MemberVO(id, pwd, name, email);
memberDAO.addMember(memberVO);
//포워딩
nextPage = "/member/listMembers.do";
}
else if(action.equals("/memberForm.do")) {
//포워딩
nextPage = "/test02/memberForm.jsp";
}
else {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test02/listmembers.jsp";
}
//nextPage에 지정한 요청명으로 다시 서블릿에 요청
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
2. Member.DAO
package sec02.ex01;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private DataSource dataFactory;
private Connection conn;
private PreparedStatement pstmt;
public MemberDAO() {
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
}
catch (Exception e) {
e.printStackTrace();
}
}
public List<MemberVO> listMembers() {
List<MemberVO> membersList = new ArrayList<>();
try {
conn = dataFactory.getConnection();
//t_member 테이블 불러오기
String query = "select * from t_member order by joinDate desc";
//prepareStatement 객체를 생성하여 SQL문을 인자로 전달
pstmt = conn.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
//조회한 회원 정보를 레코드 별로 MemberVO 객체 속성에 저장
MemberVO memberVO = new MemberVO(id, pwd, name, email, joinDate);
//MembersList에 MemberVO 객체들을 저장
membersList.add(memberVO);
}
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return membersList;
}
public void addMember(MemberVO m) {
try {
conn = dataFactory.getConnection();
String id = m.getId();
String pwd = m.getPwd();
String name = m.getName();
String email = m.getEmail();
String query = "INSERT INTO t_member(id, pwd, name, email)" + "VALUES(?, ?, ?, ?)";
//PrepareStatement 객체를 생성하면서 SQL문을 인자로 전달
pstmt = conn.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
pstmt.setString(3, name);
pstmt.setString(4, email);
//SQL문 실행
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. MemberVO
package sec02.ex01;
import java.util.Date;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO(String id, String pwd, String name, String email) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
public MemberVO(String id, String pwd, String name, String email, Date joinDate) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
this.joinDate = joinDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
4. listmembers
<%@ page language="java" contentType="text/html; charset=UTF-8" import = "java.util.*,sec01.ex01.*"
pageEncoding="UTF-8" isELIgnored = "false" %>
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<c:set var = "contextPath" value = "${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
<style>
.cls1{
font-size:40px;
text-align:center;
}
.cls2{
font-size:20px;
text-align:center;
}
</style>
</head>
<body>
<p class = "cls1">회원 정보</p>
<table align = "center" border = "1">
<tr align = "center" bgcolor = "lightgreen">
<td width = "7%"> <b> 아이디 </b></td>
<td width = "7%"> <b> 비밀번호 </b></td>
<td width = "7%"> <b> 이름 </b></td>
<td width = "7%"> <b> 이메일 </b></td>
<td width = "7%"> <b> 가입일 </b></td>
</tr>
<c:choose>
<c:when test = "${membersList == null}" >
<tr>
<td colspan = 5> <b>등록된 회원이 없습니다.</b> </td>
</tr>
</c:when>
<c:when test = "${membersList != null }" >
<c:forEach var = "mem" items = "${membersList}">
<tr align = "center">
<td> ${mem.id} </td>
<td> ${mem.pwd} </td>
<td> ${mem.name} </td>
<td> ${mem.email} </td>
<td> ${mem.joinDate} </td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</table>
<!-- 회원가입하기 클릭시 서블릿에 /member/memberForm.do로 요청 -->
<a href = "${contextPath}/member/memberForm.do"> <p class = "cls2">회원가입하기</p></a>
</body>
</html>
5. memberForm
<%@ page language="java" contentType="text/html; charset=UTF-8" import = "java.util.*,sec01.ex01.*"
pageEncoding="UTF-8" isELIgnored = "false" %>
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<c:set var = "contextPath" value = "${pageContext.request.contextPath}" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입창</title>
</head>
<body>
<form method = "post" action = "${contextPath}/member/addMember.do">
<h1 style = "text-align:center">회원가입창</h1>
<table align = "center">
<tr>
<td width ="200"> <p align = "right">아이디</td>
<td width = "400"> <input type ="text" name="id"> </td>
</tr>
<tr>
<td width ="200"> <p align = "right">비밀번호</td>
<td width = "400"> <input type ="text" name="pwd"> </td>
</tr>
<tr>
<td width ="200"> <p align = "right">이름</td>
<td width = "400"> <input type ="text" name="name"> </td>
</tr>
<tr>
<td width ="200"> <p align = "right">이메일</td>
<td width = "400"> <input type ="text" name="email"> </td>
</tr>
<tr>
<td width ="200"> <p> </p></td>
<td width = "400">
<input type = "submit" value = "가입하기">
<input type = "reset" value = "다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
오늘도 열코 합시다 여러분 ㅎ_ㅎ 다음에는 스프링을 지대로배워봅시다ㅏㅏ
'Java' 카테고리의 다른 글
[Spring] Landing Page 설정 (0) | 2021.03.06 |
---|---|
[Spring] 설치 및 프로젝트 생성(Gradle) (0) | 2021.03.06 |
[Spring] Maven, pom.xml이 뭐에요?(정의) (3) | 2021.02.05 |
[Spring] DB연동하기1 (db연결 세팅하기) (0) | 2021.01.31 |
[Spring] spring 설치 (0) | 2021.01.26 |