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>
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 |