spring - 스프링, 마이바티스 연동

오늘·2021년 6월 2일
0

웹 페이지 연습

목록 보기
25/35

스프링-마이바티스 연동 xml 파일 설정

파일 구조

WEB-INF.confing - action-mybatis.xml / action-service.xml / jdbc.properties
WEB-INF - action-servlet.xml / web.xml

web.xml

애플리케이션 실행 시 여러 설정 파일들을 알려주는 곳이다.

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

	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- 마이바티스 설정 파일 읽어들이기 -->
		<param-value>
          /WEB-INF/config/action-mybatis.xml
          /WEB-INF/config/action-service.xml
		</param-value>
	</context-param>
</web-app>

action-servlet.xml

뷰 관련 빈과 각각의 URL 요청명에 대해 호출할 메소드들을 설정한다

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- viewResolver : 컨트롤러의 처리 결과를 전달할 뷰 지정-->
	<!-- InternalResourceViewResolver : 내부 자원을 이용해서 뷰를 생성하는 클래스 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/views/member/" />
		<property name="suffix" value=".jsp"/>
	</bean>
	
	<!-- class : 개발자가 불러올 컨트롤러의 경로를 적어주면 된다 -->
   <bean id="memberController" 
   		class="com.spring.member.controller.MemberControllerImpl">
      <property name="methodNameResolver">
         <ref local="memberMethodResolver"/>
      </property>
      <property name="memberService" ref="memberService"/>
   </bean>
   
   
   <bean  id="memberMethodResolver"
   		class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver" >
   		<property  name="mappings" >
   			<props>
   				<prop key="/member/listMembers.do" >listMembers</prop>
   				<prop key="/member/addMember.do" >addMember</prop>
   				<prop key="/member/removeMember.do">removeMember</prop>
   				<prop key="/member/memberForm.do" >form</prop>
   			</props>
   		</property>
   	</bean>
   	
   <bean id="memberUrlMapping"
       class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="mappings">
         <props>
            <prop key="/member/*.do">memberController</prop>
         </props>
      </property>
   </bean>   
</beans>

config/action-mybatis.xml

  • 마이바티스에서 SqlMapConfig.xml의 역할을 하는 곳이다
  • 스프링에서 마이바티스 관련 클래스를 파일에서 설정하여, 빈들을 자동으로 생성한다
<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
 
 	<!-- propertyPlaceholderConfigurer 클래스를 이용해서
 		데이터베이스 설정 관련 정보를 jdbc.properties 파일에서 읽어온다 -->
	<bean id="propertyPlaceholderConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>/WEB-INF/config/jdbc.properties</value>
		</property>
	</bean>
	
	
	<!-- 마이바티스에서 제공하는 PooledDataSource 클래스를 이용해서
		dataSource 빈을 생성한다 -->
	<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
		<property name="driver" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	
	<!-- SqlSessionFactioryBean 클래스를 이용해서 dataSource 속성에 dataSource 빈을 설정 -->
  	<!-- java 처럼 표현하자면
		SqlSessionTemplate sqlSession
			= new SqlSessionTemplate(sqlSessionFactory) -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      		<!-- ref : 사용할 다른 빈의 id가 들어간다 -->
		<property name="dataSource" ref="dataSource" />
		<!-- configLoation 속성에 modelConfig.xml을 설정한다 -->
		<property name="configLocation" value="classpath:mybatis/model/modelConfig.xml" />
		<!-- mapperLocations 속성에 mybatis/mappers 패키지의 모든 매퍼 파일을 읽어와 설정 -->
		<property name="mapperLocations" value="classpath:mybatis/mappers/*.xml" />
	</bean>
	
	
	<!-- SqlSessionTemplate 클래스를 이용해 sqlSession 빈을 생성한다 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
	</bean>
	
	
	<bean id="memberDAO" class="com.spring.member.dao.MemberDAOImpl">
		<!-- sqlSession 빈을 memberDAO 빈 속성에 주입 -->
		<property name="sqlSession" ref="sqlSession"></property>
	</bean>
</beans>

config/action-service.xml

MemberDAO 빈을 사용할 memberService 빈을 설정

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	<bean id="memberService" class="com.spring.member.service.MemberServiceImpl">
      		<!-- memberDAO 빈을 memberService 빈의 속성에 주입 -->
		<property name="memberDAO" ref="memberDAO"/>
	</bean>   
</beans>

member.xml

회원 관련 SQL 문이 있는 매퍼 파일. sql문의 작성은 아래 와 같다

  <![CDATA[
    	여기에 sql문을 넣어주면 된다
	예를 들어 이름에 '희'가 포함된 단어를 검색하겠다
	select * from t_member where name like '%희%';
  ]]>

xml 코드

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

<mapper namespace="mapper.member">
	<resultMap id="memResult" type="memberVO">
		<result property="id" column="id" />
        <result property="pwd" column="pwd" />
        <result property="name" column="name" />
        <result property="email" column="email" />
        <result property="joinDate" column="joinDate" />
	</resultMap>

	<select id="selectAllMemberList" resultMap="memResult">
      <![CDATA[
         select * from t_member	order by joinDate desc	 	
      ]]>
	</select>

	<select id="selectName" resultType="String">
    <![CDATA[
	select name from t_member
	where id = 'hong'			
    ]]>
	</select>
	
	<select id="selectPwd" resultType="int" >
	  <![CDATA[ 
	    select pwd from t_member 
	    where id = 'hong'
	 ]]>
	 </select> 
	 
	<select id="selectMemberById" resultType="memberVO"  parameterType="String" >
      <![CDATA[
         select * from t_member
         where
         id=#{id}			
      ]]>
	 </select>	
	
	<select id="selectMemberByPwd" resultMap="memResult"  parameterType="int" >
      <![CDATA[
         select * from t_member
         where
         pwd = #{pwd}			
      ]]>
    </select>
    
     <insert id="insertMember"  parameterType="memberVO">
		<![CDATA[
		 insert into t_member(id,pwd, name, email)
		 values(#{id}, #{pwd}, #{name}, #{email})
		]]>      
	</insert>
	
	<insert id="insertMember2"  parameterType="java.util.HashMap">
		<![CDATA[
			 insert into t_member(id,pwd, name, email)
			 values(#{id}, #{pwd}, #{name}, #{email})
		]]>      
   </insert>
   
   <update id="updateMember"  parameterType="memberVO">
     <![CDATA[
	     update t_member
	     set pwd=#{pwd}, name=#{name}, email=#{email}
	     where
	     id=#{id}
      ]]>      
   </update> 
     
   <delete id="deleteMember"  parameterType="String">
	<![CDATA[
	   delete from  t_member
	   where
	   id=#{id}
	]]>      
  </delete>
	
	
	<!-- 동적 SQL문 -->
  <select id="searchMember" parameterType="memberVO" resultMap="memResult">
      <![CDATA[
          select * from t_member
      ]]>
      <where>
         <if test=" name != ''  and  name != null">
            name=#{name}
         </if>
         <if test="email != ''  and email != null ">
           and email = #{email}
         </if>
      </where>
      order by joinDate desc
  </select>
   
   <select id="foreachSelect" resultMap="memResult" parameterType="java.util.Map">
      <![CDATA[
        select * from t_member 
          
      ]]>
      
      where name in
      <foreach item="item" collection="list" open="(" separator="," close=")" >
         #{item}
      </foreach>
      order by joinDate desc
   </select>
   
   <insert id="foreachInsert"  parameterType="java.util.Map">
      <foreach item="item"  collection="list"   open="INSERT ALL" separator=" " close="SELECT * FROM DUAL" >
          INTO  t_member(id, pwd, name, email)
          VALUES  (#{item.id},
                    #{item.pwd},
                    #{item.name},
                    #{item.email})
      </foreach>
   </insert>
   
   <select id="selectLike" resultMap="memResult"  parameterType="String" >
      <![CDATA[
         select * from t_member
         where
         name like '%' || #{name} || '%'		
      ]]>
    </select>
</mapper>

mybatis/model/modelConfig.xml

<typeAlias> 태그를 이용해 매퍼 파일에서 긴 이름의 클래스를 별칭으로 사용할 수 있게끔 설정한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration 	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
	
<configuration>
	<!-- <typeAliases> 태그로 마이바티스에서 데이터 전달에 사용될 memberVO 빈을 설정한다 -->
	<typeAliases>
		<typeAlias type="com.spring.member.vo.MemberVO" alias="memberVO"/>
	</typeAliases>
</configuration>

자바 클래스와 jsp 파일 구현하기

파일 구조

MemberController.java

package com.spring.member.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

public interface MemberController {
	
	public ModelAndView listMembers(HttpServletRequest request,
			HttpServletResponse response) throws Exception;
	
	public ModelAndView addMember(HttpServletRequest request,
			HttpServletResponse response) throws Exception;
	
	public ModelAndView removeMember(HttpServletRequest request,
			HttpServletResponse response) throws Exception;
}

MemberControllerImpl.java

컨트롤러 역할을 하는 클래스.
memberService 속성에 빈을 주입하기 위해 setter를 구현한다

package com.spring.member.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.spring.member.service.MemberService;
import com.spring.member.vo.MemberVO;

public class MemberControllerImpl extends MultiActionController implements MemberController {
	private MemberService memberService;
	
	
	// memberService 빈을 주입하기 위해 setter 구현
	public void setMemberService(MemberServiceImpl memberService) {
		this.memberService = memberService;
	}
	
	
	@Override
	public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String viewName = getViewName(request);
		List membersList = memberService.listMembers();
		ModelAndView mav = new ModelAndView(viewName);
		// 조회한 회원 정보를 ModelAndView의 addObject() 메소드를 이용해 바인딩한다
		mav.addObject("membersList", membersList);
		
		return mav;
	}
	
	
	// 파일 이름 가져오기ㅣ
	private String getViewName(HttpServletRequest request) throws Exception {
		String contextPath = request.getContextPath();
		String uri = (String) request.getAttribute("javax.servlet.include.request_uri");
		if (uri == null || uri.trim().equals("")) {
			uri = request.getRequestURI();
		}

		int begin = 0;
		if (!((contextPath == null) || ("".equals(contextPath)))) {
			begin = contextPath.length();
		}

		int end;
		if (uri.indexOf(";") != -1) { end = uri.indexOf(";"); }
		else if (uri.indexOf("?") != -1) { end = uri.indexOf("?"); }
		else { end = uri.length(); }

		String fileName = uri.substring(begin, end);
		if (fileName.indexOf(".") != -1) {
			fileName = fileName.substring(0, fileName.lastIndexOf("."));
		}
		if (fileName.lastIndexOf("/") != -1) {
			fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length());
		}
		
		return fileName;
	}

	
	// 새로운 회원 삽입하기
	@Override
	public ModelAndView addMember(HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		MemberVO memberVO = new MemberVO();
		
		// 회원 가입창에서 전송된 회원 정보를 bind() 메소드를 이용해 memberVO 해당 속성에 자동으로 설정
		bind(request, memberVO);
		
		int result = 0;
		result = memberService.addMember(memberVO);
		// 회원정보 추가 후 ModelAndView 클ㄹ스의 redirect 속성을 이용
		// /member/listMembers.do로 리다이렉트 한다
		ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do");
		
		return mav;
	}
	
	
	
	// 회원 삭제 코드
	@Override
	public ModelAndView removeMember(HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("id");
		memberService.removeMember(id);
		// 회원정보를 삭제하고 회원 목록 창으로 리다이렉트 하겠다
		ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do");
		
		return mav;
	}
	
	
	// 데이터베이스 연동 작업이 없는 입력창 요청시. 뷰 이름만 ModelAndView로 반환한다
	public ModelAndView form(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String viewName = getViewName(request);
		ModelAndView mav = new ModelAndView();
		mav.setViewName(viewName);
		return mav;
	}
}

MemberService.java

인터페이스

package com.spring.member.service;

import java.util.List;

import org.springframework.dao.DataAccessException;
import com.spring.member.vo.MemberVO;

public interface MemberService {
	 public List listMembers() throws DataAccessException;
	 public int addMember(MemberVO membeVO) throws DataAccessException;
	 public int removeMember(String id) throws DataAccessException;
}

MemberServiceImpl.java

memberDAO에 memberDAO 빈을 넣기 위해 setter 구현

package com.spring.member.service;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.spring.member.dao.MemberDAO;
import com.spring.member.vo.MemberVO;

public class MemberServiceImpl implements MemberService {
	private MemberDAO memberDAO;
	
	// 속성 memberDAO에 memberDAO 빈을 넣기 위해 setter 구현
	public void setMemberDAO(MemberDAO memberDAO){
		this.memberDAO = memberDAO;
	}
	
	// 데이터 베이스 안의 전체자료 보여주기
	@Override
	public List listMembers() throws DataAccessException {
		List membersList = null;
		membersList = memberDAO.selectAllMemberList();
		return membersList;
	}
	
	
	// 새로운 회원 추가
	@Override
	public int addMember(MemberVO membeVO) throws DataAccessException {
		return memberDAO.insertMember(memberVO);
	}
	
	
	// 회원 삭제
	@Override
	public int removeMember(String id) throws DataAccessException {
		return memberDAO.deleteMember(id);
	}
}

memberDAO.java

인터페이스

package com.spring.member.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.spring.member.vo.MemberVO;

public interface MemberDAO {
	public List selectAllMemberList() throws DataAccessException;
	public int insertMember(MemberVO memberVO) throws DataAccessException ;
	public int deleteMember(String id) throws DataAccessException;
}

memberDAOImpl.java

  • 설정 파일에서 만든 sqlSession 빈을 속성 sqlSession에 주입하기 위해 setter를 구현하고
  • sqlSession 빈의 메소드를 이용해 매퍼 파일에 정의된 sql문을 사용하는 곳
package com.spring.member.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.dao.DataAccessException;

import com.spring.member.vo.MemberVO;

public class MemberDAOImpl implements MemberDAO {
	private SqlSession sqlSession;
	// setter
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	
	@Override
	public List selectAllMemberList() throws DataAccessException {
		List<MemberVO> membersList = null;
		// 주입된 sqlSession 빈으로 selectList() 메소드를 호출
		// Sql문에 id를 전달한다
		membersList = sqlSession.selectList("mapper.member.selectAllMemberList");
		return membersList;
	}
	
	
	@Override
	public int insertMember(MemberVO memberVO) throws DataAccessException {
		// 주입된 sqlSession 빈으로 insert() 메소드를 호출
		// sql문에 id와 memberVO를 전달한다
		int result = sqlSession.insert("mapper.member.insertMember", memberVO);
		return result;
	}
	
	
	@Override
	public int deleteMember(String id) throws DataAccessException {
		// 주입된 sqlSession 빈으로 delete() 메소드를 호출
		// sql문에 id와 회원 id를 전달
		int result =  sqlSession.delete("mapper.member.deleteMember", id);
		return result;
	}
}

MemberVO.java

기본 정보가 왔다갔다 하는 곳

package com.spring.member.vo;

import java.sql.Date;

public class MemberVO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	
	public MemberVO(){}
	public MemberVO(String id, String pwd, String name, String email) {
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getJoinDate() {
		return joinDate;
	}
	public void setJoinDate(Date joinDate) {
		this.joinDate = joinDate;
	}
}

listMembers.jsp

회원 목록창에서 회원 정보를 표시하면서 삭제하기 링크 추가

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원 정보 출력창</title>
</head>
<body>
	<table border="1"  align="center"  width="80%">
    	<tr align="center"   bgcolor="lightgreen">
    		<td ><b>아이디</b></td>
    		<td><b>비밀번호</b></td>
    		<td><b>이름</b></td>
    		<td><b>이메일</b></td>
    		<td><b>가입일</b></td>
    		<td><b>삭제</b></td>
    	</tr>
    	
    	<c:forEach var="member" items="${membersList}" >     
    	<tr align="center">
    		<td>${member.id}</td>
    		<td>${member.pwd}</td>
    		<td>${member.name}</td>
    		<td>${member.email}</td>
    		<td>${member.joinDate}</td>
    		<!-- 삭제하기 선택시 /member/removeMember.do로 요청한다 -->
    		<td><a href="${contextPath}/member/removeMember.do?id=${member.id }">삭제하기</a></td>
    	</tr>
    	</c:forEach>
    </table>
    <!-- 회원가입 선택시 /member/memberForm.do로 요청 -->
    <a  href="${contextPath}/member/memberForm.do"><h1 style="text-align:center">회원가입</h1></a>
</body>
</html>

memberForm.jsp

회원가입창에서 정보 입력하면 그 값을 /member/addMember.do로 전송

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>

<style>
.text_center {
	text-align: center;
}
</style>

</head>
<body>
	<form method="post" action="${contextPath}/member/addMember.do">
		<h1 class="text_center">회원 가입창</h1>
		<table align="center">
			<tr>
				<td width="200"><p align="right">아이디</td>
				<td width="400"><input type="text" name="id"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">비밀번호</td>
				<td width="400"><input type="password" name="pwd"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">이름</td>
				<td width="400"><p>
						<input type="text" name="name"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">이메일</td>
				<td width="400"><p>
						<input type="text" name="email"></td>
			</tr>
			<tr>
				<td width="200"><p>&nbsp;</p></td>
				<td width="400"><input type="submit" value="가입하기"><input
					type="reset" value="다시입력"></td>
			</tr>
		</table>
	</form>
</body>

modMember.jsp

회원 정보 수정할거 입력하는 곳

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%  request.setCharacterEncoding("UTF-8"); %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 수정창</title>

<style>
.text_center {
	text-align: center;
}
</style>

</head>
<body>
	<form method="post" action="${contextPath}/member/modMember.do">
		<h1 class="text_center">회원 정보 수정창</h1>
		<table align="center">
			<tr>
				<td width="200"><p align="right">아이디</td>
				<td width="400"><input type="text" name="id"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">비밀번호</td>
				<td width="400"><input type="password" name="pwd"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">이름</td>
				<td width="400"><p>
						<input type="text" name="name"></td>
			</tr>
			<tr>
				<td width="200"><p align="right">이메일</td>
				<td width="400"><p>
						<input type="text" name="email"></td>
			</tr>
			<tr>
				<td width="200"><p>&nbsp;</p></td>
				<td width="400"><input type="submit" value="수정하기"><input
					type="reset" value="다시입력"></td>
			</tr>
		</table>
	</form>
</body>
</html>

실행

널포인트 에러. 추후에 다시 작성해봐야겠음
바보같이 jdbc.properties 이걸 작성안해놓고 실행돌리고 있었다. 오라클이랑 연결하는 부분을 안해놓고 왜 연결안되는거지 하고 있었으니ㅎㅎ

http://localhost:8700/pro24/member/listMembers.do 로 검색해서 실행하면 아래와 같이 전체 목록이 뜬다

만약 삭제하기 버튼을 누른다면 해당 컬럼이 아예 사라지며 (아래 사진은 'hong', '123', '김유신'....) 을 삭제한 사진

회원가입 버튼을 누르면 아래와 같이 작성 창으로 연결된다

작성 후

가입하기를 누르면 값이 들어간 것을 확인할 수 있다(형광펜 표시해놓은 곳)

0개의 댓글