💡
servlet-name: memberapp
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns ="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id ="WebApp_ID" version ="3.0" >
<display-name > 03_MemberTest</display-name >
<servlet >
<servlet-name > memberapp</servlet-name >
<servlet-class > org.springframework.web.servlet.DispatcherServlet</servlet-class >
</servlet >
<servlet-mapping >
<servlet-name > memberapp</servlet-name >
<url-pattern > *.me</url-pattern >
</servlet-mapping >
<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 >
</filter >
<filter-mapping >
<filter-name > encodingFilter</filter-name >
<url-pattern > /*</url-pattern >
</filter-mapping >
<welcome-file-list >
<welcome-file > index.html</welcome-file >
<welcome-file > index.htm</welcome-file >
<welcome-file > index.jsp</welcome-file >
<welcome-file > default.html</welcome-file >
<welcome-file > default.htm</welcome-file >
<welcome-file > default.jsp</welcome-file >
</welcome-file-list >
</web-app >
💡
WEB-INF 폴더 내에서 마우스 우클릭-New-Spring-Spring Bean Configuration File 로 생성한다. 앞서 <servlet-name>memberapp</servlet-name>
코드가 있으므로 파일명도 동일하게 시작한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context ="http://www.springframework.org/schema/context"
xmlns:util ="http://www.springframework.org/schema/util"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd" >
<context:component-scan base-package ="com.member" />
<bean id ="viewResolver" class ="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name ="prefix" value ="WEB-INF/jsp/" > </property >
<property name ="suffix" value =".jsp" > </property >
</bean >
<bean id ="ds" class ="org.springframework.jndi.JndiObjectFactoryBean" >
<property name ="jndiName" >
<value > jdbc/spring</value >
</property >
<property name ="resourceRef" value ="true" > </property >
</bean >
<bean id ="template" class ="org.springframework.jdbc.core.JdbcTemplate" >
<property name ="dataSource" ref ="ds" > </property >
</bean >
</beans >
META-INF 내의 context.xml에 코드 추가
<Resource name="jdbc/spring" auth="Container"
type ="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="scott" password="1234"
maxTotal="20" maxIdle="20"
maxWaitMillis="-1"
/>
SQL 디벨로퍼에서 테이블 생성
컬럼명: id/pass/name/addr/memo/reg_date
컨트롤러 생성
💡
src내에 com.member.controller 패키지 생성하고 하위에
MemberController.java 클래스 파일 생성. @Controller 어노테이션과 @Autowired 어노테이션 포함.
package com.member.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.servlet.ModelAndView;
import com.member.model.MemberDAOImpl;
import com.member.model.MemberDTO;
@Controller
public class MemberController {
@Autowired
private MemberDAOImpl dao;
@RequestMapping(value="member_insert.me" ,method=RequestMethod.GET)
public String insert() {
return "memberForm" ;
}
@RequestMapping(value="member_insert.me" ,method=RequestMethod.POST)
public String insert(MemberDTO user) {
dao.insert(user);
return "redirect:member_list.me" ;
}
@RequestMapping("member_list.me" )
public String memberList(Model model, String id) {
List<MemberDTO> memberlist=dao.getMemberList();
model.addAttribute("memberlist" , memberlist);
return "memberList" ;
}
@RequestMapping("member_view.me" )
public String view (Model model, String id) {
MemberDTO m=dao.findById(id);
model.addAttribute("member" ,m);
return "memberView" ;
}
@RequestMapping(value="member_update.me" , method=RequestMethod.GET)
public String update(Model model, String id) {
MemberDTO m=dao.findById(id);
model.addAttribute("user" ,m);
return "updateForm" ;
}
@RequestMapping(value="member_update.me" , method=RequestMethod.POST)
public String update(MemberDTO user) {
dao.update(user);
return "redirect:member_list.me" ;
}
@RequestMapping("member_delete.me" )
public String delete(String id) {
dao.delete(id);
return "redirect:member_list.me" ;
}
}
💡
테이블의 컬럼명과 동일하게 객체들을 생성하고 getter, setter 구현
package com.member.model;
import org.springframework.stereotype.Component;
@Component
public class MemberDTO {
private String id;
private String pass;
private String name;
private String addr;
private String memo;
private String reg_date;
public String getId ( ) {
return id;
}
public void setId (String id ) {
this .id = id;
}
public String getPass ( ) {
return pass;
}
public void setPass (String pass ) {
this .pass = pass;
}
public String getName ( ) {
return name;
}
public void setName (String name ) {
this .name = name;
}
public String getAddr ( ) {
return addr;
}
public void setAddr (String addr ) {
this .addr = addr;
}
public String getMemo ( ) {
return memo;
}
public void setMemo (String memo ) {
this .memo = memo;
}
public String getReg_date ( ) {
return reg_date;
}
public void setReg_date (String reg_date ) {
this .reg_date = reg_date;
}
}
package com.member.model;
import java.util.List;
public interface MemberDAO {
public void insert (MemberDTO user) ;
public List<MemberDTO> getMemberList () ;
public MemberDTO findById (String id) ;
public void update (MemberDTO user) ;
public void delete (String id) ;
}
db연동에 필요한 메소드 구현
package com.member.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class MemberDAOImpl implements MemberDAO {
@Autowired
private JdbcTemplate template;
public void insert (MemberDTO user ) {
String sql="insert into springmember values(?,?,?,?,?,sysdate)" ;
Object []param=new Object [] {
user.getId(), user.getPass(), user.getName(), user.getAddr(), user.getMemo()
};
template.update(sql, param);
}
public List<MemberDTO> getMemberList ( ) {
String sql="select * from springmember" ;
List<MemberDTO> memberlist=template.query(sql, new RowMapper<MemberDTO>() {
@Override
public MemberDTO mapRow(ResultSet rs, int arg1) throws SQLException {
MemberDTO m=new MemberDTO();
m.setId(rs.getString("id" ));
m.setPass(rs.getString("pass" ));
m.setName(rs.getString("name" ));
m.setAddr(rs.getString("addr" ));
m.setMemo(rs.getString("memo" ));
m.setReg_date(rs.getString("reg_date" ));
return m;
}
});
return memberlist;
}
public MemberDTO findById (String id ) {
String sql="select * from springmember where id='" +id+"'" ;
MemberDTO m=template.queryForObject(sql, new RowMapper<MemberDTO>() {
@Override
public MemberDTO mapRow(ResultSet rs, int arg1) throws SQLException {
MemberDTO user=new MemberDTO();
user.setAddr(rs.getString("addr" ));
user.setId(rs.getString("id" ));
user.setMemo(rs.getString("memo" ));
user.setName(rs.getString("name" ));
user.setPass(rs.getString("pass" ));
user.setReg_date(rs.getString("reg_date" ));
return user;
}
});
return m;
}
public void update (MemberDTO user ) {
String sql="update springmember set pass=?, name=?, addr=?, memo=? where id=?" ;
Object [] param=new Object [] {
user.getPass(), user.getName(), user.getAddr(), user.getMemo(), user.getId()
};
template.update(sql, param);
}
public void delete (String id ) {
String sql="delete from springmember where id='" +id+"'" ;
template.update(sql);
}
}
JSP 파일 생성
💡
index.jsp 실행 후 회원입력 링크 <a href="member_insert.me">
를 누르면 회원가입 폼으로 이동한다.
index.jsp (WebContent 폴더 내에 생성)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html >
<head >
<meta charset ="UTF-8" >
<title > Insert title here</title >
</head >
<body >
<a href ="member_insert.me" > [회원입력]</a >
<a href ="member_list.me" > [회원전체보기]</a >
</body >
</html >
💡
MemberController.java에 @RequestMapping
어노테이션으로 value=member_insert.me
를 적고 method=RequestMethod.GET
혹은 method=RequestMethod.POST
방식으로 구분하여 단순히 폼으로 이동 memberForm
하는 건지 db에 회원정보가 입력 dao.insert(user)
되도록 하는 건지 분리되어 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html >
<head >
<meta charset ="UTF-8" >
<title > Insert title here</title >
</head >
<body >
<h2 > 회원가입</h2 >
<form action ="member_insert.me" method ="post" >
<table >
<tr >
<td > 아이디</td >
<td > <input type ="text" name ="id" id ="id" > </td >
</tr >
<tr >
<td > 비밀번호</td >
<td > <input type ="password" name ="pass" id ="pass" > </td >
</tr >
<tr >
<td > 성명</td >
<td > <input type ="text" name ="name" id ="name" > </td >
</tr >
<tr >
<td > 주소</td >
<td > <input type ="text" name ="addr" id ="addr" > </td >
</tr >
<tr >
<td > 메모</td >
<td > <textarea rows ="5" cols ="25" name ="memo" id ="memo" > </textarea > </td >
</tr >
<tr >
<td colspan ="2" align ="center" >
<input type ="submit" value ="가입" >
<input type ="reset" value ="취소" > </td >
</tr >
</table >
</form >
</body >
</html >
💡
insert되고 나면 "redirect:member_list.me";
에 의해 회원 전체보기 jsp로 이동한다.
<%@ 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 > Insert title here</title >
</head >
<body >
<a href ="member_insert.me" > 추가하기</a > /전체보기<br />
<c:forEach items ="${memberlist}" var ="member" >
아이디: <a href ="member_view.me?id=${member.id}" > ${member.id}</a > <br />
비밀번호: ${member.pass}<br />
성명: ${member.name}<br />
주소: ${member.addr}<br />
메모: ${member.memo}<br />
가입일: ${member.reg_date}<br /> <br />
</c:forEach >
</body >
</html >
💡
memberList.jsp에서 아이디에 링크를 걸어서 회원 정보 상세보기를 할 수 있다.
<%@ 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 > Insert title here</title >
</head >
<body >
<h3 > 상세보기</h3 >
아이디: ${member.id}<br />
비밀번호: ${member.pass}<br />
성명: ${member.name}<br />
주소: ${member.addr}<br />
메모: ${member.memo}<br />
가입일: ${member.reg_date}<br /> <br />
<input type ="button" value ="수정" onclick ="location.href='member_update.me?id=${member.id}'" >
<input type ="button" value ="삭제" onclick ="location.href='member_delete.me?id=${member.id}'" >
</body >
</html >
💡
수정 버튼을 누르면 member_update.me
로 이동한다. 수정할 수 있는 (input type이 살아있는) 폼 양식으로 이동한다.
<%@ 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 > Insert title here</title >
<script src ="https://code.jquery.com/jquery-3.5.1.min.js" > </script >
</head >
<body >
<h2 > 개인정보 수정</h2 >
<form action ="member_update.me" method ="post" >
<input type ="hidden" name ="id" id ="id" value ="${user.id}" >
<table >
<tr >
<td > 아이디</td >
<td > ${user.id}</td >
</tr >
<tr >
<td > 비밀번호</td >
<td > <input type ="password" name ="pass" id ="pass" value ="${user.pass}" > </td >
</tr >
<tr >
<td > 성명</td >
<td > <input type ="text" name ="name" id ="name" value ="${user.name}" > </td >
</tr >
<tr >
<td > 주소</td >
<td > <input type ="text" name ="addr" id ="addr" value ="${user.addr}" > </td >
</tr >
<tr >
<td > 메모</td >
<td > <textarea rows ="5" cols ="25" name ="memo" id ="memo" > ${user.memo}</textarea > </td >
</tr >
<tr >
<td colspan ="2" align ="center" >
<input type ="submit" value ="확인" >
<input type ="reset" value ="취소" > </td >
</tr >
</table >
</form >
</body >
</html >
💡
확인 submit을 누르면 member_update.me
로 이동한다. db에 회원정보가 변경되는 것이다. 변경된 후에는 회원 전체보기로 redirect한다.