목차
SERVICE
pom.xml
java version up
<java-version>1.8</java-version>
...
...
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
spring version up
<org.springframework-version>5.3.39</org.springframework-version>
spring (jdbc,tx,aop,test) 추가
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
aspectj 추가
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
servlet 버전업
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
junit 버전업
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
lombok,mybatis,dbcp,h2,jacksonbind 추가
<!-- user add libs -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
dept.model
DeptVo
package com.semiproject.test49.dept.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeptVo {
private int deptno;
private String dname,loc;
}
DeptDao(Interface)
package com.semiproject.test49.dept.model;
import java.util.List;
public interface DeptDao {
List<DeptVo> pullList();
DeptVo getList(int idx);
int addList(DeptVo bean);
int setList(DeptVo bean);
int rmList(int idx);
}
DeptDaoImpl
package com.hotels.api01.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
//@Repository
public class DeptDaoImpl implements DeptDao {
@Autowired
JdbcTemplate jdbcTemplate;
RowMapper<DeptVo> rowMapper =new RowMapper<DeptVo>() {
@Override
public DeptVo mapRow(ResultSet rs, int rowNum) throws SQLException {
return DeptVo.builder()
.deptno(rs.getInt("deptno"))
.dname(rs.getString("dname"))
.loc(rs.getString("loc"))
.build();
}
};
@Override
public List<DeptVo> pullList(){
return jdbcTemplate.query("select * from dept", rowMapper);
}
@Override
public void addList(DeptVo bean) {
jdbcTemplate.update("insert into dept (deptno,dname,loc) values (?,?,?)"
,bean.getDeptno(),bean.getDname(),bean.getLoc());
}
@Override
public DeptVo getList(int deptno) {
// TODO Auto-generated method stub
return null;
}
@Override
public int setList(DeptVo bean) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int rmList(int deptno) {
// TODO Auto-generated method stub
return 0;
}
}
.config
RootConfig
package com.hotels.api01.config;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@ComponentScan(basePackages = {"com.hotels.api01"})
@MapperScan("com.hotels.api01.model")
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class RootConfig {
@Bean
public DataSource dataSource() {
BasicDataSource dataSource=new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/xe");
dataSource.setUsername("scott");
dataSource.setPassword("tiger");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate() {
JdbcTemplate template=new JdbcTemplate();
template.setDataSource(dataSource());
return template;
}
@Bean
public TransactionManager transactionManager() {
DataSourceTransactionManager transaction;
transaction=new DataSourceTransactionManager(dataSource());
return transaction;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factory=new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
return factory.getObject();
}
}
ServletConfig
package com.hotels.api01.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@ComponentScan(basePackages = {"com.hotels.api01"})
public class ServletConfig implements WebMvcConfigurer{
@Override
public void configureViewResolvers(ViewResolverRegistry reg) {
InternalResourceViewResolver viewResolver=null;
viewResolver=new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
reg.viewResolver(viewResolver);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry reg) {
reg.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
WebConfig
package com.hotels.api01.config;
import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig
extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {ServletConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter=null;
filter=new CharacterEncodingFilter();
filter.setEncoding("utf-8");
filter.setForceEncoding(true);
return new Filter[] {filter};
}
}
HomeController
package com.hotels.api01;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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.bind.annotation.RestController;
import com.hotels.api01.model.DeptDao;
import com.hotels.api01.model.DeptVo;
import com.hotels.api01.model.HotelsDao;
@RestController
public class HomeController {
@Autowired
DeptDao deptDao;
@Autowired
HotelsDao hotelsDao;
// @RequestMapping("/")
// public String home() {
// return "home";
// }
@RequestMapping(value = "/", method = RequestMethod.GET)
public ResponseEntity<?> home() {
return ResponseEntity.ok(deptDao.pullList());
}
@RequestMapping(value = "/hotels/", method = RequestMethod.GET)
public ResponseEntity<?> hotels() {
return ResponseEntity.ok(hotelsDao.pullList());
}
@PostMapping("/")
public ResponseEntity<?> add(@ModelAttribute DeptVo bean){
deptDao.addList(bean);
return ResponseEntity.ok().build();
}
}
WEB
pom.xml
java version up
<java-version>1.8</java-version>
...
...
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
spring version up
<org.springframework-version>5.3.39</org.springframework-version>
servlet version up
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
junit 버전업
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
lombok,jacksonbind 추가
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
projname.model
DeptVo
package com.semiproject.test50.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeptVo {
private int deptno;
private String dname,loc;
}
projname
HomeController
package com.semiproject.test50;
import java.net.URI;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import com.fasterxml.jackson.core.JsonFactory;
import com.semiproject.test50.model.DeptVo;
@Controller
public class HomeController {
@GetMapping("/")
public String index() {
return "index";
}
@GetMapping("/intro")
public void intro() {}
@GetMapping("/emp/")
public String emp() {
return "emp";
}
@GetMapping("/dept/")
public String dept(Model model) {
RestTemplate template=new RestTemplate();
String msg=template.getForObject("http://localhost:8080/day49/api/dept/", String.class);
model.addAttribute("list", msg);
return "dept";
}
@PostMapping("/dept/")
public String dept(String dname, String loc) {
RestTemplate template=new RestTemplate();
URI url=UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/test49/api/dept/")
.queryParam("dname", dname)
.queryParam("loc", loc)
.build().toUri()
;
template.postForLocation(url, null);
return "redirect:./";
}
@GetMapping("/dept/add")
public String add() {
return "add";
}
@GetMapping("/dept/{deptno}")
public String detail(@PathVariable int deptno,Model model) {
RestTemplate template=new RestTemplate();
DeptVo msg=template.getForObject("http://localhost:8080/test49/api/dept/"+deptno, DeptVo.class);
// ResponseEntity<DeptVo> msg=template.getForEntity("http://localhost:8080/day49/api/dept/"+deptno, DeptVo.class);
// System.out.println(msg.getHeaders());
// System.out.println(msg.getBody());
model.addAttribute("bean", msg);
return "detail";
}
@PostMapping("/dept/{deptno}")
public String edit(@PathVariable int deptno,@ModelAttribute DeptVo bean) {
RestTemplate template=new RestTemplate();
MultiValueMap<String, String> headers=new LinkedMultiValueMap();
headers.add("Content-Type", "application/json");
//
String body="{\"dname\":\""+bean.getDname()
+"\",\"loc\":\""+bean.getLoc()+"\",\"deptno\":"+bean.getDeptno()+"}";
//
HttpEntity requestEntity=new HttpEntity<String>(body, headers);
// ResponseEntity<String> msg=template.exchange("http://localhost:8080/day49/api/dept/"+deptno
// , HttpMethod.PUT, requestEntity, String.class,new Object[] {});
// System.out.println(msg.getBody());
URI url=UriComponentsBuilder.fromUriString("http://localhost:8080")
.path("/test49/api/dept/"+deptno).build().toUri();
template.exchange(url, HttpMethod.PUT, requestEntity, String.class);
return "redirect:./";
}
@GetMapping("/hotels/")
public String hotels(Model model) {
RestTemplate template=new RestTemplate();
List<HotelsVo> msg=template.getForObject("http://localhost:8080/api01/hotels/", List.class);
model.addAttribute("list", msg);
return "hotels";
}
}
/WEB-INF/views/
/template/menu.jspf
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="${pageContext.request.contextPath }" var="root"/>
<ul>
<li><a href="${root }/">home</a></li>
<li><a href="${root }/intro">intro</a></li>
<li><a href="${root }/emp/">emp</a></li>
<li><a href="${root }/dept/">dept</a></li>
</ul>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="template/menu.jspf" %>
<div class="container">
<div class="jumbotron">
<h2>index page</h2>
</div>
</div>
</body>
</html>
dept.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="template/menu.jspf" %>
<div class="container">
<div class="jumbotron">
<h2>dept page</h2>
</div>
<table>
<thead>
<tr>
<th>deptno</th>
<th>dname</th>
<th>loc</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<p><a href="add">입력</a></p>
</div>
<script type="text/javascript">
var arr=${list};
var table=document.querySelector('table');
var tbody=table.querySelector('tbody');
tbody.innerHTML=arr.map(
ele=>'<tr><td><a href="./'+ele.deptno+'">'+ele.deptno
+'</a></td><td>'+ele.dname
+'</td><td>'+ele.loc+'</td><tr>'
).reduce((a,b)=>a+b);
</script>
</body>
</html>
hotels.jsp
<%@ 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>
<div class="container">
<div class="jumbotron">
<h2>hotels page</h2>
</div>
<table>
<thead>
<tr>
<th>hotel_id</th>
<th>hotel_name</th>
<th>location</th>
</tr>
</thead>
<tbody>
<!--
-->
<c:forEach items="${list }" var="bean">
<tr>
<td>${bean.hotel_id }</td>
<td>${bean.hotel_name }</td>
<td>${bean.location }</td>
</tr>
</c:forEach>
</tbody>
</table>
<p><a href="add">입력</a></p>
</div>
<!--
<script type="text/javascript">
var arr=${list};
var table=document.querySelector('table');
var tbody=table.querySelector('tbody');
tbody.innerHTML=arr.map(
ele=>'<tr><td><a href="./'+ele.hotel_id+'">'+ele.hotel_id
+'</a></td><td>'+ele.hotel_name
+'</td><td>'+ele.location+'</td><tr>'
).reduce((a,b)=>a+b);
</script>
-->
</body>
</html>
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day 72 - spring boot 로 웹사이트 만들기 (0) | 2024.11.11 |
---|---|
semiproject 배포하기 (1) | 2024.11.05 |
Day 48 - Spring 4.x & MyBatis Lombok 사용하기 (0) | 2024.10.11 |
Day 53 - java 17을 이용한, xml을 사용하지 않는 프로그램 만들기 (0) | 2024.10.11 |
Day 53 - Spring 5.x guest file upload/download 프로그램 만들기 - (1) | 2024.10.11 |