D+34::도서 쇼핑몰 사이트 만들기(로그인,로그아웃,상품목록)
20220811_Thu
실습내용1)
- 로그인 화면
- 로그인 기능
- 로그인이 되면 세션에 로그인한 사람의 아이디,이름,관리자여부를 등록
- 로그인 성공하면 상품목록페이지로 다시 이동
- 만약 로그인시 관리자가 로그인을 했다면,
메뉴에 관리자메뉴 라는 메뉴가 보일 수 있도록 수정한다.- 로그아웃 기능 만들기
- 로그인 안했을 때 LOGIN JOIN 보이도록하기.
- 로그인 안했을 때는 이름님 반갑습니다.회원정보변경 장바구니 구매이력 로그아웃 보이도록 만든다.
프로젝트명 : shop_0810
주의) DB에서 만든 테이블의 컬럼명 그대로 만들기(복붙)

package dto;
public class MemberDTO {
private String memId;
private String memPw;
private String memName;
private String gender;
private String memTell;
private String memAddr;
private String addrDetail;
private String isAdmin;
public MemberDTO() {}
public MemberDTO(String memId, String memPw, String memName, String gender, String memTell, String memAddr,
String addrDetail, String isAdmin) {
super();
this.memId = memId;
this.memPw = memPw;
this.memName = memName;
this.gender = gender;
this.memTell = memTell;
this.memAddr = memAddr;
this.addrDetail = addrDetail;
this.isAdmin = isAdmin;
}
public String getMemId() {
return memId;
}
public void setMemId(String memId) {
this.memId = memId;
}
public String getMemPw() {
return memPw;
}
public void setMemPw(String memPw) {
this.memPw = memPw;
}
public String getMemName() {
return memName;
}
public void setMemName(String memName) {
this.memName = memName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMemTell() {
return memTell;
}
public void setMemTell(String memTell) {
this.memTell = memTell;
}
public String getMemAddr() {
return memAddr;
}
public void setMemAddr(String memAddr) {
this.memAddr = memAddr;
}
public String getAddrDetail() {
return addrDetail;
}
public void setAddrDetail(String addrDetail) {
this.addrDetail = addrDetail;
}
public String getIsAdmin() {
return isAdmin;
}
public void setIsAdmin(String isAdmin) {
this.isAdmin = isAdmin;
}
}
<!-- 회원가입 -->
<insert id="insertMember">
INSERT INTO SHOP_MEMBER (
MEM_ID
, MEM_PW
, MEM_NAME
, GENDER
, MEM_TELL
, MEM_ADDR
, ADDR_DETAIL
) VALUES (
#{memId}
, #{memPw}
, #{memName}
, #{gender}
, #{memTell}
, #{memAddr}
, #{addrDetail}
)
</insert>
<!-- 로그인 -->
<select id="login" resultMap="board">
SELECT MEM_ID
, MEM_NAME
, IS_ADMIN
FROM SHOP_MEMBER
WHERE MEM_ID = #{memId}
AND MEM_PW = #{memPw}
</select>
import dto.MemberDTO;
public interface MemberService {
//회원가입
void insertMember(MemberDTO memberDTO);
//로그인
MemberDTO login(MemberDTO memberDTO);
}
import java.lang.reflect.Member;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import dto.MemberDTO;
import sqlmap.SqlSessionManager;
//쿼리작업하는 곳
public class MemberServiceImpl implements MemberService{//서비스를 구현하겠다.
//쿼리 실행하는 객체
SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();
SqlSession sqlSession = sqlSessionFactory.openSession();
@Override
public void insertMember(MemberDTO memberDTO) {
sqlSession.insert("memberMapper.insertMember",memberDTO);
sqlSession.commit();
}
@Override
public MemberDTO login(MemberDTO memberDTO) {
MemberDTO result = sqlSession.selectOne("memberMapper.login", memberDTO);
sqlSession.commit();
return result;
}
}
package controller;
import java.io.IOException;
import java.util.ArrayList;
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;
import javax.servlet.http.HttpSession;
import org.apache.catalina.startup.SetAllPropertiesRule;
import dto.MemberDTO;
import service.MemberService;
import service.MemberServiceImpl;
@WebServlet("*.me")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
private MemberService memberService = new MemberServiceImpl();
public MemberController() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글 인코딩 처리
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());
System.out.println("command = " + command);
//(주의!!)
//page는 항상 최종적으로 보이는 화면이기때문에 템플릿화면이다.
//만약 빈값으로 설정하면 index 파일과 연결되어있는 itemList.it 로 간다.
String page="jsp/template/template.jsp";
String contentPage="";
boolean isRediect = false;
//공통사항들은 앞뒤로 미리 빼준다.
//page는 위에 템플릿으로!
//contentPage는
// request.setAttribute("contentPage", contentPage)로
// if/else if문 가장 마지막 바깥으로!
//회원가입양식페이지
if(command.equals("/joinForm.me")) {
contentPage="member/join.jsp";
}
//로그인 양식
else if(command.equals("/loginForm.me")) {
contentPage="member/login.jsp";
}
//회원가입
else if(command.equals("/join.me")) {
String memId =request.getParameter("memId");
String memPw =request.getParameter("memPw");
String memName=request.getParameter("memName");
String gender=request.getParameter("gender");
String memTell=request.getParameter("memTell");
String memAddr=request.getParameter("memAddr");
String addrDetail=request.getParameter("addrDetail");
MemberDTO memberDTO = new MemberDTO();
memberDTO.setAddrDetail(addrDetail);
memberDTO.setGender(gender);
memberDTO.setMemAddr(memAddr);
memberDTO.setMemId(memId);
memberDTO.setMemName(memName);
memberDTO.setMemPw(memPw);
memberDTO.setMemTell(memTell);
memberService.insertMember(memberDTO);
//회원가입 이후에는 템플레이트가 아닌 팝업창으로가기때문에 'page'로 이동(contentPage x)
page="jsp/member/join_result.jsp";
}
//로그인
else if(command.equals("/login.me")) {
String memId =request.getParameter("memId");
String memPw =request.getParameter("memPw");
String isAdmin = request.getParameter("isAdmin");
MemberDTO memberDTO = new MemberDTO();
memberDTO.setMemId(memId);
memberDTO.setMemPw(memPw);
memberDTO.setIsAdmin(isAdmin);
MemberDTO loginInfo = memberService.login(memberDTO);
if(loginInfo != null) {
HttpSession session = request.getSession();
session.setAttribute("loginInfo", loginInfo);
}
page="jsp/member/login_result.jsp";
}
//로그아웃
else if(command.equals("/logout.me")) {
HttpSession session = request.getSession();
session.removeAttribute("loginInfo");
page="itemList.it";
}
request.setAttribute("contentPage", contentPage);
//페이지이동에 사용되는 if문
if(isRediect) {
response.sendRedirect(page);
}
else {
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
}
6.jsp화면...

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
실습내용2)
- 만약,로그인시 관리자가 로그인을 했다면,
메뉴가 상품등록,상품정보변경,회원정보변경,매출관리- 내용 페이지는 상품등록 " jsp/admin/reg_item_form.jsp "페이지로 만든다.(관리자만 가능)
- 관리자만 가능한 페이지는 AdminController 로 만들면 된다.
실습내용3)
- <상품등록화면 개발>
- 상품등록시 상품코드는 ITEM_001,ITEM_002...로 만들기
- 상품이름,가격,상품설명(textarea),재고(기본값있기때문에 입력x),상품카테고리(셀렉트박스:실제아이템카테고리안에 조회된 목록이 떠야한다!!!)


menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
0.login_result.jsp 에서 먼저 관리자 로그인 시 메뉴 화면 변경 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
2.admin_menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
public class CategoryDTO {
private String cateCode;
private String cateName;
public String getCateCode() {
return cateCode;
}
public void setCateCode(String cateCode) {
this.cateCode = cateCode;
}
public String getCateName() {
return cateName;
}
public void setCateName(String cateName) {
this.cateName = cateName;
}
}
2.itemService 만들기
package service;
//인터페이스
//(mapper에서 만든 쿼리문)메소드 기능 정의하는 곳이다!!!
import java.util.List;
import dto.CategoryDTO;
public interface ItemService {
//상품카테고리 목록 조회
List selectCategoryList();
}
3.itemServiceImple 만들기
package service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import dto.CategoryDTO;
import sqlmap.SqlSessionManager;
//쿼리작업하는 곳
public class ItemServiceImpl implements ItemService{//서비스를 구현하겠다.
//쿼리 실행하는 객체
SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();
SqlSession sqlSession = sqlSessionFactory.openSession();
//카테고리 목록 조회
@Override
public List<CategoryDTO> selectCategoryList() {
List<CategoryDTO> result = sqlSession.selectList("itemMapper.selectCategoryList");
sqlSession.commit();
return result;
}
}
4.Admincontroller 파일 생성
package controller;
import java.awt.ItemSelectable;
import java.io.IOException;
import java.util.ArrayList;
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;
import javax.servlet.http.HttpSession;
import org.apache.catalina.startup.SetAllPropertiesRule;
import dto.CategoryDTO;
import dto.ItemDTO;
import dto.MemberDTO;
import service.MemberService;
import service.MemberServiceImpl;
import service.ItemService;
import service.ItemServiceImpl;
@WebServlet("*.ad")
public class AdminController extends HttpServlet {
private static final long serialVersionUID = 1L;
private ItemServiceImpl itemService = new ItemServiceImpl();
public AdminController() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글 인코딩 처리
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());
System.out.println("command = " + command);
String page="jsp/template/admin_template.jsp";
String contentPage="";
boolean isRediect = false;
//관리자 상품등록 페이지
if(command.equals("/regItemForm.ad")) {
//카테고리 목록조회(이전 맵퍼에서 미리 만든다)
List<CategoryDTO> categoryList =itemService.selectCategoryList();
request.setAttribute("categoryList", categoryList);
contentPage="admin/reg_item_form.jsp";
}
//
else if(command.equals("/regItem.ad")) {
contentPage=".ad";
}
request.setAttribute("contentPage", contentPage);
//페이지이동에 사용되는 if문
if(isRediect) {
response.sendRedirect(page);
}
else {
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
}