This commit is contained in:
lunaticbum
2024-09-25 16:50:58 +09:00
parent 3c392310df
commit 25fcb01d23
21 changed files with 619 additions and 0 deletions
@@ -0,0 +1,39 @@
package kr.lunaticbum.back.lun
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Bean
import java.util.*
@SpringBootApplication
class LunApplication
fun main(args: Array<String>) {
runApplication<LunApplication>(*args)
}
//
//@SpringBootApplication
//class Application {
// @Bean
// fun commandLineRunner(ctx: ApplicationContext): CommandLineRunner {
// return CommandLineRunner { args: Array<String?>? ->
// println("Let's inspect the beans provided by Spring Boot:")
// val beanNames: Array<String> = ctx.getBeanDefinitionNames()
// Arrays.sort(beanNames)
// for (beanName in beanNames) {
// println(beanName)
// }
// }
// }
//
// companion object {
// @JvmStatic
// fun main(args: Array<String>) {
// SpringApplication.run(Application::class.java, *args)
// }
// }
//}
@@ -0,0 +1,31 @@
package kr.lunaticbum.back.lun.configs
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.config.annotation.EnableWebMvc
@Configuration
@EnableWebMvc
class AppConfig {
// @Bean
// fun memberRepository(): MemberRepository {
// return MemoryMemberRepository()
// }
//
// @Bean
// fun discountPolicy(): DiscountPolicy {
// return RateDiscountPolicy()
// }
//
// @Bean
// fun memberService(): MemberService {
// return MemberServiceImpl(memberRepository())
// }
//
// @Bean
// fun orderService(): OrderService {
// return OrderServiceImpl(memberRepository(), discountPolicy())
// }
}
@@ -0,0 +1,14 @@
package kr.lunaticbum.back.lun.configs
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.FilterType
import org.springframework.web.servlet.config.annotation.EnableWebMvc
@Configuration
@EnableWebMvc
@ComponentScan(excludeFilters = [ComponentScan.Filter(type = FilterType.ANNOTATION, classes = arrayOf(Configuration::class))])
class AutoAppConfig {
}
@@ -0,0 +1,7 @@
package kr.lunaticbum.back.lun.configs
import org.springframework.context.annotation.Configuration
@Configuration
class RootAppContext {
}
@@ -0,0 +1,30 @@
package kr.lunaticbum.back.lun.configs
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
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
// Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration // Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다.
@EnableWebMvc // 스캔할 패키지를 지정한다.
@ComponentScan("kr.lunaticbum.back.lun.controllers")
internal class ServletAppContext : WebMvcConfigurer {
// Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로와 확장자를 붙혀주도록 설정한다.
override fun configureViewResolvers(registry: ViewResolverRegistry) {
// TODO Auto-generated method stub
super.configureViewResolvers(registry)
// registry.viewResolver { viewName, locale -> }
// registry.jsp("/WEB-INF/views/", ".jsp")
}
// 정적 파일의 경로를 매핑한다.
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
// TODO Auto-generated method stub
super.addResourceHandlers(registry)
registry.addResourceHandler("/**").addResourceLocations("/resources/")
}
}
@@ -0,0 +1,17 @@
package kr.lunaticbum.back.lun.configs
import jakarta.servlet.ServletContext
import org.springframework.web.WebApplicationInitializer
import org.springframework.web.filter.CharacterEncodingFilter
class SpringConfigClass : WebApplicationInitializer {
override fun onStartup(servletContext: ServletContext) {
val filter = servletContext.addFilter("encodingFilter", CharacterEncodingFilter::class.java)
filter.setInitParameter("encoding", "UTF-8")
filter.addMappingForServletNames(null, false, "dispatcher")
}
}
@@ -0,0 +1,33 @@
package kr.lunaticbum.back.lun.configs
import jakarta.servlet.ServletContext
import jakarta.servlet.ServletException
import org.springframework.web.WebApplicationInitializer
import org.springframework.web.context.ContextLoaderListener
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext
import org.springframework.web.servlet.DispatcherServlet
class WebConfig : WebApplicationInitializer {
@Throws(ServletException::class)
override fun onStartup(servletContext: ServletContext) {
// Spring MVC 프로젝트 설정을 위해 작성하는 클래스의 객체를 생성한다.
val servletAppContext = AnnotationConfigWebApplicationContext()
servletAppContext.register(ServletAppContext::class.java)
// 요청 발생 시 요청을 처리하는 서블릿을 DispatcherServlet으로 설정해준다.
val dispatcherServlet = DispatcherServlet(servletAppContext)
val servlet = servletContext.addServlet("dispatcher", dispatcherServlet)
// 부가 설정
servlet.setLoadOnStartup(1)
servlet.addMapping("/")
// Bean을 정의하는 클래스를 지정한다.
val rootAppContext = AnnotationConfigWebApplicationContext()
rootAppContext.register(RootAppContext::class.java)
val listener = ContextLoaderListener(rootAppContext)
servletContext.addListener(listener)
}
}
@@ -0,0 +1,16 @@
package kr.lunaticbum.back.lun.controllers
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("tlbt")
class Telegram {
@ResponseBody
@GetMapping("/hello")
fun hello(): String {
return "hello1212"
}
}
@@ -0,0 +1,37 @@
package kr.lunaticbum.back.lun.controllers
import jakarta.servlet.http.HttpServletRequest
import org.springframework.web.bind.annotation.*
import org.springframework.web.servlet.ModelAndView
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver
@RestController
@RequestMapping("/user")
class User(private val viewResolver: ContentNegotiatingViewResolver) {
@GetMapping("join")
fun hello(httpServletRequest: HttpServletRequest): ModelAndView {
println("onJoin")
val vm = ModelAndView("join")
vm.modelMap.put("ddd","asdas")
println("${vm.toString()}")
return vm
}
@ResponseBody
@PostMapping("joinUser.api")
fun joinUser(httpServletRequest: HttpServletRequest, @RequestBody jsonString: String) : String {
println("${httpServletRequest.requestURI}")
val reqString = jsonString
println(reqString)
return "1234"
}
@ResponseBody
@GetMapping("test/{path}")
fun test(@PathVariable path : String): String {
println("path >>> $path")
return "ok"
}
}
@@ -0,0 +1,66 @@
package kr.lunaticbum.back.lun.utils
import jakarta.annotation.PostConstruct
import jakarta.annotation.PreDestroy
import jakarta.servlet.http.HttpServletRequest
import lombok.RequiredArgsConstructor
import org.springframework.context.annotation.Scope
import org.springframework.context.annotation.ScopedProxyMode
import org.springframework.stereotype.Component
import org.springframework.stereotype.Controller
import org.springframework.stereotype.Service
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
import java.util.*
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
class Logger {
private var uuid: String? = null
private var requestURL: String? = null
fun setRequestURL(requestURL: String?) {
this.requestURL = requestURL
}
fun log(message: String) {
println("[$uuid] [$requestURL] $message")
}
@PostConstruct
fun init() {
uuid = UUID.randomUUID().toString()
println("[$uuid] request scope bean create:$this")
}
@PreDestroy
fun close() {
println("[$uuid] request scope bean close:$this")
}
}
@Service
@RequiredArgsConstructor
class LogService {
private val myLogger: Logger? = null
fun logic(id: String) {
myLogger?.log("service id = $id")
}
}
@Controller
@RequiredArgsConstructor
class LogController {
private val logService: LogService? = null
private val myLogger: Logger? = null
@RequestMapping("log-demo")
@ResponseBody
fun logDemo(request: HttpServletRequest): String {
val requestURL = request.requestURL.toString()
myLogger?.setRequestURL(requestURL)
myLogger?.log("controller test")
logService!!.logic("testId")
return "OK"
}
}
+3
View File
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: kr.lunaticbum.back.lun.LunApplicationKt
+15
View File
@@ -0,0 +1,15 @@
spring.application.name=lun
spring.datasource.url=jdbc:mariadb://lunaticbum.kr:3307/lun_db
#spring.datasource.url=jdbc:mariadb://localhost:3307/lun_db
spring.datasource.username=lun_admin
spring.datasource.password=VioPup*383
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.data.mongodb.host=nas.lunaticbum.kr
#spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=lun_db
#spring.main.web-application-type=SERVLET
#logging.level.org.springframework.boot.autoconfigure=ERROR
#spring.mvc.view.prefix=/templates
#spring.mvc.view.suffix=.html
#server.servlet.register-default-servlet=true
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
+141
View File
@@ -0,0 +1,141 @@
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Join</title>
<style>
table {
width: 280px;
height: 550px;
margin: auto;
}
.email {
width: 127px;
height: 32px;
font-size: 15px;
border: 0;
border-color: lightgray;
border-radius: 15px;
outline: none;
padding-left: 10px;
background-color: rgb(233,233,233);
}
.text {
width: 250px;
height: 32px;
font-size: 15px;
border: 0;
border-radius: 15px;
outline: none;
padding-left: 10px;
background-color: rgb(233,233,233);
}
select {
width: 100px;
height: 32px;
font-size: 15px;
border: 1px;
border-color: lightgray;
border-radius: 15px;
outline: none;
padding-left: 10px;
}
.btn {
width: 262px;
height: 32px;
font-size: 15px;
border: 0;
border-radius: 15px;
outline: none;
padding-left: 10px;
background-color: rgb(164, 199, 255);
}
.btn:active {
width: 262px;
height: 32px;
font-size: 15px;
border: 0;
border-radius: 15px;
outline: none;
padding-left: 10px;
background-color: rgb(61, 135, 255);
}
</style>
<script>
function userJoin() {
var httpRequest;
var user_id = document.getElementById("user_id").value;
var user_pw = document.getElementById("user_pw").value;
var user_pw_check = document.getElementById("user_pw_check").value;
var user_email = document.getElementById("user_email").value;
var user_birth = document.getElementById("user_birth").value;
var user_name = document.getElementById("user_name").value;
/* 통신에 사용 될 XMLHttpRequest 객체 정의 */
httpRequest = new XMLHttpRequest();
/* httpRequest의 readyState가 변화했을때 함수 실행 */
httpRequest.onreadystatechange = () => {
/* readyState가 Done이고 응답 값이 200일 때, 받아온 response로 name과 age를 그려줌 */
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
var result = httpRequest.response;
document.getElementById("name").innerText = result.name;
document.getElementById("age").innerText = result.age;
} else {
alert('Request Error!');
}
}
};
/* Get 방식으로 name 파라미터와 함께 요청 */
httpRequest.open('POST', 'joinUser.api', true);
httpRequest.setRequestHeader("Content-Type", "application/json");
let data = {
'user_id': user_id,
'user_pw': user_pw,
'user_pw_check': user_pw_check,
'user_email': user_email,
'user_birth': user_birth,
'user_name': user_name
}
httpRequest.send(JSON.stringify(data));
}
</script>
</head>
<body>
<form >
<table>
<tr>
<td><h2>회원가입</h2></td>
</tr>
<tr><td>아이디</td></tr>
<tr><td><input id="user_id" type="text" class="text"></td></tr>
<tr><td>비밀번호</td></tr>
<tr><td><input id="user_pw" type="password" class="text"></td></tr>
<tr><td>비밀번호 확인</td></tr>
<tr><td><input id="user_pw_check" type="password" class="text"></td></tr>
<tr><td>이름</td></tr>
<tr><td><input id="user_name" type="text" class="text"></td></tr>
<tr><td>생년월일</td></tr>
<tr><td><input id="user_birth" type="date" class="text"></td></tr>
<tr><td>이메일</td></tr>
<tr>
<td><input id="user_email" type="text" class="email"> @
<select>
<option>naver.com</option>
<option>gmail.com</option>
<option>daum.net</option>
<option>nate.com</option>
</select>
</td>
</tr>
<tr><td><input type="submit" value="가입하기" class="btn" onclick="userJoin()"></td></tr>
</table>
</form>
</body>
</html>
@@ -0,0 +1,13 @@
package kr.lunaticbum.back.lun
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest
class LunApplicationTests {
@Test
fun contextLoads() {
}
}