-
[Spring] 스프링 프레임워크 : STS에서 JSP 사용하기º Server º/Spring 2023. 7. 8. 08:25
- packaging : war로 설정하고 만들어줌
- next → oracle, Spring web, lombok추가
2. pom.xml 추가
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
3. application.properties 설정하기
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE spring.datasource.data-username=c##madang spring.datasource.data-password=madang server.port=8088 server.session.timeout=36000 spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
4. WEB-INF폴더 생성 → views 폴더 생성
5. STS → HELP → jsp 검색 → 설치
< 실습하기 >
- 순서
1. vo, dao 폴더 만들어서 생성
package com.example.demo.vo; import lombok.Data; @Data public class DeptVO { private int dno; private String dname; private String dloc; }
package com.example.demo.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import org.springframework.stereotype.Repository; import com.example.demo.vo.BookVO; @Repository public class BookDAO { public ArrayList<BookVO> findAll (){ ArrayList<BookVO> list = new ArrayList<>(); String sql = "select * from book"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","c##madang","madang"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { BookVO d = new BookVO(); d.setBookied(rs.getInt(1)); d.setBookname(rs.getString(2)); d.setPublisher(rs.getString(3)); d.setPrice(rs.getInt(4)); list.add(d); } if(rs != null) { rs.close(); } if(conn != null) { conn.close(); } if(stmt != null) { stmt.close(); } } catch (Exception e) { System.out.println("예외발생 : "+e.getMessage()); } return list; } }
2. com.example.demo.controller 컨트롤러 만들어서 상태유지
- 조회, 수정, 삭제, 추가 모두 하나의 컨트롤러에 입력 가능
package com.example.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.example.demo.dao.DeptDAO; import com.example.demo.vo.DeptVO; import com.fasterxml.jackson.annotation.JsonCreator.Mode; //이 클래스를 스프링의 컨트롤러로 지정하기 위한 어노테이션입니다. @Controller public class DeptController { // DeptDAO 타입의 객체를 자동으로 주입받기 위해 @Autowired 어노테이션을 사용하고 있습니다. // 이 객체는 dao 변수에 할당됩니다. @Autowired private DeptDAO dao; //DeptDAO 객체를 설정하기 위한 setter 메소드입니다. public void setDao(DeptDAO dao) { this.dao = dao; } // method가 get인 경우 해당 메소드로 옵니다. //@RequestMapping(value = "/insertDept", method = RequestMethod.GET) @GetMapping("/insertDept") public void insertForm() { } // method가 post인 경우 해당 메소드로 옵니다. //@RequestMapping(value = "/insertDept", method = RequestMethod.POST) @PostMapping("/insertDept") //사용자의 form 에 입력되서 온 데이터를 매개변수로 지정된 vo에 바로 담아줍니다. -> (command object라고 함) public ModelAndView insertSubmit(DeptVO d) { int re = dao.insert(d); ModelAndView mav = new ModelAndView("insertDeptOK"); String msg = "부서 등록에 성공했습니다."; if(re != 1) { msg = " 부서등록에 실패하였습니다."; } //상태유지하기 위한 메소드 addObject(); mav.addObject("msg",msg); return mav; } @RequestMapping("/listDept") public ModelAndView list() { ModelAndView mav = new ModelAndView(); // findAll() 메소드를 호출하여 "list"라는 이름으로 모델에 데이터를 추가 mav.addObject("list",dao.findAll()); // "listDept"라는 뷰를 설정하여 ModelAndView 객체를 반환 mav.setViewName("listDept"); return mav; } }
3. WEB-INF → views 에서 결과 도출할 jsp 만들기
- 조회 jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="<http://java.sun.com/jsp/jstl/core>"%>
부서목록
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>부서목록</h2> <hr> <table border="1" width:80%> <tr> <th>부서번호</th> <th>부서이름</th> <th>부서주소</th> </tr> <c:forEach var="d" items="${list }"> <tr> <td>${d.dno }</td> <td>${d.dname }</td> <td>${d.dloc }</td> </tr> </c:forEach> </table> </body> </html>
- 추가 jsp (insertDept, insertDeptOK)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>부서등록</h2> <hr> <form action="insertDept" method="post"> 부서번호 : <input type="text" name="dno"><br> 부서이름 : <input type="text" name="dname"><br> 부서위치 : <input type="text" name="dloc"><br> <input type="reset" value="다시입력"> <input type="submit" value="등록"> </form> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${msg } </body> </html>
+ 리다이렉트 뷰 값을 설정해주면 지정한 페이지로 이동시키게 됩니다.
- 그러나 보통은 요청한 이름의 뷰로 설정하는 것이 대부분입니다.
그래서 현재의 스프링부트에서는 따로 뷰를 지정하지 않아도 요청한 이름의 뷰가 자동으로 설정됩니다.
예시 )
- ModelAndView 클래스 불러와서 사용 (리다이렉트 뷰 값을 설정)
//기본방식 @RequestMapping("/listBook") public ModelAndView listBook() { ModelAndView mav = new ModelAndView(); mav.setViewName("listBook"); mav.addObject("list",dao.findAll()); return mav; }
- model 에 상태유지 (뷰가 자동으로 같은 이름의 JSP로 이동하게 됨)
// 뷰가 자동으로 설정되어 간단히 작성한 방식 @RequestMapping("/listBook") public void listBook(Model model) { model.addAttribute("list",dao.findAll()); }
'º Server º > Spring' 카테고리의 다른 글
[Spring] 스프링 프레임워크 : 스프링 툴 스위트 (STS) 설치 (0) 2023.07.07 [Spring] 스프링 프레임워크 : DI (의존성 주입) / Spring Tools 3 설치 (0) 2023.06.27