Spring
로그인 페이지 만들기
검정콩
2022. 5. 23. 17:29
1. Controller 만들기
@Autowired MemberService service;
private Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
logger.info("로그인 페이지");
return "login";
}
@RequestMapping(value = "/joinForm")
public String joinForm(Model model) {
logger.info("회원가입 페이지1");
return "joinForm";
}
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(Model model, HttpServletRequest request) {
logger.info("회원가입 페이지");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String email = request.getParameter("email");
logger.info(id+"/"+pw+"/"+name+"/"+email);
//join 하고나면 메시지 주기
String msg = service.join(id,pw,name,email);
logger.info(msg);
model.addAttribute("msg", msg);
return "login";
}
@RequestMapping(value = "/login")
public String login(Model model, HttpServletRequest request) {
logger.info("로그인 페이지");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
logger.info(id+"/"+pw);
String loginId = service.login(id,pw);
logger.info("로그인 아이디 : "+loginId);
String msg = "아이디 또는 비밀번호를 확인하세요";
String page = "login";
if(loginId != null) {
HttpSession session = request.getSession();
session.setAttribute("loginId", loginId);
//로그인 성공시 컨트롤러에 list 보여달라 요청
page = "redirect:/list";
} else {
model.addAttribute("msg",msg);
}
return page;
}
@RequestMapping(value = "/list")
public String list(Model model, HttpServletRequest request) {
//로그인한 사용자가 아니면 login 으로 보냄
String page = "main";
HttpSession session = request.getSession();
if(session.getAttribute("loginId") == null) {
page = "login";
model.addAttribute("msg", "로그인이 필요한 서비스입니다");
} else {
//값을 여러개 담기 위해 ArrayList 사용
ArrayList<MemberDTO> list = service.list();
logger.info("list 갯수 : "+list.size());
model.addAttribute("list",list);
}
return page;
}
@RequestMapping(value = "/logout")
public String logout(HttpSession session) {
session.removeAttribute("loginId");
return "login";
}
@RequestMapping(value = "/delete")
public String delete(Model model, HttpServletRequest request) {
String id = request.getParameter("id");
logger.info("삭제 요청 : "+id);
service.delete(id);
return "redirect:/list";
}
@RequestMapping(value = "/detail")
public String detail(Model model, @RequestParam String id) {
logger.info("상세보기 할 아이디 : "+id);
MemberDTO info = service.detail(id);
logger.info("pw : "+info.getPw());
logger.info("email : "+info.getEmail());
model.addAttribute("info",info);
return "detail";
}
@RequestMapping(value = "/update")
public String update(Model model, HttpServletRequest request) {
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String email = request.getParameter("email");
logger.info(id+"/"+pw+"/"+name+"/"+email);
service.update(id,pw,name,email);
return "redirect:/detail?id="+id;
}
}
원래는 다른 클래스도 왔다갔다 해야하는데, 편의상 코드를 한번에 올렸다.
실제로 코드를 작성할때는 기능 하나씩 만들고 에러뜨나 실행해보고 하면서 해야한다.
2. Service 만들기
@Service
public class MemberService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired MemberDAO dao;
public String join(String id, String pw, String name, String email) {
logger.info("서비스 도착");
String msg = "회원가입에 실패했습니다.";
if(dao.join(id,pw,name,email) > 0) {
msg = "회원가입에 성공했습니다.";
}
return msg;
}
public String login(String id, String pw) {
logger.info("서비스 도착");
return dao.login(id,pw);
}
public ArrayList<MemberDTO> list() {
logger.info("리스트 요청 서비스");
return dao.list();
}
public void delete(String id) {
logger.info("삭제 서비스 도착");
int success = dao.delete(id);
logger.info("삭제된 데이터 수 : "+success);
}
public MemberDTO detail(String id) {
logger.info(id+" 의 상세정보 DB 에 요청");
return dao.detail(id);
}
public void update(String id, String pw, String name, String email) {
logger.info(id+" 의 수정 DB 에 요청");
int row = dao.update(id,pw,name,email);
logger.info("수정한 데이터의 수 : "+row);
}
dao와 dto 로 요청을 보낼 service를 만들어준다.
3. db와 연결해주는 인터페이스인 dao를 만들어준다.
public interface MemberDAO {
int join(String id, String pw, String name, String email);
String login(String id, String pw);
ArrayList<MemberDTO> list();
int delete(String id);
MemberDTO detail(String id);
int update(String id, String pw, String name, String email);
}
이걸 안만들어주면 db에 데이터를 넣고 가져오는 작업이 불가능하다.
4. 데이터를 한꺼번에 담아서 들고다니는 클래스인 dto 를 만들어준다.
public class MemberDTO {
private String id;
private String pw;
private String name;
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
getter와 setter를 생성해주었다.
5. 요청을 db가 실행할 수 있도록 쿼리문을 작성해준다.
<?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="com.test.member.dao.MemberDAO">
<insert id="join">
INSERT INTO member(id,pw,name,email)
VALUES(#{param1},#{param2},#{param3},#{param4})
</insert>
<select id="login" resultType="String">
SELECT id FROM member
WHERE id = #{param1} AND pw = #{param2}
</select>
<select id="list" resultType="com.test.member.dto.MemberDTO">
SELECT id,pw,name,email FROM member
</select>
<delete id="delete" parameterType="String">
DELETE FROM member WHERE id = #{id}
</delete>
<select id="detail" resultType="com.test.member.dto.MemberDTO"
parameterType="String">
SELECT * FROM member WHERE id = #{id}
</select>
<update id="update">
UPDATE member SET
pw = #{param2}
,name = #{param3}
,email = #{param4}
WHERE id = #{param1}
</update>
</mapper>
db의 클래스명과 자바의 패키지명, 클래스명에 오타가 나지 않도록 유의한다.