사용자 정보 수정 같은 경우에는 로직이 완벽 하진 않지만 주로 쓰이는 방식이라 응용한다면 우리가 평소 보는 정보수정으로 만들 수 있을 것 같다.
회원 정보 수정 같은 경우에는 기존의 회원가입의 형식을 사용하면 된다. 현재는 수정이 되는 것이 아니라 기존에 회원 정보를 입력창에 넣어주는 기능을 만들었다.
회원 데이터를 가지고 나오는 작업의 순서는 아래와 같다.
* service와 dao에 getInfo()메서드를 선언
* service에서는 세션에서 아이디를 얻는다
* dao에서는 id를 전달받아 회원 데이터를 조회하여 vo에 저장
* controller에서는 조회한 vo를 저장하고 화면으로 가지고 나감
* 화면에서는 input태그에 값을 출력
package com.example.user.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.example.user.model.UserVO;
public interface UserService {
public int join(HttpServletRequest request, HttpServletResponse response);
public UserVO login(HttpServletRequest request, HttpServletResponse response);
public UserVO getInfo(HttpServletRequest request, HttpServletResponse response);
}
기존에 있던 service interface에 getInfo 메서드를 선언한다. Interface는 메뉴판이라고 생각하면 이해가 쉬울 것 같다.
@Override
public UserVO getInfo(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();//자바에서 현재 세션 얻는 방법
String id = (String)session.getAttribute("user_id");
UserVO vo = dao.getInfo(id);
return vo;
}
오버라이딩을 통해서 메서드의 내용을 넣어준다. 이 경우에는 기존의 로그인을 하면서 session에 담아줬던 key값 user_id를 통해서 정보를 불러올 것이다.
public UserVO getInfo(String id) {
UserVO vo = null;
String sql = "select * from users where id = ?";
try {
conn = DriverManager.getConnection(URL,UID,UPW);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs =pstmt.executeQuery();
if(rs.next()) {//로그인 성공 후 vo에 회원정보 저장
String id2 = rs.getString("id");
String name = rs.getString("name");
String email = rs.getString("email");
String gender = rs.getString("gender");
vo = new UserVO(id2, null, name, email, gender);
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
JDBCUtil.close(conn, pstmt, rs);
}
return vo;
}
DAO에도 getInfo 라는 메서드를 선언하여 데이터베이스 즉 SQL에 들어있는 데이터를 불러온다. SQL문 같은 경우에는 아래와 같이 선언하고 pstmt.setString(1,id)값을 통해서 설정해준다.
select * from users where id =?;
이 과정을 통해서 필요한 값들을 vo에 값을 넣어준다.
최종적으로 controller에서 UserService의 getInfo메서드를 호출하여 객체를 request에 담아준다.
case "/user/user_modify.user"://정보수정화면
/*****회원 데이터를 가지고 나오는 작업*****
* service와 dao에 getInfo()메서드를 선언
* service에서는 세션에서 아이디를 얻는다
* dao에서는 id를 전달받아 회원 데이터를 조회하여 vo에 저장
* controller에서는 조회한 vo를 저장하고 화면으로 가지고 나감
* 화면에서는 input태그에 값을 출력
* */
UserVO vo2 = service.getInfo(request, response);
request.setAttribute("vo2", vo2);
System.out.println(vo2.getGender());
request.getRequestDispatcher("user_modify.jsp").forward(request, response);
default:
break;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="../include/header.jsp"%>
<%@taglib uri ="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<div align="center">
<form action="joinForm.user" method="post">
<span style="color: red;">${msg }</span>
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="id" placeholder="4~8글자 영문자 숫자"
pattern="\w{4,8}" required="required" value="${requestScope.vo2.id}"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pw" pattern="\w{4,8}"
required="required" value="${requestScope.vo2.pw}"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name" pattern="[가-힣]{3,}" value="${requestScope.vo2.name}">
</td>
</tr>
<tr>
<td>이메일</td>
<td><input type="email" name="email" value="${requestScope.vo2.email}"></td>
</tr>
<tr>
<td>성별</td>
<td>
<input type="radio" name="gender" value="f" ${requestScope.vo2.gender == 'f'? 'checked': ''}>여자
<input type="radio" name="gender" value="m" ${requestScope.vo2.gender == 'm'? 'checked': ''}>남자
</td>
</tr>
</table>
<input type="submit" value="정보수정"> <input type="button"
value="마이페이지" onclick="location.href='user_mypage.user'">
</form>
</div>
<%@include file="../include/footer.jsp"%>
${requestScope.request로 저장한 객체이름.불러올 변수명}을 통해서 input value에 담아주면 아래 처럼 출력이 된다.
유저 정보 수정을 통한 정보 업데이트 하기
서비스에서 update method를 생성해준다.
package com.example.user.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.example.user.model.UserVO;
public interface UserService {
public int update(HttpServletRequest request, HttpServletResponse response);
}
@Override
public int update(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String gender = request.getParameter("gender");
UserDAO dao = UserDAO.getInstance();
int result = dao.update(id, pw, name, gender);
if(result == 1) {
HttpSession session = request.getSession();
session.setAttribute("user_name", name);
}
return result;
}
변경된 name의 값을 session에 다시 담아준다.
이후 controller에서 updateForm.user라는 URL을 통해 service의 update메서드 호출해 준다.
case "/user/updateForm.user" :
/*
* 회원정보를 업데이트하는 작업
* service와 dao에 update() 메서드를 생성
* service의 필요한 파라미터 값을 받는다(pw, name, gender) 조건절(id)
* dao에서 데이터를 전달받아서 업데이트를 실행
* 업데이트 이후에는 컨트롤러를 태워서 mypage로 리다이렉트
*/
int result2 = service.update(request, response);
if(result2==1) {//업데이트 성공
//response.sendRedirect("user_mypage.user");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('정보가 수정되었습니다');");
out.println("location.href='user_mypage.user';");
out.println("</script>");
}else {// 업데이트 실패
request.setAttribute("msg", "양식에 맞춰 작성해주세요");
response.sendRedirect("user_modify.user");
//out객체를 이용해서 화면에 스크립트를 작성해서 보냄
}
break;
Service에서는 DAO의 update 메서드를 호출하여 SQL 데이터베이스의 있는 기존의 내용을 수정해 준다.
//정보 수정
public int update(String id, String pw, String name, String gender) {
String sql = "update users set pw = ?, name = ? , gender = ? where id = ?";
int result = 0;
try {
conn = DriverManager.getConnection(URL,UID,UPW);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, pw);
pstmt.setString(2, name);
pstmt.setString(3, gender);
pstmt.setString(4, id);
result = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally {
JDBCUtil.close(conn, pstmt, rs);
}
return result;
}
기존의 이름은 홍길동이다. 정보 수정을 통해서 리오리로 이름을 바꿔보자.
정보가 수정되었습니다라는 메세지와 함께 수정이 되고 최종 바뀐 이름으로 출력이 된다.
이렇게 비밀번호, 이름, 성별이 변경 가능하다.
'통합' 카테고리의 다른 글
MVC2 게시판 글 생성하기 54일차-3 22.12.06 (0) | 2022.12.06 |
---|---|
MVC2 사용자 삭제 54일차-2 22.12.06 (0) | 2022.12.06 |
54일차-1 22.12.06 홈페이지 로그아웃 (0) | 2022.12.06 |
53일차-3 22.12.05(로그인 페이지 만들기) SQL, JAVA, JSP (0) | 2022.12.05 |
53일차-2 22.12.05(회원가입 페이지 만들기) SQL, JAVA, JSP (0) | 2022.12.05 |
댓글