Spring MVC 


회원관리 시스템 구축 



오늘은

 지난번에 했던 

Spring MVC 루트컨테이너 등록하기에 이어  회원관리 웹 사이트를 구축해보겠습니당!


화면 구성 


- 로그인 페이지 : 아이디와 비밀번호를 입력하고 로그인 요청이나 회원가입 요청을 할 수 있음 


- 메인 페이지 : 로그인한 사용자의 정보를 출력 

    이 페이지에서 로그아웃요청과 모든회원보기페이지요청, 회원수정페이지 요청을 할 수 있음


- 회원가입 페이지: 회원 정보를 입력하고 가입신청을 할 수 있음 


- 모든 회원 정보 보기 페이지: 모든 회원들의 정보를 열람할 수 있음 


- 회원 수정 페이지: 현재 로그인한 회원의 정보를 수정 할 수 있음 





사용자가 보낼 수 있는 요청들 


- main.do : 메인페이지를 달라는 요청


- loginForm.do :로그인 페이지를 달라는 요청


- login.do:로그인처리를 해달라는 요청(id, pw가 파라미터)


- logout.do : 로그아웃해달라는 요청


- join.do : 회원가입 처리를 해달라는 요청 (회원정보들이 파라미터) 


- memberUpdateForm.do : 회원 수정 폼을 달라는 요청


- memberUpdate.do : 회원 수정 처리를 해달라는 요청


- memberList.do : 모든 회원보기 페이지를 달라는 요청 







먼저 

설정파일부터 

세팅하겠습니당! 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Spring_member</display-name>
  <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>
  <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener
    <context-param>
        <param-name>contextConfiguration</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param
</web-app>
cs


web.xml에 

servlet을 설정해줍니당 

이름은 

dispatcher로 해서 따로 이름변경코드는 안적었습니당! 

ContextLoaderListener을 사용해서 

루트컨테이너로!


1
2
3
4
5
6
7
8
9
10
11
12
13
<?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"
    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-4.1.xsd">
    <context:component-scan base-package="controller"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="jsp/"/>
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
 
cs


dispatcher-servlet.xml을 설정해주고요! 

context-scan을 사용해서 

쭉 읽어들일 수 있도록! 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    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-4.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
 
    <context:component-scan base-package="service"/>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost/xe"></property>
        <property name="username" value="root"></property>
        <property name="password" value="mysql"></property>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath*:dao/mapper/**/*.xml"></property>
    </bean>
    <bean id="memberDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        <property name="mapperInterface" value="dao.IMemberDao"></property>
    </bean>
 
</beans>
 
cs


applicationContext.xml(루트컨테이너설정) 

annotation방식으로 사용하기 위해 service패키지를 스캔하는것입니당 

dataSource는 DB접속

sqlSessionFactory는 sqsl커넥션연결

memberDao는 매핑시켜줍니당 


 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package commons;
 
public class Constant {
    public static class Board{
        public static String NUM="num";
        public static String NAME="name";
        public static String PASS="pass";
        public static String CONTENT="content";
        public static String EMAIL="email";
        public static String READCOUNT="readCount";
        public static String WRITEDATE="writedate";
        public static String TITLE="title";
        
    }
    public static class Member{
        public static String NAME="name";
        public static String USERID="userid";
        public static String PWD="pwd";
        public static String EMAIL="email";
        public static String PHONE="phone";
        public static String ADMIN="admin";
    }
}
 
cs



우선 commons 패키지에 

Constant 클래스 내에 

Board와 Member를 만들어줍니당 



1
2
3
4
5
6
7
8
9
10
11
12
13
package dao;
 
import java.util.HashMap;
import java.util.List;
 
public interface IMemberDao {
    public int insertMember(HashMap<String, Object> params);
    public int updateMember(HashMap<String, Object> params);
    public int deleteMember(String id);
    public HashMap<String, Object> selectOne(String id);
    public List<HashMap<String, Object>> selectAll();
}
 
cs


dao 패키지내에 

IMemberDao 인터페이스를 만들어줍니당 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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="dao.IMemberDao">
    <insert id="insertMember" parameterType="java.util.HashMap">
        insert into member values(
        #{name}, #{userid}, #{pwd}, #{email}, #{phone},#{admin})
    </insert>
    <update id="updateMember" parameterType="java.util.HashMap">
        update member set
        name = #{name}, pwd = #{pwd},
        email = #{email}, phone = #{phone}, admin = #{admin}
        where userid = #{userid}
    </update>
    <delete id="deleteMember" parameterType="String">
        delete from member where userid = #{userid}
    </delete>
    <select id="selectOne" parameterType="String" resultType="java.util.HashMap">
        select * from member where userid = #{userid}
    </select>
    <select id="selectAll" resultType="java.util.HashMap">
        select * from member
    </select>
</mapper>
 
cs


dao 패키지내에 

mapper패키지를 만들어주고 

memberMapper.xml을 만들어줍니다 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package service;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import commons.Constant;
import dao.IMemberDao;
 
@Service
public class MemberService {
    @Autowired
    private IMemberDao memberDao;
 
    
    public String getData(){
        return "I am a boy";
    }
    public List<HashMap<String, Object>> selectAll() {
        return memberDao.selectAll();
    }
 
//    public void joinMember(String id, String pwd, String pwd_Check, String name, String email, String phone, String admin){
//        HashMap<String, Object> params = new HashMap<String,Object>();
//        
//        if(pwd.equals(pwd_Check))
//        {
//            params.put(Constant.Member.USERID, id);
//            params.put(Constant.Member.PWD, pwd);
//            params.put(Constant.Member.NAME, name);
//            params.put(Constant.Member.EMAIL, email);
//            params.put(Constant.Member.PHONE, phone);
//            params.put(Constant.Member.ADMIN, admin);
//            memberDao.insertMember(params);
//        }
//        
//    }
    
    public void joinMember(HashMap<String, Object> params){
        
        if(params.get("pwd").equals(params.get("pwd_CHECK")))
        {
            memberDao.insertMember(params);
        }
    }
    
    
    public boolean login(String id, String pwd){
        HashMap<String, Object> result = memberDao.selectOne(id);
        if(result == null)
            return false;
        else 
        {
            String oPwd = (String) result.get(Constant.Member.PWD);
            if(oPwd==null)
                return false;
            else{
                if(oPwd.equals(pwd))
                    return true;
                else
                    return false;
            }
            
        }
    }
    
    //회원 한명의 정보를 가져다주는 
    public HashMap<String, Object> getMemberInfo(String id){
        return memberDao.selectOne(id);
    }
    
    public void memberUpdate(HashMap<String, Object> params){
 
        if(params.get("pwd").equals(params.get("pwd_CHECK")))
        {
            HashMap<String, Object> record = memberDao.selectOne((String)params.get(Constant.Member.USERID));
            record.putAll(params); //원래있던거에 내가 받은걸로 수정
            memberDao.updateMember(record);
        }
    }
}
 
cs


service 패키지내에 

MemberService를 만들어줍니당 


위의 소스를 보시면

 주석처리한것처럼해도 되지만

HashMap을 이용하면 더 편리하기 때문에 HashMap을 이용했습니당 

또한 

update할 때 

admin값도 업데이트할 수 있도록 

record를 사용한것을 알 수 있습니당! 




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package controller;
 
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.http.HttpSession;
 
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.RequestParam;
import org.springframework.web.servlet.ModelAndView;
 
import service.MemberService;
//서비스주입받아서
//받은 리퀘스트를 처리하기에 피룡한 서비스의 메소드를 호출해서 결과 획득 
//결과 데이터랑 적절한 페이지 세팅해서 
//모델엔뷰 리턴 
@Controller
public class MemberController {
    @Autowired
    private MemberService service;
 
    @RequestMapping("test.do")
    public ModelAndView dummy(){
        ModelAndView mav = new ModelAndView();
        mav.addObject("attr",service.getData());
        mav.setViewName("test");
        return mav;
    }
    @RequestMapping("memberList.do")
    public ModelAndView dummy2(){
        ModelAndView mav = new ModelAndView();
        mav.addObject("memberList",service.selectAll());
        mav.setViewName("selectAll");
        return mav;
    }
//Spring MVC컨트롤러에서 사용할 수 있는 반한유형 종류 
//데이터와 패키지의 정보가 둘다 있는 경우
//-ModelAndView()
//데이터에 대한 정보만 있는 경우
//Model or Map
//페이지에 대한 정보만 있는 경우 
//String 
//둘다 없는 ㅕㅇ우
//void 
 
    @RequestMapping("loginForm.do")
    public String loginForm(){
        return "loginForm";
    }
 
    @RequestMapping("joinForm.do")
    public void joinForm(){
        
    }
    
    
    //응답할페이지에 대한 정보가 없는 경우는 (void, Model, Map 경우)  
    //받은 url에서 . 이하를 제외한 문자열을 페이지 정보로 사용함 
    //    ex)joinForm.do -> joinForm
    
    
    //join.do는 회원정보 데이터들을 파라미터로 받아서 
    //디비에 저장하고, loginForm.do로 리다이렉트 해줘야됨
//    @RequestMapping("join.do")
//    public String join(String id, String pwd, String pwd_Check, String name, String email, String phone, String admin){
//        
        //System.out.println("id");
        //파라미터가 잘 들어오는지 확인! ㅋㅋ
        //파라미터 이름이 똑같아야함 uid로 하면 없으니까 null값이 뜸 
        //@RequestParam("id") String uid id라는 파라미터의 값을 uid매개변수에 넣어주셈!
        //required, value, defaultValue의 속성값이 있는데 
        //required값이 true일 경우 해당 파라미터가 없으면 요청처리 못함 
        //defaultValue는 해당 파라미터 값이 들어오지 않았을 경우 
        //지정한 디폴트 값으로 변수값 대체 
        // id, pwd, pwd_Check, name, email, phone, admin의 파라미터들이 있음     
        
//        service.joinMember(id, pwd, pwd_Check, name, email, phone, admin);
//        return "redirect:loginForm.do";
//        //리다이렉트하는 방법
//    }
    
    @RequestMapping("join.do")
    public String join(@RequestParam HashMap<String, Object> params)
    {
        System.out.println(params);
        service.joinMember(params);
        return "redirect:loginForm.do"
    }
    
//    @RequestMapping("login.do")
//    public String login(HttpSession session,String id, String pwd){
////    성공 실패에 따라 리다이렉트 방향 결정
//        //session사용은 매개변수에 session참조변수를 두면 자동으로 들어옵니다 
//        //login.do처리를 완성하세요 
//        //로그인 성공이면 main.do 리다이렉트
////        //로그인 실패이면 loginForm.do 리다이렉트
//        if(service.login(id, pwd)){
//            session.setAttribute("userid", id);
//            return "redirect:main.do";
//        }
//        else{
//            return "redirect:loginForm.do";
//        }
//    
//    }
    
    @RequestMapping("login.do")
    public ModelAndView login(HttpSession session,String id, String pwd){
//    성공 실패에 따라 리다이렉트 방향 결정
        //session사용은 매개변수에 session참조변수를 두면 자동으로 들어옵니다 
        //login.do처리를 완성하세요 
        //로그인 성공이면 main.do 리다이렉트
//        //로그인 실패이면 loginForm.do 리다이렉트
        ModelAndView mav = new ModelAndView();
        if(service.login(id, pwd)){
            session.setAttribute("userid", id);
            mav.setViewName("redirect:main.do");
        }
        else{
            //return "redirect:loginForm.do";
            mav.setViewName("redirect:loginForm.do");
        }
        return mav;
    
    }    
    
    @RequestMapping("main.do")
    public String main(Model model,HttpSession session ){
        String userid = (String) session.getAttribute("userid");
        if(userid == null)
            return "redirect:loginForm.do";
        else{
//            model.addAllAttributes(service.getMemberInfo(id))<= Map을 통채로 싣기 
//            model.addAttibute(arg0); <= 모델 객체를 통채로 싣기 
//            model.addAttribute(arg0, arg1); <=키 값 지정 하나의 데이터 싣기 
            model.addAllAttributes(service.getMemberInfo(userid));
            return "main";
        }
 
        
    }
    @RequestMapping("logout.do")
    public String logout(HttpSession session){
//        session.invalidate();
        session.removeAttribute("userid");
        return "redirect:loginForm.do";
        
    }
    @RequestMapping("memberUpdateForm.do")
    public String memberUpdateForm(Model model,HttpSession session){
        String userid = (String) session.getAttribute("userid");
        if(userid == null)
            return "redirect:loginForm.do";
        model.addAllAttributes(service.getMemberInfo(userid));
        return "memberUpdateForm";
    }
    @RequestMapping("memberUpdate.do")
    public String memberUpdate(@RequestParam HashMap<String, Object> params){
        service.memberUpdate(params);
        return "redirect:main.do";
    }
    
    
 
}
 
cs


그리고 

controller패키지내에  MemberController를 만들어줍니당 



ModelAndView를 이용할 수 있고 

String, void, Model, Map등 

다양한 방법을 알 수 있도록 여러가지 방법을 써봤습니당 



but 

팀 개발할때는 

하나로만 하는게 좋겠쬬!??!??! ?





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원가입</title>
</head>
<body>
    <center>
        <h1>회원가입 페이지</h1>
 
        <form action="join.do">
            <table>
                <tr>
                    <td>아이디</td>
                    <td><input type="text" name="userid" ></td>
                </tr>
                <tr>
                    <td>비밀번호</td>
                    <td><input type="password" name="pwd"></td>
                </tr>
                <tr>
                    <td>비밀번호 확인</td>
                    <td><input type="password" name="pwd_CHECK" ></td>
                </tr>
                <tr>
                    <td>이름</td>
                    <td><input type="text" name="name" ></td>
                </tr>
                <tr>
                    <td>이메일</td>
                    <td><input type="text" name="email" ></td>
                </tr>
                <tr>
                    <td>연락처</td>
                    <td><input type="text" name="phone" ></td>
                </tr>
                <tr>
                    <td>관리자번호</td>
                    <td><input type="text" name="admin" ></td>
                </tr>
 
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="가입하기"><input type="reset" value="다시작성"></td>
                </tr>
            </table>
 
        </form>
    </center>
</body>
</html>
cs



joinForm.jsp 입니당 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <center>
        <form action="login.do">
            <table>
                <tr>
                    <td width="150px" align="center">아이디 :</td>
                    <td width="150px" align="center">
                        <input type="text" name="id">
                    </td>
                </tr>
                <tr>
                    <td width="150px" align="center">비밀번호 :</td>
                    <td width="150px" align="center">
                        <input type="password" name="pwd">
                    </td>
                </tr>
                <tr>
                    <td colspan="2" align="center">
                        <input type="submit" value="로그인">
                    </td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>
cs


loginForm.jsp 입니당


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Main Page </title>
</head>
<body>
    <h2>회원 전용 페이지</h2>
    ${userid}님으로 로그인 하셨습니다.<br>
    ${name }님 환영합니다<br>
    연락처 : ${phone }<br>
    이메일 : ${email }<br>    
    <input type="button" value="로그아웃" onclick="location.href='logout.do'">  
    <input type="button" value="모든회원보기" onclick="location.href='memberList.do'">
    <input type="button" value="회원수정페이지" onclick="location.href='memberUpdateForm.do'">
    
</body>
</html>
cs

main.jsp 입니당


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원 수정 </title>
</head>
<body>
<body>
    <center>
        <h1>회원정보 수정 페이지</h1>
 
        <form action="memberUpdate.do">
            <table>
                <tr>
                    <td>아이디</td>
                    <td><input type="text" name="userid" value="${userid }" ></td>
                </tr>
                <tr>
                    <td>비밀번호</td>
                    <td><input type="password" name="pwd"></td>
                </tr>
                <tr>
                    <td>비밀번호 확인</td>
                    <td><input type="password" name="pwd_CHECK" ></td>
                </tr>
                <tr>
                    <td>이름</td>
                    <td><input type="text" name="name" value="${name }" ></td>
                </tr>
                <tr>
                    <td>이메일</td>
                    <td><input type="text" name="email"  value="${email }"></td>
                </tr>
                <tr>
                    <td>연락처</td>
                    <td><input type="text" name="phone"  value="${phone }"></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="수정하기"><input type="reset" value="다시작성"></td>
                </tr>
            </table>
 
        </form>
    </center>
</body>
</body>
</html>
cs


memberUpdate.jsp 입니당


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:forEach var="member" items="${memberList }">
        ${member.name } , ${member.userid} <br>
    </c:forEach>
</body>
</html>
cs

selectAll.jsp 입니당 




이러면 화면 구성까지 완료!






그렇다면

요렇게 되어있어야 

정상! 




+

데이터베이스는 

아래와 같습니당! 






+ Recent posts