2024. 6. 20. 13:17ㆍ개인 프로젝트
동작화면
화면을 보여주는데, 과정 이와 같다.
Controller -> service -> serviceImpl -> mapper.java -> mapper.xml
사실 service -> serviceimpl 로 가는 과정 없이, service -> mapper.java로 해도 되지만, 과정을 굳이 추가하하면서 공부해 보고 싶었다.
참고사항
(1) 추가 설명은 소스코드 안에 빨간색 글자로 나타내었다.
(2) 주석처리된 부분은 개인적으로 테스트 해본 내용이라 무시하면 된다.
Controller.java
package com.wonlee.spring.controller;
import com.wonlee.spring.User.UserInfo;
import com.wonlee.spring.User.UserList;
import com.wonlee.spring.service.UserService;
import com.wonlee.spring.form.LoginForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
//import static org.springframework.util.ObjectUtils.isEmpty;
@Controller
public class Woncontroller {
@Autowired
private UserService userService;
@RequestMapping("/login.do")
public String test() {
return "login";
}
@RequestMapping("/login_check.do")
public ModelAndView loginCheck(HttpServletRequest request, @ModelAttribute("loginForm") LoginForm form, Model model) throws Exception {
boolean islogin = true;
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1800);
//session.getId();
// servlet 으로 파라미터 받기
//String id = request.getParameter("userid");
//String pw = request.getParameter("password");
//<form:form> 으로 파라미터 받기
//String id = form.getUserid();
//form.setPassword(pw);
//없어도 되는 코드임 login 상세보기 추가
/*model.addAttribute("loginch",islogin);
model.addAttribute("form",form);*/
LoginForm loginch = userService.loginCheck(form);
//loginch이 null이거나, loginch에 userid가 null일경우 islogin을 false로 바꾸고 login.jsp를 호출시킴
if(loginch == null || loginch.getUserid() == null) {
islogin = false;
session.invalidate();
model.addAttribute("islogin",islogin);
mav.setViewName("login");
return mav;
}
List<UserList> ulist= userService.getUserList();
model.addAttribute("userList",ulist);
mav.setViewName("userList");
return mav ;
}
@RequestMapping(value = "/view/{id}", method= RequestMethod.GET)
public ModelAndView userView (@PathVariable("id") String id, Model model) throws Exception {
ModelAndView mav = new ModelAndView();
UserInfo userinfo = userService.getuserinfo(id);
String datetime = userinfo.getJoin_date();
String joindate = datetime.substring(0,16);
userinfo.setJoin_date(joindate);
model.addAttribute("userInfo",userinfo);
mav.setViewName("userView");
return mav ;
}
}
LoginForm.java
package com.wonlee.spring.form;
public class UserForm {
public String userid;
public String password;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Userinfo.java
package com.wonlee.spring.User;
public class UserInfo {
//로그인 form 객체와는 엄연히 다른 역할이라 분리함.
public String userid;
public String password;
public String name;
public String email;
public String getJoin_date() {
return join_date;
}
public void setJoin_date(String join_date) {
this.join_date = join_date;
}
public String join_date;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
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;
}
}
UserList.java
package com.wonlee.spring.User;
import java.util.List;
public class UserList {
private List<UserInfo> userList;
public UserList(List<UserInfo> userList) {
this.userList = userList;
}
}
UserService.java
package cohttp://m.wonlee.spring.service;
import cohttp://m.wonlee.spring.User.UserInfo;
import cohttp://m.wonlee.spring.User.UserList;
import cohttp://m.wonlee.spring.form.LoginForm;
import java.util.List;
public interface UserService {
public LoginForm loginCheck(LoginForm form);
public List getUserList();
public UserInfo getuserinfo(String id);
}
UserService.impl.java
package cohttp://m.wonlee.spring.service;
import cohttp://m.wonlee.spring.User.UserInfo;
import cohttp://m.wonlee.spring.User.UserList;
import cohttp://m.wonlee.spring.mapper.UserMapper;
import cohttp://m.wonlee.spring.form.LoginForm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
private final Logger log = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private UserMapper userMapper;
@Override
public LoginForm loginCheck(LoginForm form) {
try{
LoginForm checkform = new LoginForm();
checkform = userMapper.loginCheck(form);
return checkform;
} catch (Exception e) {
log.error("loginCheck Error {}" ,e);
e.printStackTrace();
//null을 return하여 로그인을 막음
LoginForm checkform = null;
return checkform;
}
}
@Override
public List<UserList> getUserList() {
try {
List<UserList> userList;
userList = userMapper.getuserList();
return userList;
}catch (Exception e) {
log.error("getUserList Error {}" ,e);
e.printStackTrace();
List<UserList> userList = null;
return userList;
}
}
public UserInfo getuserinfo(String id) {
try {
UserInfo userinfo;
userinfo = userMapper.getuserinfo(id);
return userinfo;
} catch (Exception e) {
log.error(" getuserinfo Error {}", e);
e.printStackTrace();
UserInfo userInfo = null;
return userInfo;
}
}
}
UserMapper.java
package cohttp://m.wonlee.spring.mapper;
import cohttp://m.wonlee.spring.User.UserInfo;
import cohttp://m.wonlee.spring.User.UserList;
import cohttp://m.wonlee.spring.form.LoginForm;
import org.mybatis.spring.annotation.MapperScan;
import java.util.List;
@MapperScan
public interface UserMapper {
public LoginForm loginCheck(LoginForm form);
public List getuserList();
public UserInfo getuserinfo(String id);
}
UserMapper.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="com.wonlee.spring.mapper.UserMapper">
<!-- <resultMap id="loginFormResultMap" type="com.wonlee.spring.form.LoginForm">
<result column="userid" property="id"/>
<result column="passwd" property="pw"/>
</resultMap>-->
<!--<select id="loginCheck" parameterType="com.wonlee.spring.form.LoginForm" resultMap="loginFormResultMap">
select userid,passwd from userinfo where userid = #{id} and passwd = #{pw};
</select>-->
<!-- resultType을 form객체로 그대로 가져 오려면 vo의 필드값과 컬럼을 동일하게 맞춰야함. -->
<select id="loginCheck" parameterType="com.wonlee.spring.form.LoginForm" resultType="com.wonlee.spring.form.LoginForm">
select userid from userinfo where userid = #{userid} and password = #{password};
</select>
<select id="getuserList" resultType="com.wonlee.spring.User.UserInfo">
select userid from userinfo;
</select>
<select id="getuserinfo" parameterType="com.wonlee.spring.User.UserInfo" resultType="com.wonlee.spring.User.UserInfo">
select * from userinfo where userid = #{userid};
</select>
</mapper>
views
(1) login.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/login.css">
</head>
<body>
<div class="container">
<h2>로그인</h2>
<%-- <form action="/login_check.do" method="post">--%>
<form:form modelAttribute="loginForm" id="loginForm" name="loginForm" action="/login_check.do" method="post">
<input type="text" name="userid" placeholder="사용자 아이디" required>
<input type="password" name="password" placeholder="비밀번호" required>
<input type="submit" value="로그인">
<%-- form으로 로그인 확인 처리 <h2>${form.id}님 안녕하세요 ^^</h2>--%>
<c:if test="${islogin == false}">
<!-- islogin이 false 일때, 아래 내용을 보여줌 -->
<h2>아이디 또는 비밀번호를 확인해 주세요</h2>
</c:if>
</form:form>
<%-- </form>--%>
</div>
</body>
</html>
(2) userList.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>유저 아이디 목록</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/login.css">
</head>
<body>
<h1>유저 아이디 목록</h1>
<ul>
<c:forEach var="userlist" items="${userList}">
<li><a href="/view/${userlist.userid}">${userlist.userid}</a></li>
</c:forEach>
</ul>
</body>
</html>
(3) userView.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>유저 정보</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/login.css">
</head>
<body>
<h1>유저 정보</h1>
<div class="container">
<div class="user-info">
<div>
<label>아이디:</label> ${userInfo.userid}
</div>
<div>
<label>비밀번호:</label> ${userInfo.passwd}
</div>
<div>
<label>이름:</label> ${userInfo.name}
</div>
<div>
<label>이메일:</label> ${userInfo.email}
</div>
<div>
<label>가입일:</label> ${userInfo.join_date}
</div>
</div>
<a href="javascript:window.history.back();" class="btn-back">뒤로 가기</a>
</div>
</body>
</html>
webapp > css > login.css
/* 공통 스타일 */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
h1 {
text-align: center;
margin-top: 30px;
}
h2 {
text-align: center;
}
.container {
max-width: 600px;
margin: 100px auto;
background-color: #ffffff;
padding: 20px;
border-radius: 5px;
box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
text-align: center;
}
li {
margin-bottom: 10px;
}
a {
text-decoration: none;
color: #333;
background-color: #4CAF50;
padding: 10px 20px;
border-radius: 5px;
display: inline-block;
transition: background-color 0.3s;
}
a:hover {
background-color: #45a049;
}
input[type="text"], input[type="password"] {
width: calc(100% - 20px);
padding: 10px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 3px;
}
input[type="submit"] {
width: 100%;
padding: 10px;
border: none;
border-radius: 3px;
background-color: #4CAF50;
color: white;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #45a049;
}
.user-info {
margin-top: 20px;
}
.user-info div {
margin-bottom: 10px;
}
.user-info label {
font-weight: bold;
}
.btn-back {
display: block;
width: 120px;
margin: 20px auto;
padding: 10px;
text-align: center;
background-color: #4CAF50;
color: #fff;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s;
}
.btn-back:hover {
background-color: #45a049;
}
전체 디렉토리

'개인 프로젝트' 카테고리의 다른 글
게시판 만들기 (0) | 2024.07.08 |
---|---|
로그인 구현(1) (0) | 2024.06.19 |
2024 이클립스 스프링 MVC 프로젝트 만들기(3) (0) | 2024.06.18 |
2024 이클립스 스프링 MVC 프로젝트 만들기(2) (0) | 2024.06.18 |
2024 이클립스 스프링 MVC 프로젝트 만들기(1) (0) | 2024.06.18 |