-
2022-03-23 스프링 부트 : 쇼핑몰#1학원/Spring 2022. 3. 23. 16:02
MAVEN을 이용한 쇼핑몰 만들기
- pom.xml 수정
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpM17</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBoot_M17_shop</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <repositories> <repository> <id>oracle</id> <name>ORACLE JDBC Repository</name> <url>http://maven.jahia.org/maven2</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- JSP --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- file Upload --> <dependency> <groupID>servlets.com</groupID> <artifactId>cos</artifactId> <version>05Nov2002</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
- application.properties
#Server port server.port=8070 #about JSP spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp #multi-part Form spring.servlet.multipart.enabled=false #oracle set spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=scott spring.datasource.password=tiger #mybatis mybatis.mapper-locations=classpath:mybatis/mapper
jsp, css, js 파일들은 다 재사용할 것
-> 인클루드할 header,footer.jsp 는 views 폴더 안에 있어야함 (jsp 파일은 모두 views안에)
--> header에 loginUser의 필드명을 대문자로
--> CSS와 JS 경로는 src="/script/member.js" 형식으로 작성한다
index 페이지
ProductController
package com.ezen.spm17.controller; import java.util.ArrayList; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; 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.servlet.ModelAndView; import com.ezen.spm17.service.ProductService; @Controller public class ProductController { @Autowired ProductService ps; @RequestMapping("/") public ModelAndView index( HttpServletRequest request, Model model) { ModelAndView mav = new ModelAndView(); HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("ref_cursor1", null); paramMap.put("ref_cursor2", null); ps.getBestNewProduct(paramMap); ArrayList<HashMap<String, Object>> list1 = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor1"); ArrayList<HashMap<String, Object>> list2 = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor2"); mav.addObject("newProductList", list1); mav.addObject("bestProductList", list2); mav.setViewName("main"); return mav; } }
ProductDao
<?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.ezen.spm17.dao.IProductDao"> <resultMap id="productMap" type="java.util.HashMap"></resultMap> <resultMap id="productMap2" type="java.util.HashMap"></resultMap> <select id="getBestNewProduct" statementType="CALLABLE" parameterType="java.util.HashMap"> {CALL getBestNewProduct( #{ref_cursor1, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=productMap}, #{ref_cursor2, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=productMap2} )} </select> </mapper>
프로시저
create or replace PROCEDURE getBestNewProduct( p_cur1 OUT SYS_REFCURSOR, p_cur2 OUT SYS_REFCURSOR ) IS BEGIN open p_cur1 for select * from new_pro_view; open p_cur2 for select * from best_pro_view; END;
에러
1) org.xml.sax.saxparseexception 프롤로그에서는 콘텐츠가 허용되지 않습니다
-> 검색해보니 xml 파일 첫번째줄
<?xml version="1.0" encoding="UTF-8"?>
앞에 어떤 문자가 들어가서 나는 에러라고 나오는데 새로 파일을 만들고 다시 써보고 프로젝트도 새로 만들어보고 했는데도 고쳐지질 않았다..
결국 뭐가 문제였냐면
application.properties에서 mybatis 관련 코드를
mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml
로 작성 해야되는데
mybatis.mapper-locations=classpath:mybatis/mapper 까지만 작성해서 생긴 오류였다...
복붙을 잘하자...
2) org.xml.sax.saxparseexception 예기치 않은 파일의 끝입니다
-> 위 오류 수정 중에 새로운 xml 파일을 만들어놓고 아무것도 작성하지 않은 채로 내버려둬서 생긴 오류
빈 xml파일을 삭제하니 고쳐졌다
로그인 / 로그아웃
MemberController
@RequestMapping(value="/loginForm") public String loginForm() { return "member/login"; } @RequestMapping(value="/login", method=RequestMethod.POST) public String login( @ModelAttribute("dto") @Valid MemberVO membervo, BindingResult result, HttpServletRequest request, Model model) { System.out.println(membervo.getUserid()); if( result.getFieldError("userid") != null ) { model.addAttribute("message" , "아이디를 입력하세요"); return "member/login"; }else if( result.getFieldError("pwd") != null ) { model.addAttribute("message" , "패스워드를 입력하세요"); return "member/login"; }else { HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("userid", membervo.getUserid() ); paramMap.put("ref_cursor", null); ms.getMember(paramMap); ArrayList< HashMap<String,Object> > list = (ArrayList<HashMap<String, Object>>) paramMap.get("ref_cursor"); if(list.size() == 0) { // 입력한 아이디 없다면 model.addAttribute("message" , "아이디가 존재하지 않습니다"); return "member/login"; } HashMap<String, Object> mvo = list.get(0); if(mvo.get("PWD")==null) { model.addAttribute("message" , "관리자에게 문의하세요"); return "member/login"; }else if( membervo.getPwd().equals( (String)mvo.get("PWD") ) ) { HttpSession session = request.getSession(); session.setAttribute("loginUser", mvo); return "redirect:/"; }else { model.addAttribute("message" , "비밀번호가 일치하지 않습니다."); return "member/login"; } } } @RequestMapping(value="/logout") public String logout(HttpServletRequest request) { HttpSession session = request.getSession(); session.removeAttribute("loginUser"); return "redirect:/"; }
MemberDao
<?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.ezen.spm17.dao.IMemberDao"> <resultMap id="memberMap" type="java.util.HashMap"></resultMap> <select id="getMember" statementType="CALLABLE" parameterType="java.util.HashMap"> { CALL getMember_s( #{userid}, #{ref_cursor , mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=memberMap} ) } </select> </mapper>
프로시저
CREATE OR REPLACE PROCEDURE getMember_s( p_userid IN member2.userid%TYPE, p_curvar OUT SYS_REFCURSOR ) IS BEGIN OPEN p_curvar FOR SELECT * FROM member2 WHERE userid=p_userid; END;
'학원 > Spring' 카테고리의 다른 글
2022-03-25 스프링부트 : 쇼핑몰#3 (0) 2022.03.25 2022-03-24 스프링부트 : 쇼핑몰#2 (0) 2022.03.24 2022-03-23 스프링부트 : 프로시저를 이용한 게시판#3 (0) 2022.03.23 2022-03-22 스프링부트 : 프로시저를 이용한 게시판#2 (0) 2022.03.22 2022-03-17 스프링 부트 : 게시판 만들기 #3 게시판 (0) 2022.03.17