KDT/WEB

240130 WEB(회원수정,삭제)

001cloudid 2024. 1. 30. 12:50
728x90
package com.itwillbs.controller;

import java.lang.ProcessBuilder.Redirect;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

//주소매핑

@Controller
@RequestMapping("/member/*") // member로 시작하는 모든 주소를 매핑
public class MemberController {

	// MemberService 객체생성 → 멤버변수
	// @Inject → MemberService 클래스 찾기 → @Service 애노테이션 자동으로 찾기 → 자동으로 객체 생성
	// 찾으면 객체 생성
	// servlet-context에 component-scan 추가
	@Inject
	private MemberService memberService;

	(...생략...)

	// 가상주소 /member/main => member/main.jsp 이동
	@GetMapping("/main")
	public String main(MemberDTO memberDTO) {
		System.out.println("MemberController main()");
		return "/member/main";
	}
	

}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/main.jsp</title>
</head>
<body>
<h1>member/main.jsp</h1>
<%
String id = (String)session.getAttribute("id");
%>

<%-- <c:if test="조건"> --%>
<c:if test="${ empty sessionScope.id}">
	<c:redirect url="/member/login" />
</c:if>

<%=id %> == ${sessionScope.id } 님 환영합니다.<br>
<a href="${pageContext.request.contextPath}/member/logout">로그아웃</a><br>
<a href="${pageContext.request.contextPath}/member/info">회원 정보 조회</a><br>
<a href="${pageContext.request.contextPath}/member/update">회원 정보 수정</a><br>
<a href="${pageContext.request.contextPath}/member/delete">회원 정보 삭제</a><br>

<c:if test="${ ! empty sessionScope.id}">
	<c:if test="${ sessionScope.id == 'admin'}">
		<a href="${pageContext.request.contextPath}/member/list">회원 목록</a>
	</c:if>
</c:if><br>
<!-- 태그에 큰따옴표 열고 닫고되어 있으면 작은 따옴표로 감싸준다. -->
</body>
</html>

 

http://localhost:8080/myweb2/member/main 으로 접속하면 session값이 없기 때문에 login으로 넘어감

 

Run as 했을 때 매번 주소창을 이동해서 함.

/ 라는 root가 들어오면 가상주소 /member/login 주소 변경하면서 이동하게 설정을 바꾸기

HomeController

package com.itwillbs.myweb2;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
//		logger.info("Welcome home! The client locale is {}.", locale);
//		Date date = new Date();
//		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
//		String formattedDate = dateFormat.format(date);
//		model.addAttribute("serverTime", formattedDate );
//		return "home";
		
		return "redirect:/member/login";
	}
	
}

 

 

package com.itwillbs.controller;

import java.lang.ProcessBuilder.Redirect;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

//주소매핑

@Controller
@RequestMapping("/member/*") // member로 시작하는 모든 주소를 매핑
public class MemberController {

	// MemberService 객체생성 → 멤버변수
	// @Inject → MemberService 클래스 찾기 → @Service 애노테이션 자동으로 찾기 → 자동으로 객체 생성
	// 찾으면 객체 생성
	// servlet-context에 component-scan 추가
	@Inject
	private MemberService memberService;

	(...생략...)

	// 가상주소 /member/main => member/main.jsp 이동
	@GetMapping("/main")
	public String main(MemberDTO memberDTO) {
		System.out.println("MemberController main()");
		return "/member/main";
	}
	
	// 가상주소 /member/logout => 세션값 초기화 => /member/main 이동
	@GetMapping("/logout")
	public String logout(HttpSession session) {
		System.out.println("MemberController logout()");
		session.invalidate();
		
		return "redirect:/member/main";
	}

}

 

package com.itwillbs.controller;

import java.lang.ProcessBuilder.Redirect;
import java.net.http.HttpRequest;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

//주소매핑

@Controller
@RequestMapping("/member/*") // member로 시작하는 모든 주소를 매핑
public class MemberController {

	// MemberService 객체생성 → 멤버변수
	// @Inject → MemberService 클래스 찾기 → @Service 애노테이션 자동으로 찾기 → 자동으로 객체 생성
	// 찾으면 객체 생성
	// servlet-context에 component-scan 추가
	@Inject
	private MemberService memberService;

	(...생략...)
		
	// 가상주소 /member/info 
	// => id = 세션값 가져오기 
	// => MemberService에 MemberDTO memberDTO = getMember(id) 메소드 호출
	// => model.add("memberDTO", memberDTO) 데이터 담아서 : model.addAttribute("memberDTO", memberDTO);
	// => member/info.jsp 주소 변경 없이 이동
	@GetMapping("/info")
	public String info(Model model, HttpSession session) {
		System.out.println("MemberController info()");		
		String id = (String)session.getAttribute("id"); // id = 세션값 가져오기
		MemberDTO memberDTO = memberService.getMember(id);
		model.addAttribute("memberDTO", memberDTO);
		
		return "/member/info";
	}
	
}

 

package com.itwillbs.service;

import java.sql.Timestamp;

import javax.inject.Inject;

import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.itwillbs.dao.MemberDAO;
import com.itwillbs.domain.MemberDTO;

@Service
public class MemberService {
	//MemberDAO 객체생성 → 멤버변수
	//@Inject → MemberDAO 클래스 찾기 → @Repsitory 애노테이션 자동으로 찾기 → 자동으로 객체 생성
	//찾으면 객체 생성
	//servlet-context에 component-scan 추가
	@Inject
	private MemberDAO memberDAO;
	
	(...생략...)
    
	public MemberDTO getMember(String id) {
		System.out.println("MemberService getMember()");
		return memberDAO.getMember(id);		
	}

}

 

package com.itwillbs.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.MemberDTO;

@Repository
public class MemberDAO {
	
	//마이바티스 멤버 변수 정의 => 객체 생성 자동으로 전달(주입) 받음
	@Inject
	private SqlSession sqlSession;	
	private static final String namespace = "com.itwillbs.mappers.memberMapper";

	(...생략...)
	
	public MemberDTO getMember(String id) {
		System.out.println("MemberDAO getMember()");
		return sqlSession.selectOne(namespace+".getMember", id);
	}

}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace="com.itwillbs.mappers.memberMapper"
	 => memberMapper.xml 파일 => xml 파일이름 -->
<mapper namespace="com.itwillbs.mappers.memberMapper">
		 <!-- sql구문 이름 = 메소드명과 같이하는게 편함
		 	  id="insertMember" sql 구문의 이름 
		 	  
		 	  ? 대신에 memberDTO 멤버변수 이름 적어줌 #{변수명}-->
	<insert id="insertMember"> 
						<!-- DB열 이름 -->
	insert into members(id,pw,name,date) 
	values(#{id},#{pw},#{name},#{date}) 
	<!-- #{} memberDTO의 멤버변수를 뜻함. 문법으로 약속되어 있음 -->
	</insert>
	
<!-- select 구문에서 결과값이 있고 resultType에 결과형을 지정
	 DB에 열 이름이 id,pw, name, date
	 => MemberDTO 멤버변수 이름 일치하면 자동으로 저장 -->
	<select id="userCheck" resultType="com.itwillbs.domain.MemberDTO">
	select * from members
	where id = #{id} and pw = #{pw};
	</select>

	<select id="getMember" resultType="com.itwillbs.domain.MemberDTO">
	select * from members
	where id = #{id};
	</select>
	
</mapper>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/info.jsp</title>
</head>
<body>
<h1>member/info.jsp</h1>
<h1>회원 정보 조회</h1>
<c:choose>
	<c:when test="${! empty memberDTO }">
	아이디 : ${memberDTO.id}<br> 
	비밀번호 : ${memberDTO.pw}<br>
	이름 : ${memberDTO.name}<br>
	가입날짜 : ${memberDTO.date}<br>
	</c:when>
	<c:otherwise>
		아이디 없음
	</c:otherwise>
</c:choose>


<a href="main">main 이동</a>

</body>
</html>

package com.itwillbs.controller;

import java.lang.ProcessBuilder.Redirect;
import java.net.http.HttpRequest;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

//주소매핑

@Controller
@RequestMapping("/member/*") // member로 시작하는 모든 주소를 매핑
public class MemberController {

	(...생략...)
	
	// 가상주소 /member/update
	// => id = 세션값 가져오기 
	// => MemberService에 MemberDTO memberDTO = getMember(id) 메소드 호출
	// => model.add("memberDTO", memberDTO) 데이터 담아서
	// => member/update.jsp 주소 변경 없이 이동
	@GetMapping("/update")
	public String update(HttpSession session, Model model) {
		System.out.println("MemberController update()");
		String id = (String)session.getAttribute("id");
		MemberDTO memberDTO = memberService.getMember(id);
		model.addAttribute("memberDTO", memberDTO);
		return "/member/update";
	}
	
	// POST방식 가상주소 /member/updatePro (info와 비슷)
	// => MemberDTO 받기
	// => memberDTO2 = userCheck(memberDTO) 호출
	// => memberDTO2 != null 일치하면 updateMember(memberDTO) 메소드 호출
	//    memberDTO2 == null 틀리면 /member/update 주소 변경하면서 이동
	@PostMapping("/updatePro")
	public String updatePro(MemberDTO memberDTO) {
		System.out.println("MemberController updatePro()");
		MemberDTO memberDTO2 = memberService.userCheck(memberDTO);
		if(memberDTO2!=null) {
			memberService.updateMember(memberDTO);
			return "redirect:/member/main";
		} else {
			return "redirect:/member/update";
		}
	}
	
}

 

package com.itwillbs.service;

import java.sql.Timestamp;

import javax.inject.Inject;

import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.itwillbs.dao.MemberDAO;
import com.itwillbs.domain.MemberDTO;

@Service
public class MemberService {

	(...생략...)
    
	public void updateMember(MemberDTO memberDTO) {
		System.out.println("MemberService updateMember()");
		memberDAO.updateMember(memberDTO);
	}
	

}

 

package com.itwillbs.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.MemberDTO;

@Repository
public class MemberDAO {
	
	(...생략...)

	public void updateMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO updateMember()");
		sqlSession.update(namespace+".updateMember", memberDTO);
	}

}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace="com.itwillbs.mappers.memberMapper"
	 => memberMapper.xml 파일 => xml 파일이름 -->
<mapper namespace="com.itwillbs.mappers.memberMapper">
		 <!-- sql구문 이름 = 메소드명과 같이하는게 편함
		 	  id="insertMember" sql 구문의 이름 
		 	  ? 대신에 memberDTO 멤버변수 이름 적어줌 #{변수명}-->

	(...생략...)
    
	<update id="updateMember">
	update members
	set name = #{name}
	where id = #{id};
	</update>
	
</mapper>

 

<!-- 231219 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/update.jsp</title>
</head>
<body>
<h1>member/update.jsp</h1>
<h1>회원 정보 수정</h1>
<c:if test="${! empty memberDTO}">
<form action="${pageContext.request.contextPath}/member/updatePro" method="post">
	아이디 : <input type="text" name="id" value="${memberDTO.id }" readonly><br>
	비밀번호 : <input type="password" name="pw"> 비밀번호 입력 시 회원정보 수정<br>
	이름 : <input type="text" name="name" value="${memberDTO.name }"><br>
	<input type="submit" value="회원정보수정">
</form>
</c:if>
<c:if test="${empty memberDTO }">
	아이디 없음
</c:if>

</body>
</html>

package com.itwillbs.controller;

import java.lang.ProcessBuilder.Redirect;
import java.net.http.HttpRequest;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itwillbs.domain.MemberDTO;
import com.itwillbs.service.MemberService;

@Controller
@RequestMapping("/member/*") // member로 시작하는 모든 주소를 매핑
public class MemberController {

	(...생략...)
    
	// 가상주소 /member/delete
	// => member/delete.jsp 주소 변경 없이 이동
	@GetMapping("/delete")
	public String delete() {
		System.out.println("MemberController delete()");
		return "/member/delete";
	}
		
	// POST방식 가상주소 /member/deletePro
	// => MemberDTO 받기, 세션 객체 받기
	// memberDTO2 = userCheck(memberDTO) 호출
	// memberDTO2 != nill 일치, 삭제, deleteMember(memberDTO) 메소드 호출, 세션 초기화
	@PostMapping("/deletePro")
	public String deletePro(MemberDTO memberDTO, HttpSession session) {
		System.out.println("MemberController updatePro()");
		MemberDTO memberDTO2 = memberService.userCheck(memberDTO);
		if(memberDTO2!=null) {
			memberService.deleteMember(memberDTO);
			session.invalidate();
			return "/member/main";
		} else {	
		return "/member/login";
		}
	}
	
	
}

 

package com.itwillbs.service;

import java.sql.Timestamp;

import javax.inject.Inject;

import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.itwillbs.dao.MemberDAO;
import com.itwillbs.domain.MemberDTO;

@Service
public class MemberService {
	
    (...생략...)
	
	public void deleteMember(MemberDTO memberDTO) {
		System.out.println("MemberService deleteMember()");
		memberDAO.deleteMember(memberDTO);
	}
    
}

 

package com.itwillbs.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.MemberDTO;

@Repository
public class MemberDAO {
	
	(...생략...)

	public void deleteMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO deleteMember()");
		sqlSession.delete(namespace+".deleteMember", memberDTO);
	}
	
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace="com.itwillbs.mappers.memberMapper"
	 => memberMapper.xml 파일 => xml 파일이름 -->
<mapper namespace="com.itwillbs.mappers.memberMapper">
		 <!-- sql구문 이름 = 메소드명과 같이하는게 편함
		 	  id="insertMember" sql 구문의 이름 
		 	  ? 대신에 memberDTO 멤버변수 이름 적어줌 #{변수명}-->

	(...생략...)
	
	<delete id="deleteMember">
	delete from members
	where id = #{id};
	</delete>
	
</mapper>

240130.zip
0.04MB

728x90

'KDT > WEB' 카테고리의 다른 글

240205 WEB(펀웹2)  (0) 2024.02.05
240201 WEB(조회, 펀웹1)  (0) 2024.02.01
240129 WEB(마이바티스)  (0) 2024.01.29
240125 WEB - Spring4(JDBC, 마이바티스)  (0) 2024.01.25
240123 WEB - SPRING3(가상주소매핑, 의존성주입)  (0) 2024.01.23