게시판 폼 만들기
WebContent/views/common/menubar.jsp 생성
<%@page import="com.yh.member.model.vo.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Member loginUser = (Member)session.getAttribute("loginUser");
// 로그인 시도 전 menubar.jsp 로딩시 : null
// 로그인 성공 후 menubar.jsp 로딩시 : 로그인 성공한 회원의 정보가 담겨있는 Member 객체
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
.login-area>* {float: right;}
.login-area a {
text-decoration: none;
color: black;
font-size: 12px;
}
.nav-area {background-color: #E0BFE6 ;}
.menu {
display: table-cell;
width: 150px;
height: 50px;
}
.menu a {
text-decoration: none;
color: white;
font-size: 20px;
font-weight: bold;
display: block;
width: 100%;
height: 100%;
line-height: 50px;
}
.menu a:hover {background-color: #C7A9CC;}
</style>
</head>
<body>
<h1 align="center" style="color: #A28AA6;">Welcome</h1>
<div class="login-area">
<% if (loginUser == null) { %>
<!-- case1. 로그인 전 -->
<form action="/jsp/login.me" method="post">
<table>
<tr>
<th>아이디</th>
<td><input type="text" name="userId"></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="userPwd"></td>
</tr>
<tr>
<th colspan="2">
<button type="submit">로그인</button>
<button type="button">회원가입</button>
</th>
</tr>
</table>
</form>
<% } else { %>
<!-- case2. 로그인 후 -->
<div>
<b><%= loginUser.getUserName() %> 님</b>의 방문을 환영합니다. <br>
<br>
<div>
<a href="#">마이페이지</a> <a href="#">로그아웃</a>
</div>
</div>
<% } %>
</div>
<br clear="both">
<br>
<div class="nav-area" align="center">
<!-- (.menu>a)*4 -->
<div class="menu"><a href="#">HOME</a></div>
<div class="menu"><a href="#">공지사항</a></div>
<div class="menu"><a href="#">일반게시판</a></div>
<div class="menu"><a href="#">사진게시판</a></div>
</div>
</body>
</html>
LoginController
src/com/yh/member/controller/LoginController.java 생성
package com.yh.member.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 javax.servlet.http.HttpSession;
import javax.websocket.Session;
import com.yh.member.model.service.MemberService;
import com.yh.member.model.vo.Member;
/**
* Servlet implementation class LoginController
*/
@WebServlet("/login.me")
public class LoginController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1) 전달값에 한글이 있을 경우 인코딩 처리해주기 (post 방식에서만)
request.setCharacterEncoding("UTF-8");
// 2) 요청시 전달값 뽑아서 변수 또는 객체에 기록하기
String userId = request.getParameter("userId");
String userPwd = request.getParameter("userPwd");
// 3) 요청 처리 (db에 sql문 실행)
// 해당 요청을 처리하는 서비스 클래스의 메소드 호출 및 결과 받기
Member loginUser = new MemberService().loginMember(userId, userPwd); // null 혹은 로그인한 멤버 객체 담김
// 4) 처리된 결과를 가지고 사용자가 보게될 응답뷰(jsp)지정 후 포워딩 또는 url 재요청
if (loginUser == null) {
// 조회 결과 없음 == 로그인 실패 => 에러 문구가 보여지는 에러페이지 응답
request.setAttribute("errorMsg", "로그인 실패했습니다.");
// 응답페이지(jsp)에게 위임시 필요한 객체 (RequestDispatcher)
// 포워딩 방식
RequestDispatcher view = request.getRequestDispatcher("views/common/errorPage.jsp");
view.forward(request, response);
} else {
// 조회 결과 있음 == 로그인 성공 => 메인페이지 응답 (index.jsp)
// 로그인한 회원정보(loginUser)를 session에 담기
// Servlet에서는 session에 접근하고자 한다면 우선 세션 객체 얻어와야함
HttpSession session = request.getSession();
session.setAttribute("loginUser", loginUser);
// 1. 포워딩 방식 응답 뷰 출력
// 해당 선택된 jsp가 보여질 뿐 url에는 여전히 현재 이 서블릿 매핑값이 남아있음
// localhost:8001/jsp/login.me
// RequestDispatcher view = request.getRequestDispatcher("index.jsp");
// view.forward(request, response);
// 2. url 재요청 방식 (sendRedirect 방식)
// 기존에 저 페이지를 응답하는 url이 존재한다면 사용 가능
// localhost:8001/jsp
// response.sendRedirect("/jsp");
response.sendRedirect(request.getContextPath()); // "/jsp"
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
응답페이지에 전달한 값이 있을 경우 담을 수 있는 영역(jsp 내장객체) 필요함
jsp 내장객체
1) application : 웹 애플리케이션 전역에서 다 꺼내서 쓸 수 있음
2) session : 내가 직접 지우기 전까지, 세션이 만료(서버 멈춤, 브라우저 종료)되기 전까지 유효함
3) request : 현재 이 request 객체를 포워딩한 응답 jsp에서만 꺼내 쓸 수 있음 (일회성 느낌)
4) page : 해당 jsp에서 담고 그 jsp에서만 꺼내 쓸 수 있음
공통적으로 데이터를 담고자 한다면 .setAttribute("K",V);
꺼내고자 한다면 .getAttribute("K") => Object 타입으로 뱉음 (다운캐스팅 해줘야 됨)
지우고자 한다면 .removeAttribute("K");
LogoutController
src/com/yh/member/controller/LogoutController.java 생성
package com.yh.member.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;
/**
* Servlet implementation class LogoutController
*/
@WebServlet("/logout.me")
public class LogoutController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogoutController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 로그아웃 요청 처리 => session 만료 시키기 == 세션을 무효화 시키기
// HttpSession session = request.getSession();
// session.invalidate();
// 위의 두 줄을 한 줄로!
request.getSession().invalidate();
// 응답페이지 => index 페이지 => url 재요청
// response.sendRedirect("/jsp");
response.sendRedirect(request.getContextPath()); // == /jsp
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
member Vo
src/com/yh/member/model/vo/Member.java
package com.yh.member.model.vo;
import java.util.Date;
public class Member {
// 필드부 선언
private int userNo;
private String userId;
private String userPwd;
private String userName;
private String phone;
private String email;
private String address;
private String interest;
private Date enrollDate;
private Date modifyDate;
private String status;
// 기본생성자
public Member() {}
// 매개변수생성자
public Member(int userNo, String userId, String userPwd, String userName, String phone, String email,
String address, String interest, Date enrollDate, Date modifyDate, String status) {
super();
this.userNo = userNo;
this.userId = userId;
this.userPwd = userPwd;
this.userName = userName;
this.phone = phone;
this.email = email;
this.address = address;
this.interest = interest;
this.enrollDate = enrollDate;
this.modifyDate = modifyDate;
this.status = status;
}
// setter/getter
public int getUserNo() {
return userNo;
}
public void setUserNo(int userNo) {
this.userNo = userNo;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getInterest() {
return interest;
}
public void setInterest(String interest) {
this.interest = interest;
}
public Date getEnrollDate() {
return enrollDate;
}
public void setEnrollDate(Date enrollDate) {
this.enrollDate = enrollDate;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
// toString
@Override
public String toString() {
return "Member [userNo=" + userNo + ", userId=" + userId + ", userPwd=" + userPwd + ", userName=" + userName
+ ", phone=" + phone + ", email=" + email + ", address=" + address + ", interest=" + interest
+ ", enrollDate=" + enrollDate + ", modifyDate=" + modifyDate + ", status=" + status + "]";
}
}
loginMember mapper
src/db/sql/member-mapper.xml 생성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="loginMember">
SELECT
USER_NO
, USER_ID
, USER_PWD
, USER_NAME
, PHONE
, EMAIL
, ADDRESS
, INTEREST
, ENROLL_DATE
, MODIFY_DATE
, STATUS
FROM MEMBER
WHERE USER_ID = ?
AND USER_PWD = ?
AND STATUS = 'Y'
</entry>
</properties>
loginMember Dao
src/com/kh/member/model/dao/MemberDao.java 생성
package com.yh.member.model.dao;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.yh.common.JDBCTemplate;
import com.yh.member.model.vo.Member;
public class MemberDao {
private Properties prop = new Properties();
public MemberDao() {
String filePath = MemberDao.class.getResource("/db/sql/member-mapper.xml").getPath();
try {
prop.loadFromXML(new FileInputStream(filePath));
} catch (IOException e) {
e.printStackTrace();
}
}
public Member loginMember(Connection conn, String userId, String userPwd) {
// select문 => ResultSet 객체 (한행) => Member 객체
Member m = null;
PreparedStatement pstmt = null;
ResultSet rset = null;
String sql = prop.getProperty("loginMember");
try {
pstmt = conn.prepareStatement(sql); // 미완성된 sql문
pstmt.setString(1, userId);
pstmt.setString(2, userPwd);
rset = pstmt.executeQuery(); // 조회 결과가 있다면 한 행 | 조회 결과가 없다면 아무것도 안담김
if (rset.next()) {
m = new Member(rset.getInt("user_no"),
rset.getString("user_id"),
rset.getString("user_pwd"),
rset.getString("user_name"),
rset.getString("phone"),
rset.getString("email"),
rset.getString("address"),
rset.getString("interest"),
rset.getDate("enroll_date"),
rset.getDate("modify_date"),
rset.getString("status"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCTemplate.close(rset);
JDBCTemplate.close(pstmt);
}
return m;
}
}
loginMember Service
src/com/yh/member/model/service/MemberService.java 생성
package com.yh.member.model.service;
import java.sql.Connection;
import com.yh.common.JDBCTemplate;
import com.yh.member.model.dao.MemberDao;
import com.yh.member.model.vo.Member;
public class MemberService {
public Member loginMember(String userId, String userPwd) {
// connection 객체 생성
Connection conn = JDBCTemplate.getConnection();
// dao 호출
Member m = new MemberDao().loginMember(conn, userId, userPwd);
JDBCTemplate.close(conn);
return m;
}
}
실행화면
로그인 화면
로그인 성공시
로그인 실패시
'Study' 카테고리의 다른 글
[Spring] 스프링 개발 환경 구축 (0) | 2023.01.18 |
---|---|
[JSP] 게시판 만들기 - 회원가입 (0) | 2023.01.13 |
[Oracle/오라클] 인라인뷰 (INLINE-VIEW) / ROWNUM / RANK() OVER / DENSE_RANK() OVER (0) | 2023.01.07 |
[Oracle/오라클] 서브쿼리 (SUBQUERY) (0) | 2023.01.02 |
[Oracle/오라클] 조인 (INNER JOIN / OUTER JOIN) (0) | 2023.01.02 |