From 56fbea6c173f236dee19f81908ad32ffb24b0d23 Mon Sep 17 00:00:00 2001 From: lucy Date: Mon, 5 Aug 2024 03:15:10 +0900 Subject: [PATCH 1/2] spring mvc login/join --- .springBeans | 6 +- pom.xml | 237 ++++++++---------- .../com/miniproject/user/UserService.java | 6 + .../com/miniproject/user/UserSservice.java | 5 - .../java/com/miniproject/user/UserVO.java | 12 +- .../user/controller/JoinController.java | 37 +++ .../user/controller/LoginController.java | 38 +++ .../com/miniproject/userImpl/UserDAO.java | 75 +++--- .../miniproject/userImpl/UserServiceImpl.java | 58 ++--- .../resources/config/datasource.properties | 4 + .../spring/appServlet/servlet-context.xml | 47 ++-- src/main/webapp/join.jsp | 40 +-- src/main/webapp/login.jsp | 23 +- .../board/controller/BoardController.class | Bin 1219 -> 1219 bytes .../com/miniproject/user/UserService.class | Bin 0 -> 272 bytes .../classes/com/miniproject/user/UserVO.class | Bin 285 -> 1252 bytes .../user/controller/DispacherServlet.class | Bin 1220 -> 1220 bytes .../user/controller/HandlerMapping.class | Bin 331 -> 331 bytes .../user/controller/LoginController.class | Bin 0 -> 1265 bytes .../user/controller/ViewResolver.class | Bin 325 -> 325 bytes .../user/controller/joinController.class | Bin 0 -> 1331 bytes .../com/miniproject/userImpl/UserDAO.class | Bin 1179 -> 1951 bytes .../userImpl/UserServiceImpl.class | Bin 1203 -> 3183 bytes .../com/shoppingmall/biz/HomeController.class | Bin 1661 -> 1661 bytes target/classes/config/datasource.properties | 4 + .../maven/com.shoppingmall/biz/pom.xml | 237 ++++++++---------- 26 files changed, 436 insertions(+), 393 deletions(-) create mode 100644 src/main/java/com/miniproject/user/UserService.java delete mode 100644 src/main/java/com/miniproject/user/UserSservice.java create mode 100644 src/main/java/com/miniproject/user/controller/JoinController.java create mode 100644 src/main/java/com/miniproject/user/controller/LoginController.java create mode 100644 src/main/resources/config/datasource.properties create mode 100644 target/classes/com/miniproject/user/UserService.class create mode 100644 target/classes/com/miniproject/user/controller/LoginController.class create mode 100644 target/classes/com/miniproject/user/controller/joinController.class create mode 100644 target/classes/config/datasource.properties diff --git a/.springBeans b/.springBeans index 4d9eb32..4558973 100644 --- a/.springBeans +++ b/.springBeans @@ -1,13 +1,17 @@ 1 - + + + src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml + src/main/webapp/WEB-INF/spring/root-context.xml + diff --git a/pom.xml b/pom.xml index fecd7ef..674e4f8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,145 +1,112 @@ - - 4.0.0 - com.shoppingmall - biz - ShoppingMall - war - 1.0.0-BUILD-SNAPSHOT - - 1.6 - 3.1.1.RELEASE - 1.6.10 - 1.6.6 - - - - - org.springframework - spring-context - ${org.springframework-version} - - - - commons-logging - commons-logging - - - - - org.springframework - spring-webmvc - ${org.springframework-version} - - - - - org.aspectj - aspectjrt - ${org.aspectj-version} - - - - - org.slf4j - slf4j-api - ${org.slf4j-version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j-version} - runtime - - - org.slf4j - slf4j-log4j12 - ${org.slf4j-version} - runtime - - - log4j - log4j - 1.2.15 - - - javax.mail - mail - - - javax.jms - jms - - - com.sun.jdmk - jmxtools - - - com.sun.jmx - jmxri - - - runtime - + + 4.0.0 + com.shoppingmall + biz + ShoppingMall + war + 1.0.0-BUILD-SNAPSHOT + + 1.8 + 5.3.23 + 1.9.9.1 + 1.7.36 + 4.13.2 + + + + + org.springframework + spring-jdbc + 5.3.24 + - - - javax.inject - javax.inject - 1 - - - - - javax.servlet - servlet-api - 2.5 - provided - - - javax.servlet.jsp - jsp-api - 2.1 - provided - - - javax.servlet - jstl - 1.2 - - - - - junit - junit - 4.7 - test - - + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + log4j + log4j + 1.2.17 + + + + + javax.inject + javax.inject + 1 + + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + javax.servlet + javax.servlet.jsp-api + 2.3.1 + provided + + + javax.servlet + jstl + 1.2 + + + + + junit + junit + ${junit.version} + test + + - - maven-eclipse-plugin - 2.9 - - - org.springframework.ide.eclipse.core.springnature - - - org.springframework.ide.eclipse.core.springbuilder - - true - true - - org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 - 1.6 - 1.6 + ${java.version} + ${java.version} -Xlint:all true true @@ -148,7 +115,7 @@ org.codehaus.mojo exec-maven-plugin - 1.2.1 + 1.6.0 org.test.int1.Main diff --git a/src/main/java/com/miniproject/user/UserService.java b/src/main/java/com/miniproject/user/UserService.java new file mode 100644 index 0000000..911d80c --- /dev/null +++ b/src/main/java/com/miniproject/user/UserService.java @@ -0,0 +1,6 @@ +package com.miniproject.user; + +public interface UserService { + UserVO loginUser(String id, String pass); + boolean registerUser(UserVO user); +} diff --git a/src/main/java/com/miniproject/user/UserSservice.java b/src/main/java/com/miniproject/user/UserSservice.java deleted file mode 100644 index ff8c8fc..0000000 --- a/src/main/java/com/miniproject/user/UserSservice.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.miniproject.user; - -public interface UserSservice { - -} diff --git a/src/main/java/com/miniproject/user/UserVO.java b/src/main/java/com/miniproject/user/UserVO.java index 5d90a03..aae7976 100644 --- a/src/main/java/com/miniproject/user/UserVO.java +++ b/src/main/java/com/miniproject/user/UserVO.java @@ -1,5 +1,15 @@ package com.miniproject.user; -public class UserVO { +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserVO { + private String id; + private String pass; + private String name; + private String phone; + private String nickname; } diff --git a/src/main/java/com/miniproject/user/controller/JoinController.java b/src/main/java/com/miniproject/user/controller/JoinController.java new file mode 100644 index 0000000..fb3efa4 --- /dev/null +++ b/src/main/java/com/miniproject/user/controller/JoinController.java @@ -0,0 +1,37 @@ +package com.miniproject.user.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +import com.miniproject.user.UserService; +import com.miniproject.user.UserVO; + +@Controller +@RequestMapping("/user") +public class JoinController { + + private final UserService userService; + + @Autowired + public JoinController(UserService userService) { + this.userService = userService; + } + + @RequestMapping(value = "/join.do", method = RequestMethod.GET) + public String showJoinForm() { + return "join"; // 회원가입 폼을 보여줍니다. + } + + @RequestMapping(value = "/join.do", method = RequestMethod.POST) + public String join(UserVO user) { + boolean isRegistered = userService.registerUser(user); + if (isRegistered) { + return "redirect:/user/login.do"; // 회원가입 성공 후 로그인 페이지로 리다이렉트 + } else { + return "join"; // 회원가입 실패 시 다시 회원가입 페이지로 + } + } +} diff --git a/src/main/java/com/miniproject/user/controller/LoginController.java b/src/main/java/com/miniproject/user/controller/LoginController.java new file mode 100644 index 0000000..3c923b0 --- /dev/null +++ b/src/main/java/com/miniproject/user/controller/LoginController.java @@ -0,0 +1,38 @@ +// LoginController.java +package com.miniproject.user.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +import com.miniproject.user.UserService; +import com.miniproject.user.UserVO; + +@Controller +@RequestMapping("/user") +public class LoginController { + + private final UserService userService; + + @Autowired + public LoginController(UserService userService) { + this.userService = userService; + } + + @RequestMapping(value = "/login.do", method = RequestMethod.GET) + public String showLoginForm() { + return "login"; // 로그인 폼을 보여줍니다. + } + + @RequestMapping(value = "/login.do", method = RequestMethod.POST) + public ModelAndView login(String id, String pass) { + UserVO user = userService.loginUser(id, pass); + if (user != null) { + return new ModelAndView("index", "user", user); // 로그인 성공 후 index.jsp로 이동 + } else { + return new ModelAndView("login", "message", "Invalid credentials"); // 로그인 실패 + } + } +} diff --git a/src/main/java/com/miniproject/userImpl/UserDAO.java b/src/main/java/com/miniproject/userImpl/UserDAO.java index 5f3f06a..f609575 100644 --- a/src/main/java/com/miniproject/userImpl/UserDAO.java +++ b/src/main/java/com/miniproject/userImpl/UserDAO.java @@ -1,39 +1,48 @@ package com.miniproject.userImpl; -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet implementation class UserDAO - */ -public class UserDAO extends HttpServlet { - private static final long serialVersionUID = 1L; - - /** - * @see HttpServlet#HttpServlet() - */ - public UserDAO() { - super(); - // TODO Auto-generated constructor stub +import com.miniproject.user.UserVO; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.springframework.dao.EmptyResultDataAccessException; + +@Repository +public class UserDAO { + + private final JdbcTemplate jdbcTemplate; + + public UserDAO(DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); } - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // TODO Auto-generated method stub - response.getWriter().append("Served at: ").append(request.getContextPath()); - } - - /** - * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) - */ - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // TODO Auto-generated method stub - doGet(request, response); - } + public UserVO selectUserByIdAndPassword(String id, String pass) { + String sql = "SELECT * FROM users WHERE id = ? AND pass = ?"; + try { + return jdbcTemplate.queryForObject(sql, new Object[]{id, pass}, new UserRowMapper()); + } catch (EmptyResultDataAccessException e) { + return null; + } + } + + public boolean insertUser(UserVO user) { + String sql = "INSERT INTO users (id, pass, name, phone, nickname) VALUES (?, ?, ?, ?, ?)"; + int rowsAffected = jdbcTemplate.update(sql, user.getId(), user.getPass(), user.getName(), user.getPhone(), user.getNickname()); + return rowsAffected > 0; + } + private static class UserRowMapper implements RowMapper { + @Override + public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException { + UserVO user = new UserVO(); + user.setId(rs.getString("id")); + user.setName(rs.getString("name")); + user.setPhone(rs.getString("phone")); + user.setNickname(rs.getString("nickname")); + return user; + } + } } diff --git a/src/main/java/com/miniproject/userImpl/UserServiceImpl.java b/src/main/java/com/miniproject/userImpl/UserServiceImpl.java index c594bfa..230fd2c 100644 --- a/src/main/java/com/miniproject/userImpl/UserServiceImpl.java +++ b/src/main/java/com/miniproject/userImpl/UserServiceImpl.java @@ -1,39 +1,33 @@ package com.miniproject.userImpl; -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; -/** - * Servlet implementation class UserServiceImpl - */ -public class UserServiceImpl extends HttpServlet { - private static final long serialVersionUID = 1L; - - /** - * @see HttpServlet#HttpServlet() - */ - public UserServiceImpl() { - super(); - // TODO Auto-generated constructor stub - } +import com.miniproject.user.UserService; +import com.miniproject.user.UserVO; + +@Service +public class UserServiceImpl implements UserService { + private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); + + private final UserDAO userDAO; - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // TODO Auto-generated method stub - response.getWriter().append("Served at: ").append(request.getContextPath()); - } + @Autowired + public UserServiceImpl(UserDAO userDAO) { + this.userDAO = userDAO; + } - /** - * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) - */ - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // TODO Auto-generated method stub - doGet(request, response); - } + @Override + public UserVO loginUser(String id, String pass) { + logger.info("Logging in user with id: {}", id); + return userDAO.selectUserByIdAndPassword(id, pass); + } + @Override + public boolean registerUser(UserVO user) { + logger.info("Registering user with id: {}", user.getId()); + return userDAO.insertUser(user); + } } diff --git a/src/main/resources/config/datasource.properties b/src/main/resources/config/datasource.properties new file mode 100644 index 0000000..8efb6a1 --- /dev/null +++ b/src/main/resources/config/datasource.properties @@ -0,0 +1,4 @@ +jdbc.driver=oracle.jdbc.driver.OracleDriver +jdbc.url=jdbc:oracle:thin:@localhost:1521:xe +jdbc.username=miniproject +jdbc.password=1234 \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml b/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml index bd85171..1a3ae9d 100644 --- a/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml +++ b/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml @@ -1,29 +1,26 @@ - + - - - - + + - - - + + - - - - - - - - - - - + + + + + + + diff --git a/src/main/webapp/join.jsp b/src/main/webapp/join.jsp index 4aa69fd..13eb06b 100644 --- a/src/main/webapp/join.jsp +++ b/src/main/webapp/join.jsp @@ -121,24 +121,28 @@ body { - + diff --git a/src/main/webapp/login.jsp b/src/main/webapp/login.jsp index f671080..4f42545 100644 --- a/src/main/webapp/login.jsp +++ b/src/main/webapp/login.jsp @@ -123,16 +123,23 @@ body { diff --git a/target/classes/com/miniproject/board/controller/BoardController.class b/target/classes/com/miniproject/board/controller/BoardController.class index 1c807df9ad13a0c9eeb5660bf2fb07ed13c63052..470065fd7b66a4d77f73ae92c198a103a9a0abcf 100644 GIT binary patch delta 17 ZcmX@id6<*q)W2Q(7#J9gH*)M|0RTae28;jz delta 17 ZcmX@id6<*q)W2Q(7#J9gHgfD{0RTaZ28#dy diff --git a/target/classes/com/miniproject/user/UserService.class b/target/classes/com/miniproject/user/UserService.class new file mode 100644 index 0000000000000000000000000000000000000000..d0e3bedbf2d626206c4c25767f441c60dbb4012f GIT binary patch literal 272 zcmaKny9&ZE7==%~v|1f}1jlwUgJVa*snDV5;8w#=NNE#EFAwM71Ncy4f`fwSa)yt? z$2s@M^#)*zMTil@T9}46N~?=C6^V}bEm?kWQIH*!pb!&=RaFipuS+d?e)ctnr6sA_ zj;!xGPn`WU9rH9fG0bZtm44NCarRagomE<<-z53#WQYpWTS0qOliT<)dgJ8*1H;&T U1xD_}6aoB~5Hm;I9M2Iw0j4O4EitvIRAT~%yNKuMZ$lh_SbV_1Jj>C6>1VUoL z2k=pdbL~_WbcDQ_J9FlqbDzI{|M&^u8J@VX6t<&u7R+>_=UI9YM|rSZ#98ox$LPdG zU19wq{1gV$Fqs4=WARY1^qE3?aP@JTXF8d@P^izt#eyaYXR(4kKTi|dMxvvSCFHzh zsQi^et=k*X@pXC@w@|~H4-dY=+CV4qa5)>t+52!jCAmFFqi{M3GcE5GSkKQj4r|B|_;x}4);+6AxDigo~ zL)JJ^8k;VuN>al>lwr zqGdm^$@6dWS9Ct})4~T&6*P_!eHt_fl2&R~U delta 110 zcmaFDIhTp+)W2Q(7#J9g7z8GASx&5zVB_RrU}a#NI45B8c19&H1_nkT1PTC2cAz?a tFrR^eRcku~$3~z469X5J1W7Y6Ff(uiNggnp6-e^}d5jEvK$3}p9{@eW48H&X diff --git a/target/classes/com/miniproject/user/controller/DispacherServlet.class b/target/classes/com/miniproject/user/controller/DispacherServlet.class index e94619d250eb8ca25dd2c00650bacdd4783f36b3..e27af19a63782b88cd49866040bc8caaed685643 100644 GIT binary patch delta 17 ZcmX@Yd4!YW)W2Q(7#J9gH*)M@0RTa=29E#$ delta 17 ZcmX@Yd4!YW)W2Q(7#J9gHgfD?0RTa*295v# diff --git a/target/classes/com/miniproject/user/controller/HandlerMapping.class b/target/classes/com/miniproject/user/controller/HandlerMapping.class index c1f89d1ddaaa9c893dd91ad4b846fda031789824..0c8fbcce3376578b27047820e9b4ddb3622c4739 100644 GIT binary patch delta 17 ZcmX@jbef6d)W2Q(7#J9gH*z>L0suhE1`_}P delta 17 ZcmX@jbef6d)W2Q(7#J9gHgY&K0suh91`+@O diff --git a/target/classes/com/miniproject/user/controller/LoginController.class b/target/classes/com/miniproject/user/controller/LoginController.class new file mode 100644 index 0000000000000000000000000000000000000000..ddba788c73d51f75cc88faaad1c5f4c06ef2ca9b GIT binary patch literal 1265 zcmb7DYikoh6g`uqd2Cx#W3{c%ZG9yOE~2Pd5lU$VNo{G;fcR;WjLFp9nK(O};x7{v z^t(Swyt7qf?MCs#&fYuBJ?EY~XTE;>_!+=`G)l-Z1U(%EkyLVI^r7h4Ac=*cO=XP^ zLkgREAl2rtyo3V7!XY2?AmnNg>~>uh!>p@o2{V>G!LZiMgguy?S!XCdC0hH8AzyEF z7z&%ZFG`qYs7~OwjM1iyd4?AU%7|EpW6}2sd?Z6|rB*)m-3>+b#P=$jTq$jRsbb5O zmD~#74(WS868>-0o(B)rIh3%#aK7H0u(hm_YOwCQsWzn&FO#S%Oq&w{L#?TMJnV2I zUH)UUV23hhxRwyNZ6t7Gd%il z(6o>+^Ut^1Wn5!e{pUTASyJ9s(v2ipr=4*Hr>D`F+8UW^910ukkblAr)$d4gL>(3O zc3W+-;>j8AaW^X~%!y$>oC-c=m?;dAcrBfnp4gVoA&Y;!mAlSa40kfYW9mU@=gna9 zy4>ZYFA%GsnbJEY-(dztit-efP^Ps)*@H9(yif36)#g6n%op0t;Vi91Is;Ux5|~S4 z59hE*8TlO-=+qL$%akosyz&|>#zkDBzrbZ&$-uvwfnUqS_o?&zU-8#)o!IAdM1Lb~ j$*n&nImyS8vM84_D08?;H96c$Noy3{rre1;7FPcbf@@BZ literal 0 HcmV?d00001 diff --git a/target/classes/com/miniproject/user/controller/ViewResolver.class b/target/classes/com/miniproject/user/controller/ViewResolver.class index 23908487a663ebdd105d83dd042ae33ceff3b5b4..ae993a8fb3e8c161ab5b5207a5d063b337993469 100644 GIT binary patch delta 17 ZcmX@gbd-tX)W2Q(7#J9gH*(lA0sue%1_1y7 delta 17 ZcmX@gbd-tX)W2Q(7#J9gHgec90suey1^@s6 diff --git a/target/classes/com/miniproject/user/controller/joinController.class b/target/classes/com/miniproject/user/controller/joinController.class new file mode 100644 index 0000000000000000000000000000000000000000..ea80191a5cebeac351a7c317eb5dca8e4d85e1e7 GIT binary patch literal 1331 zcmbVLYflqF6g|@iEel#KDBz0)Uu{fS6O9@%CZquqQy!tv#Q162jxcq1rq0fm_!s;` zCYtDXf0XggqE^CIqaSwm-pSl^&$*AU-#&f@a3A#&aty0o9R-n8a$s~{bZwBt!USEd ztkGdeW?xIy_~n*RV3_IiArC^X4uhSJ3u2gZVJ%^XvMU%?nwh8vqc>{|6Hh6tea4Wl z)!Ph(hVF?HrWh(C_zh#UDdQZ&ivwjutiz$``2;?YA-7U1pJ;bN5k2v}$p%+STVJZ! za%CmA!na5Cy&DMsx73~o50z<@FvD=M)*NMPStHfqnqyOGN+q_Fs3Xiirvwburtb2v z&5d;akIRBRk}<=*Y`tTvNb1Y3uAACK40E;mSrQD3dkLwCL|ev^GOjyusb)&}xT(!y z5Dy&R*M>*pSerM&vFHRHsd_*)HKZY-8TeW1OjK}8W0WaY^&p-kr_c@I(_@IJwNS)KlX^IzyThYNI0&>Nsa zk-&6ndzi%>d9)z7M6c$_ULbFQ?8R4LF)rf@{ROV#S_c004E$;)zE8~af5czG4a&Y$ or1UpaO4;X6kxu%F$Se}`86=9sb5)5&!@I literal 0 HcmV?d00001 diff --git a/target/classes/com/miniproject/userImpl/UserDAO.class b/target/classes/com/miniproject/userImpl/UserDAO.class index 44a893f5c5762884a254775567ac83541378ca07..b8a5c30d4d501ebc98585d832e15edc0179af17e 100644 GIT binary patch literal 1951 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 - - 4.0.0 - com.shoppingmall - biz - ShoppingMall - war - 1.0.0-BUILD-SNAPSHOT - - 1.6 - 3.1.1.RELEASE - 1.6.10 - 1.6.6 - - - - - org.springframework - spring-context - ${org.springframework-version} - - - - commons-logging - commons-logging - - - - - org.springframework - spring-webmvc - ${org.springframework-version} - - - - - org.aspectj - aspectjrt - ${org.aspectj-version} - - - - - org.slf4j - slf4j-api - ${org.slf4j-version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j-version} - runtime - - - org.slf4j - slf4j-log4j12 - ${org.slf4j-version} - runtime - - - log4j - log4j - 1.2.15 - - - javax.mail - mail - - - javax.jms - jms - - - com.sun.jdmk - jmxtools - - - com.sun.jmx - jmxri - - - runtime - + + 4.0.0 + com.shoppingmall + biz + ShoppingMall + war + 1.0.0-BUILD-SNAPSHOT + + 1.8 + 5.3.23 + 1.9.9.1 + 1.7.36 + 4.13.2 + + + + + org.springframework + spring-jdbc + 5.3.24 + - - - javax.inject - javax.inject - 1 - - - - - javax.servlet - servlet-api - 2.5 - provided - - - javax.servlet.jsp - jsp-api - 2.1 - provided - - - javax.servlet - jstl - 1.2 - - - - - junit - junit - 4.7 - test - - + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + log4j + log4j + 1.2.17 + + + + + javax.inject + javax.inject + 1 + + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + javax.servlet + javax.servlet.jsp-api + 2.3.1 + provided + + + javax.servlet + jstl + 1.2 + + + + + junit + junit + ${junit.version} + test + + - - maven-eclipse-plugin - 2.9 - - - org.springframework.ide.eclipse.core.springnature - - - org.springframework.ide.eclipse.core.springbuilder - - true - true - - org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 - 1.6 - 1.6 + ${java.version} + ${java.version} -Xlint:all true true @@ -148,7 +115,7 @@ org.codehaus.mojo exec-maven-plugin - 1.2.1 + 1.6.0 org.test.int1.Main From 255203145e16c788bc5bbf8174204bc42677a014 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 5 Aug 2024 09:22:24 +0900 Subject: [PATCH 2/2] asd --- .../board/controller/BoardController.class | Bin 1219 -> 1219 bytes .../com/miniproject/user/UserService.class | Bin 272 -> 272 bytes .../com/miniproject/user/UserSservice.class | Bin 126 -> 0 bytes .../classes/com/miniproject/user/UserVO.class | Bin 1252 -> 1672 bytes .../user/controller/DispacherServlet.class | Bin 1220 -> 1220 bytes .../user/controller/HandlerMapping.class | Bin 331 -> 331 bytes .../user/controller/LoginController.class | Bin 1265 -> 1636 bytes .../user/controller/ViewResolver.class | Bin 325 -> 325 bytes .../user/controller/joinController.class | Bin 1331 -> 0 bytes .../userImpl/UserDAO$UserRowMapper.class | Bin 0 -> 1576 bytes .../com/miniproject/userImpl/UserDAO.class | Bin 1951 -> 1774 bytes .../userImpl/UserServiceImpl.class | Bin 3183 -> 1566 bytes .../com/shoppingmall/biz/HomeController.class | Bin 1661 -> 1661 bytes .../web-resources/META-INF/MANIFEST.MF | 4 ++-- .../maven/com.shoppingmall/biz/pom.properties | 4 ++-- 15 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 target/classes/com/miniproject/user/UserSservice.class delete mode 100644 target/classes/com/miniproject/user/controller/joinController.class create mode 100644 target/classes/com/miniproject/userImpl/UserDAO$UserRowMapper.class diff --git a/target/classes/com/miniproject/board/controller/BoardController.class b/target/classes/com/miniproject/board/controller/BoardController.class index 470065fd7b66a4d77f73ae92c198a103a9a0abcf..1c807df9ad13a0c9eeb5660bf2fb07ed13c63052 100644 GIT binary patch delta 17 ZcmX@id6<*q)W2Q(7#J9gHgfD{0RTaZ28#dy delta 17 ZcmX@id6<*q)W2Q(7#J9gH*)M|0RTae28;jz diff --git a/target/classes/com/miniproject/user/UserService.class b/target/classes/com/miniproject/user/UserService.class index d0e3bedbf2d626206c4c25767f441c60dbb4012f..67e3c36a9e1b0d8249265186352efea08016593f 100644 GIT binary patch delta 25 hcmbQhG=YiZ)W2Q(7#J9gCUQ7TtO}awVKniK3jlcQ34s6r delta 25 hcmbQhG=YiZ)W2Q(7#J9gCvrGUoMkl8BWU6o7XW#f38DZ1 diff --git a/target/classes/com/miniproject/user/UserSservice.class b/target/classes/com/miniproject/user/UserSservice.class deleted file mode 100644 index 11c8501c19ef7ea637bcab44bd9c82d5b1281a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmX^0Z`VEs1_mPrc6J6PMh3;?{9OIq%)HEkqWrAXs5XaA1+ob7ON9lMPgOtaXheblXVh9N#h9*_rM7K)3OjE1%me`TwR^pR^ zK!W#tD8xAl6sg&Wlo#<`oV%aT|GWJB_4PXdJO|eVgTS^gLN{cbMN*tnU%B&`O7{ep z(V+1(ykYIpLDVB3RIggLOtM@Dvl=!CJ=w4da)N zT|b^thlP=l$_Yd`7H5v{aW0fIrp}+_qEYXuQdH&u93>pjQJ*4e*M|jyY}kM+>(GEU zfvxVUQu^-AKI3#S564s*l%Og!oc`)t7-0-gU-(}Y1X5tdF(hoXV*;O|^iV_m)l4+_;;qy=~^ zGIgD)mldG*vI5Xu7GMv>T>5mM=|(it`QOzuiNDB)Iae&C2YkU|hMjq%=PQ{+WLy1I zHSB@aPYc_F4&a32UseSJpBj1wn3=UQThFYW*al`aU>(;>82tjX30nIbYWB%DNVRrns5)=|0ro_ um6KlF&(XomRr29Egghnl36Dw>x}^!dk^}=Dqjm;7fv3r&8t@G5F2HXyT|TP- literal 1252 zcma)4%Wl&^6g}g_b`l%f1{x@B>4O4EitvIRAT~%yNKuMZ$lh_SbV_1Jj>C6>1VUoL z2k=pdbL~_WbcDQ_J9FlqbDzI{|M&^u8J@VX6t<&u7R+>_=UI9YM|rSZ#98ox$LPdG zU19wq{1gV$Fqs4=WARY1^qE3?aP@JTXF8d@P^izt#eyaYXR(4kKTi|dMxvvSCFHzh zsQi^et=k*X@pXC@w@|~H4-dY=+CV4qa5)>t+52!jCAmFFqi{M3GcE5GSkKQj4r|B|_;x}4);+6AxDigo~ zL)JJ^8k;VuN>al>lwr zqGdm^$@6dWS9Ct})4~T&6*P_!eHt_fl2&R~U diff --git a/target/classes/com/miniproject/user/controller/DispacherServlet.class b/target/classes/com/miniproject/user/controller/DispacherServlet.class index e27af19a63782b88cd49866040bc8caaed685643..e94619d250eb8ca25dd2c00650bacdd4783f36b3 100644 GIT binary patch delta 17 ZcmX@Yd4!YW)W2Q(7#J9gHgfD?0RTa*295v# delta 17 ZcmX@Yd4!YW)W2Q(7#J9gH*)M@0RTa=29E#$ diff --git a/target/classes/com/miniproject/user/controller/HandlerMapping.class b/target/classes/com/miniproject/user/controller/HandlerMapping.class index 0c8fbcce3376578b27047820e9b4ddb3622c4739..c1f89d1ddaaa9c893dd91ad4b846fda031789824 100644 GIT binary patch delta 17 ZcmX@jbef6d)W2Q(7#J9gHgY&K0suh91`+@O delta 17 ZcmX@jbef6d)W2Q(7#J9gH*z>L0suhE1`_}P diff --git a/target/classes/com/miniproject/user/controller/LoginController.class b/target/classes/com/miniproject/user/controller/LoginController.class index ddba788c73d51f75cc88faaad1c5f4c06ef2ca9b..dc8d9a7ea7fa90e245c0911072a742894719c9d5 100644 GIT binary patch delta 809 zcmah`U279T6g@NB=3}#I)9qJmO_R39Hrb?WYt`2Hfm8%B+J|aD1ZA3Cx z=(C7m*?-|v1*NFqqYpm%8~g*liime7MSOFY-I;Ue+;h*p^CS6PQ@{TH_!+-;ksTR0>^XBE8W1`bvm|HW9VD+EL(+w zw1zka7?k-^BMF9#hJM7tBC}#?|B<&_4_~rrwh~V9#qcK^Qj=!eYdP+M<%K%Gk(^@a zmx1s#zn@BB1}EZ}Whh8bsSyoDoMcE!&K=+GFsy|kpQGb+1RLwMIOZ8DVV-BhZ+v7X zfih`2u4O+>ph8Z&L{l+`g~+MNuuA#G2lXwnBh0pNTju)amfZ|$rA7ja4Dlzn?~9h5 zz-flz>+X(dJ654dZQE|(h_=tb9g9K#M`0uAIBqK%%eL@|kc&o|JMzbn-UvkV@lCOP zTWq%NILS+|&Hqv4Lfrkq!-0Q-ep9IJFv WBg}C@PDKaL;35UaDY-YAOMd{e>4y~n literal 1265 zcmb7DYikoh6g`uqd2Cx#W3{c%ZG9yOE~2Pd5lU$VNo{G;fcR;WjLFp9nK(O};x7{v z^t(Swyt7qf?MCs#&fYuBJ?EY~XTE;>_!+=`G)l-Z1U(%EkyLVI^r7h4Ac=*cO=XP^ zLkgREAl2rtyo3V7!XY2?AmnNg>~>uh!>p@o2{V>G!LZiMgguy?S!XCdC0hH8AzyEF z7z&%ZFG`qYs7~OwjM1iyd4?AU%7|EpW6}2sd?Z6|rB*)m-3>+b#P=$jTq$jRsbb5O zmD~#74(WS868>-0o(B)rIh3%#aK7H0u(hm_YOwCQsWzn&FO#S%Oq&w{L#?TMJnV2I zUH)UUV23hhxRwyNZ6t7Gd%il z(6o>+^Ut^1Wn5!e{pUTASyJ9s(v2ipr=4*Hr>D`F+8UW^910ukkblAr)$d4gL>(3O zc3W+-;>j8AaW^X~%!y$>oC-c=m?;dAcrBfnp4gVoA&Y;!mAlSa40kfYW9mU@=gna9 zy4>ZYFA%GsnbJEY-(dztit-efP^Ps)*@H9(yif36)#g6n%op0t;Vi91Is;Ux5|~S4 z59hE*8TlO-=+qL$%akosyz&|>#zkDBzrbZ&$-uvwfnUqS_o?&zU-8#)o!IAdM1Lb~ j$*n&nImyS8vM84_D08?;H96c$Noy3{rre1;7FPcbf@@BZ diff --git a/target/classes/com/miniproject/user/controller/ViewResolver.class b/target/classes/com/miniproject/user/controller/ViewResolver.class index ae993a8fb3e8c161ab5b5207a5d063b337993469..23908487a663ebdd105d83dd042ae33ceff3b5b4 100644 GIT binary patch delta 17 ZcmX@gbd-tX)W2Q(7#J9gHgec90suey1^@s6 delta 17 ZcmX@gbd-tX)W2Q(7#J9gH*(lA0sue%1_1y7 diff --git a/target/classes/com/miniproject/user/controller/joinController.class b/target/classes/com/miniproject/user/controller/joinController.class deleted file mode 100644 index ea80191a5cebeac351a7c317eb5dca8e4d85e1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1331 zcmbVLYflqF6g|@iEel#KDBz0)Uu{fS6O9@%CZquqQy!tv#Q162jxcq1rq0fm_!s;` zCYtDXf0XggqE^CIqaSwm-pSl^&$*AU-#&f@a3A#&aty0o9R-n8a$s~{bZwBt!USEd ztkGdeW?xIy_~n*RV3_IiArC^X4uhSJ3u2gZVJ%^XvMU%?nwh8vqc>{|6Hh6tea4Wl z)!Ph(hVF?HrWh(C_zh#UDdQZ&ivwjutiz$``2;?YA-7U1pJ;bN5k2v}$p%+STVJZ! za%CmA!na5Cy&DMsx73~o50z<@FvD=M)*NMPStHfqnqyOGN+q_Fs3Xiirvwburtb2v z&5d;akIRBRk}<=*Y`tTvNb1Y3uAACK40E;mSrQD3dkLwCL|ev^GOjyusb)&}xT(!y z5Dy&R*M>*pSerM&vFHRHsd_*)HKZY-8TeW1OjK}8W0WaY^&p-kr_c@I(_@IJwNS)KlX^IzyThYNI0&>Nsa zk-&6ndzi%>d9)z7M6c$_ULbFQ?8R4LF)rf@{ROV#S_c004E$;)zE8~af5czG4a&Y$ or1UpaO4;X6kxu%F$Se}`86=9sb5)5&!@I diff --git a/target/classes/com/miniproject/userImpl/UserDAO$UserRowMapper.class b/target/classes/com/miniproject/userImpl/UserDAO$UserRowMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..d4c17bcabc28026298ba33edbb4075817aa6f672 GIT binary patch literal 1576 zcmc&!ZBG+H5T31twr3GU@%?30R7gx~44*6^A%L-_*hmYBAGg<`UA)^pclSX4h5yDx z6aDUwGS0T;kl0`}QPcGH=5}76d1k(T`}i3Ep1^|wSwrJSesM$Yq>p zJkaJ%Wv|-_c_@_9j(3nBx%+E&U7^Q@dqH`$k?;}@$0%^8x!~?F!JzctRX5_q9d4mb zBeyP`SPet8cH>=$$pHPI(fq^gGq(H!5Z~e$U0-*3EE2L>7$(<3_lQg77P;OXV8=&X zteoH?k5fzJ*hgbz7l|dFFGL?yjxe_=(bWS#3K0ZQgsC!2z&QqU3you5ww$L{&GUA; zAr-z%;|`j(ASyDLZRk)$JHkjWk3QyIUs?u_8^1R^HJX!Qp$wKr8Q8Z`HLJQ-UmWXl zFpE1)vJbL$*#caqLI!1cC#_eF?5+q`8N5Gz$c|?0-!*`;Z|T&8_)L0a%STQ1B`_$p zWKRi~8oFBkp*zD3Q)^_TT0Rw`6#{9lu0pM>w2r9oT%r*s>>pCZx>9J?B4I5Oe0Lc5 z?Q`n(V=#4sa|M{ERI^;j=ccrl=+h>qS>Qk$khUv8j(!s`NpgXtCHl(f3_d~e^=$9~ z%3lUL)AaN@0C||9XL+av=V6v41{dHW`I#HsGq{xb@-c?Ku8i^ZaEz}BxJEWPxDGc4 a=S{dpC%|p`2Na30fV=c|pX5AA_r3!%GTm$d literal 0 HcmV?d00001 diff --git a/target/classes/com/miniproject/userImpl/UserDAO.class b/target/classes/com/miniproject/userImpl/UserDAO.class index b8a5c30d4d501ebc98585d832e15edc0179af17e..248ced59092f01104a9faab7e2e4506ce7d11542 100644 GIT binary patch literal 1774 zcmc&!ZBG+H5S}fSma_=rYkgf1wM5fPjGx4qRKNsN#FWxRzisaZSiHMEceg9^KaiI6v26P+U+Umf$RdiNgp>S}R?KaaOSFiAJNM9Sj}MR8lOd5>8yZ z5ys{T_r}^=$Yq==ZMo8$b(3nDY;I@~W(E3M3N}WyT}jV{@J}ysN8VF*~vM; zt>S{)ev01Me?Phur?%fh(~GRDS0f0}n5De{(=7YHX7dl(x76;6NK@1&B*c|CM!Tg# z9*dN2)du9&&_3icv2$E)WVz$}nytJ25Iyc062}f|Ekh)gIK7a3FtL<#(<1^d@%te> z4?LKtKnW%pTpDP1p!_xKq?PG*qA3%6)r-5R+k&LXV5+GC5p{%?&fou8v|G|Jm}#EW zWYjNJgAp~BWB$Cq95#~hwJ?S>95PtQp^-J!QDV7avOeyt&X?gTgAb=@sNay^-w1_) zClh*X_F|etwPV@Oy)DBH2F>I7yLoVW`ov%`ie5-p!ODSn+$5rUw0en^F?OVpRMCc; zAldYxf<9={sPTUqHNLT^Q8_93Elib>R_Q)fwz8Zgs23tCCz=x6VNgFw53@%E%wYV8 zUxIstI{Z*_SEMl{&o+fOFbxbwXv&i=;S7wDH9~d?%CwG=_n7H z72rIrqjUzKNH+m0neD*^xJVxL16&?La1jOwS8@=lxd>IbHiU4<;d&0jbPhrhZc@|& b+=AP*JFcAeY5F{}XXu+H>puBKvhV%?(CQN} literal 1951 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