- pom.xml(변경)
# AspectJ 위에 필요한 라이브러리 추가
- web.xml(추가)
<!-- 한글깨짐 방지 -->
<!-- controller 접근시 특정 특정 요청에 대해서 어떤 class와 연결할 것인지 지정 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 인코딩 종류 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 강제 인코딩 여부 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 요청이 왔을때 사용할 필터 명시 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- servlet-context.xml(추가 - 맨 아래 쪽(beans 닫기 전))
<!-- data source -->
<beans:bean name="datasource" class="org.apache.commons.dbcp.BasicDataSource">
<beans:property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mariadb://localhost:3306/mydb"/>
<beans:property name="username" value="web_user"/>
<beans:property name="password" value="pass"/>
</beans:bean>
<!-- mybatis 설정 -->
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 연결할 DB 정보 -->
<beans:property name="dataSource" ref="datasource"/>
<!-- 쿼리문이 있을 장소 -->
<beans:property name="mapperLocations" value="classpath:kr/co/gudi/member/dao/*.xml"/>
</beans:bean>
<!-- mybatis 사용 영역 -->
<mybatis-spring:scan base-package="kr.co.gudi.member.dao"/>
- login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
}
</style>
</head>
<body>
<form action="login.do" method="post">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="id"/></td>
</tr>
<tr>
<th>PW</th>
<td><input type="password" name="pw"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="LOGIN"/>
<input type="button" value="회원가입" onclick="location.href='join.go'"/>
</th>
</tr>
</table>
</form>
</body>
<script>
var msg = "${msg}";
if(msg != ""){
alert(msg);
}
</script>
</html>
- joinForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
}
</style>
</head>
<body>
<form action="join.do" method="post">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="id"/></td>
</tr>
<tr>
<th>PW</th>
<td><input type="text" name="pw"/></td>
</tr>
<tr>
<tr>
<th>NAME</th>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<th>AGE</th>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<tr>
<th>GENDER</th>
<td>
<input type="radio" name="gender" value="남"/>남자
<input type="radio" name="gender" value="여"/>여자
</td>
</tr>
<tr>
<th>E-MAIL</th>
<td><input type="text" name="email"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="회원가입"/>
</th>
</tr>
</table>
</form>
</body>
<script>
var msg = "${msg}";
if(msg != ""){
alert(msg);
}
</script>
</html>
- main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
table,th,td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px
}
#login{
margin-bottom:20px;
}
</style>
</head>
<body>
<jsp:include page="loginBox.jsp"/>
<table>
<thead>
<tr>
<th>ID</th>
<th>NAME</th>
<th>EMAIL</th>
<th>상세보기</th>
<th>삭제</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="member">
<tr>
<td>${member.id}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td><a href="detail.do?id=${member.id}">상세보기</a></td>
<td><a href="del.do?id=${member.id}">삭제</a></td>
<td></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
<script></script>
</html>
- loginBox.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div id="login"></div>
<script>
var loginId="${sessionScope.loginId}";
if(loginId == ""){
alert("로그인이 필요한 서비스입니다.");
location.href="./";
}else{
var content = '안녕하세요 ${sessionScope.loginId}님! <a href="logout">[로그아웃]</a>';
$("#login").html(content);
}
</script>
- detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
}
</style>
</head>
<body>
<jsp:include page="loginBox.jsp"/>
<form action="update.do" method="post">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="id" value="${member.id}" readonly/></td>
</tr>
<tr>
<th>PW</th>
<td><input type="text" name="pw" value="${member.pw}"/></td>
</tr>
<tr>
<tr>
<th>NAME</th>
<td><input type="text" name="name" value="${member.name}"/></td>
</tr>
<tr>
<th>AGE</th>
<td><input type="text" name="age" value="${member.age}"/></td>
</tr>
<tr>
<tr>
<th>GENDER</th>
<td>
<input type="radio" name="gender" value="남"
<c:if test="${member.gender eq '남'}">checked</c:if>
/>남자
<input type="radio" name="gender" value="여"
<c:if test="${member.gender eq '여'}">checked</c:if>
/>여자
</td>
</tr>
<tr>
<th>E-MAIL</th>
<td><input type="text" name="email" value="${member.email}"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="수정"/>
</th>
</tr>
</table>
</form>
</body>
<script>
var msg = "${msg}";
if(msg != ""){
alert(msg);
}
</script>
</html>
- HomeController
package kr.co.gudi.member.controller;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import kr.co.gudi.member.dto.MemberDTO;
import kr.co.gudi.member.service.MemberService;
@Controller
public class HomeController {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired MemberService service;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String main(Model model) {
return "login";
}
//*.go : 해당 주소로 이동 요청
//*.do : 특정 메서드 실행 요청
@RequestMapping(value = "/join.go", method = RequestMethod.GET)
public String joinForm(Model model) {
return "joinForm";
}
@RequestMapping(value = "/join.do", method = RequestMethod.POST)
//@RequestParam : 파라매터 값 받아옴
public String join(Model model, @RequestParam HashMap<String, String> params) {
logger.info("join param : "+params);
String msg = service.join(params);
model.addAttribute("msg",msg);
return "login";
}
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
//HttpSession : web의 session 정보를 가져옴
public String login(Model model, @RequestParam String id, @RequestParam String pw, HttpSession session) {
String page = "login";
//{}에 가져온 파라매터 값을 순서대로 넣어줌
logger.info("id : {} / pw : {}",id,pw);
String loginId = service.login(id,pw);
logger.info("loginId : "+loginId);
if(loginId != null) {
//resp 대신 redirect 해줌
page = "redirect:/list.do";
//session에 저장
session.setAttribute("loginId", loginId);
}else {
//model객체를 이용하여 뷰로 보냄(req.setAttribute 기능)
model.addAttribute("msg","아이디 또는 비밀번호를 확인해주세요.");
}
return page;
}
@RequestMapping(value = "/list.do", method = RequestMethod.GET)
public String list(Model model) {
ArrayList<MemberDTO> list = service.list();
model.addAttribute("list",list);
return "main";
}
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
//session에 저장한 값 삭제
session.removeAttribute("loginID");
return "redirect:/";
}
@RequestMapping(value = "/del.do", method = RequestMethod.GET)
public String del(@RequestParam String id, HttpSession session) {
logger.info("deleteID : ", id);
if(session.getAttribute("loginId") != null) {
service.del(id);
}
return "redirect:/list.do";
}
@RequestMapping(value="/detail.do", method=RequestMethod.GET)
public String detail(@RequestParam String id, Model model) {
String page = "redirect:/list.do";
MemberDTO dto = service.detail(id);
if(dto != null) {
page = "detail";
model.addAttribute("member", dto);
}
return page;
}
@RequestMapping(value = "/update.do", method = RequestMethod.POST)
public String update(Model model, @RequestParam HashMap<String, String> params, HttpSession session) {
logger.info("join param : "+params);
if(session.getAttribute("loginId") != null) {
service.update(params);
}
return "redirect:/detail.do?id="+params.get("id");
}
}
- MemberService
package kr.co.gudi.member.service;
import java.util.ArrayList;
import java.util.HashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import kr.co.gudi.member.dao.MemberDAO;
import kr.co.gudi.member.dto.MemberDTO;
@Service
public class MemberService {
@Autowired MemberDAO dao;
Logger logger = LoggerFactory.getLogger(this.getClass());
public String join(HashMap<String, String> params) {
String msg = "회원가입에 실패하였습니다.";
if(dao.join(params) == 1) {
msg = "회원가입에 성공하였습니다.";
}
return msg;
}
public String login(String id, String pw) {
return dao.login(id,pw);
}
public ArrayList<MemberDTO> list() {
return dao.list();
}
public void del(String id) {
int row = dao.del(id);
logger.info("delete row : "+row);
}
public MemberDTO detail(String id) {
return dao.detail(id);
}
public void update(HashMap<String, String> params) {
int row = dao.update(params);
logger.info("update row: "+row);
}
}
- MemberDAO(Interface)
- xml을 java로 객체화하기 위해 interface로 연결시켜줌
package kr.co.gudi.member.dao;
import java.util.ArrayList;
import java.util.HashMap;
import kr.co.gudi.member.dto.MemberDTO;
public interface MemberDAO {
int join(HashMap<String, String> params);
String login(String id, String pw);
ArrayList<MemberDTO> list();
int del(String id);
MemberDTO detail(String id);
int update(HashMap<String, String> params);
}
- member_mapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- xml을 java에서 쓰기위해 연결되는 interface 가 필요 -->
<!-- MemberDAO 주소로 연결 -->
<mapper namespace="kr.co.gudi.member.dao.MemberDAO">
<insert id="join" parameterType="hashmap">
INSERT INTO member(id,pw,name,age,gender,email)
VALUES(#{id},#{pw},#{name},#{age},#{gender},#{email})
</insert>
<select id="login" resultType="String">
SELECT id FROM member WHERE id = #{param1} AND pw = #{param2}
</select>
<select id="list" resultType="kr.co.gudi.member.dto.MemberDTO">
SELECT * FROM member
</select>
<delete id="del">
DELETE FROM member WHERE id = #{param1}
</delete>
<select id="detail" resultType="kr.co.gudi.member.dto.MemberDTO">
SELECT * FROM member WHERE id = #{param1}
</select>
<update id="update" parameterType="hashmap">
UPDATE member SET pw = #{pw}, name = #{name} ,age = #{age}, gender = #{gender}, email = #{email}
WHERE id = #{id}
</update>
</mapper>
- MemberDTO(Bean 역할)
package kr.co.gudi.member.dto;
public class MemberDTO {
private String id;
private String pw;
private String name;
private int age;
private String gender;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
'코딩도전기 > Spring' 카테고리의 다른 글
CODO Day44_Spring(PhotoBoard) (0) | 2023.04.04 |
---|---|
CODO Day43_Spring(FileService) (0) | 2023.04.03 |
CODO Day42_Spring(BoardApp) (0) | 2023.03.31 |
CODO Day40_Spring(MyBatis) (0) | 2023.03.28 |
CODO Day39_Spring(DB 연결) (0) | 2023.03.28 |