카테고리 없음
@RequestMappings
Handy Smurf
2020. 8. 24. 15:48
package org.zerock.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/arg/*") //arg로 들어올 때 일을 한다.
@Log4j
public class ArgumentController {
// /arg/a? name=john
@RequestMapping("/a")
public void method1(HttpServletRequest req) { //어디에 있기만 하면 알아서 잘 넣어준다.
log.info(req);
//INFO : org.zerock.controller.ArgumentController - org.apache.catalina.connector.RequestFacade@5da5514f
//일을 함
log.info(req.getParameter("name"));
}
}
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 서버 버전 이름: Apache Tomcat/9.0.36
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 빌드 시각: Jun 3 2020 17:07:09 UTC
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 버전 번호: 9.0.36.0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 이름: Windows 10
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 버전: 10.0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 아키텍처: amd64
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 자바 홈: C:\java\jre1.8
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 버전: 1.8.0_251-b08
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 벤더: Oracle Corporation
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_BASE: C:\workspaceSpring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_HOME: C:\Program Files\Apache Software Foundation\Tomcat 9.0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.base=C:\workspaceSpring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 9.0
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dwtp.deploy=C:\workspaceSpring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 9.0\endorsed
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dfile.encoding=UTF-8
8월 24, 2020 3:13:13 오후 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다: [C:\java\jre1.8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/java/jre1.8/bin/server;C:/java/jre1.8/bin;C:/java/jre1.8/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\oraclexe\app\oracle\product\11.2.0\server\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\java\jdk1.8\bin;C:\Program Files\Git\cmd;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\maven\apache-maven-3.6.3\bin;C:\Program Files (x86)\Common Files\Adobe\AGL;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\admin\AppData\Local\Microsoft\WindowsApps;C:\VS Code\bin;C:\Users\admin\AppData\Local\GitHubDesktop\bin;C:\Program Files\Bandizip\;C:\Users\admin\Documents\sts-bundle\sts-3.9.13.RELEASE;;.]
8월 24, 2020 3:13:13 오후 org.apache.coyote.AbstractProtocol init
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 초기화합니다.
8월 24, 2020 3:13:13 오후 org.apache.catalina.startup.Catalina load
정보: [472] 밀리초 내에 서버가 초기화되었습니다.
8월 24, 2020 3:13:13 오후 org.apache.catalina.core.StandardService startInternal
정보: 서비스 [Catalina]을(를) 시작합니다.
8월 24, 2020 3:13:13 오후 org.apache.catalina.core.StandardEngine startInternal
정보: 서버 엔진을 시작합니다: [Apache Tomcat/9.0.36]
8월 24, 2020 3:13:14 오후 org.apache.jasper.servlet.TldScanner scanJars
정보: 적어도 하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다. 스캔했으나 TLD가 없는 JAR들의 전체 목록을 보시려면, 로그 레벨을 디버그 레벨로 설정하십시오. 스캔 과정에서 불필요한 JAR들을 건너뛰면, 시스템 시작 시간과 JSP 컴파일 시간을 단축시킬 수 있습니다.
8월 24, 2020 3:13:14 오후 org.apache.catalina.core.ApplicationContext log
정보: No Spring WebApplicationInitializer types detected on classpath
8월 24, 2020 3:13:14 오후 org.apache.catalina.core.ApplicationContext log
정보: Initializing Spring root WebApplicationContext
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Mon Aug 24 15:13:14 KST 2020]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/root-context.xml]
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 459 ms
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started
8월 24, 2020 3:13:15 오후 org.apache.catalina.core.ApplicationContext log
정보: Initializing Spring FrameworkServlet 'appServlet'
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Mon Aug 24 15:13:15 KST 2020]; parent: Root WebApplicationContext
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/arg/a]}" onto public void org.zerock.controller.ArgumentController.method1(javax.servlet.http.HttpServletRequest)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET]}" onto public java.lang.String org.zerock.controller.HomeController.home(java.util.Locale,org.springframework.ui.Model)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/a]}" onto public void org.zerock.controller.MyController.myHandler2()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[]}" onto public void org.zerock.controller.MyController.myHandler1()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/c],methods=[GET]}" onto public void org.zerock.controller.MyController.myHandler4()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/d],methods=[POST]}" onto public void org.zerock.controller.MyController.myHandler7()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/c],methods=[POST]}" onto public void org.zerock.controller.MyController.myHandler5()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/b]}" onto public void org.zerock.controller.MyController.myHandler3()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/d],methods=[GET]}" onto public void org.zerock.controller.MyController.myHandler6()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/sample/*]}" onto public void org.zerock.controller.SampleController.basic()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/sample/basic],methods=[GET || POST]}" onto public void org.zerock.controller.SampleController.basicGet()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/sample/basicOnlyGet],methods=[GET]}" onto public void org.zerock.controller.SampleController.basicGet2()
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Mon Aug 24 15:13:15 KST 2020]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Mon Aug 24 15:13:15 KST 2020]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 783 ms
8월 24, 2020 3:13:16 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:13:16 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,328] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ArgumentController - org.apache.catalina.connector.RequestFacade@6226e11f
INFO : org.zerock.controller.ArgumentController - "john"
"john" 확인
@RequestMapping("/b")
public void method2(@RequestParam("name")String name) {
log.info(name);
}
톰캣 재시작
웹으로 들어와서 arg/b? name="john"
INFO : org.zerock.controller.ArgumentController - "john"
@RequestMapping("/b")
public void method2(@RequestParam("name")String name) {
log.info(name);
}
@RequestMapping("/c")
public void method3(@RequestParam String name) {
log.info("c method");
log.info(name);
}
@RequestMapping("/d")
public void method4(String name) {
log.info("c method");
log.info(name);
}
}
세 메소드는 같은 일을한다. name이 빠져도 어노테이션이 빠져도 사용 가능하다.
@RequestMapping("/f")
public void method6(String name, String age) {
log.info("f method");
log.info(name);
log.info(age);
}
8월 24, 2020 3:26:12 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:26:12 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,315] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ArgumentController - f method
INFO : org.zerock.controller.ArgumentController - hanna
INFO : org.zerock.controller.ArgumentController - 100
형변환도 해준다.
@RequestMapping("/g")
public void method6(String name, int age) {
log.info("g method");
log.info(name);
log.info(age);
}
}
8월 24, 2020 3:29:38 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:29:38 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,418] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ArgumentController - g method
INFO : org.zerock.controller.ArgumentController - nana
INFO : org.zerock.controller.ArgumentController - 5
@GetMapping("/ex02")
public String ex02(@RequestParam("name") String name, @RequestParam("age") int age) {
log.info("name : " + name);
log.info("age : " + age);
return "ex02";
}
}
8월 24, 2020 3:34:21 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:34:21 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,341] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - name : 이은수
INFO : org.zerock.controller.SampleController - age : 28
동일한 이름의 파라미터가 여러 개 전달되는 경우에는 ArrayList<>등을 이용하서 처리 가능하다.
@GetMapping("/ex02List")
public String ex02(@RequestParam("ids")ArrayList<String> ids){
log.info("ids: " + ids);
return "ex02List";
}
8월 24, 2020 3:38:09 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:38:09 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,330] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/favicon.ico] in DispatcherServlet with name 'appServlet'
INFO : org.zerock.controller.SampleController - ids: [김공주, 저팔계, 박혀거세]
배열의 경우에도 동일하게 처리할 수 있다.
@GetMapping("/ex02Array")
public String ex02(@RequestParam("ids")String[] ids){
log.info("array ids: " + Arrays.toString(ids));
return "ex02Array";
}
8월 24, 2020 3:44:13 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 3:44:13 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,328] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - array ids: [dododo, rarara, sesese]
보는 법 프로젝트 오른쪽 버튼 > Spring > @RequestMappings
@RequestMapping("/h")
public void method8(String name, int age) {
log.info("h method");
Member member = new Member();
member.setName(name);
member.setAge(age);
log.info(member);
}
@RequestMapping("/i")
public void method9(Member member) {
log.info("i method");
log.info(member);
}
}
8월 24, 2020 4:11:15 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 4:11:15 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,375] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ArgumentController - i method
INFO : org.zerock.controller.ArgumentController - Member(name=dongle, age=21)
위는 기존 / 아래는 스프링으로 쉽게 변경한 것
package org.zerock.domain;
import lombok.Data;
@Data
public class SampleDTO {
private String name;
private int age;
}
@GetMapping("/ex01")
public String ex01(SampleDTO dto) {
log.info("" + dto);
return "ex01";
}
8월 24, 2020 4:16:24 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 24, 2020 4:16:24 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [2,326] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - SampleDTO(name=gogo, age=12)
총 정리
package org.zerock.controller;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.domain.SampleDTO;
import lombok.Getter;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
@RequestMapping("") //sample로 끝난 경우 일을 한다.
public void basic() {
log.debug("basic...................");
}
@RequestMapping(value="/basic", method = {RequestMethod.GET, RequestMethod.POST})
public void basicGet() {
log.info("basic get............."); //basic으로 끝난 경우 일을한다.
}
@GetMapping("/basicOnlyGet") //get방식으로 오면 일을한다.
public void basicGet2() {
log.info("basic get only get ..................");
}
@GetMapping("/ex02")
public String ex02(@RequestParam("name") String name, @RequestParam("age") int age) {
log.info("name : " + name);
log.info("age : " + age);
return "ex02";
}
@GetMapping("/ex02List")
public String ex02(@RequestParam("ids")ArrayList<String> ids){
log.info("ids: " + ids);
return "ex02List";
}
@GetMapping("/ex02Array")
public String ex02(@RequestParam("ids")String[] ids){
log.info("array ids: " + Arrays.toString(ids));
return "ex02Array";
}
@GetMapping("/ex01")
public String ex01(SampleDTO dto) {
log.info("" + dto);
return "ex01";
}
}
package org.zerock.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.domain.Member;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/arg/*") // arg로 들어올 때 일을 한다.
@Log4j
public class ArgumentController {
// /arg/a? name=john
@RequestMapping("/a")
public void method1(HttpServletRequest req) { // 어디에 있기만 하면 알아서 잘 넣어준다.
log.info(req);
//INFO : org.zerock.controller.ArgumentController - org.apache.catalina.connector.RequestFacade@5da5514f
//일을 함
log.info(req.getParameter("name"));
}
@RequestMapping("/b")
public void method2(@RequestParam("name") String name) {
log.info(name);
}
@RequestMapping("/c")
public void method3(@RequestParam String name) {
log.info("c method");
log.info(name);
}
@RequestMapping("/d")
public void method4(String name) {
log.info("c method");
log.info(name);
}
@RequestMapping("/e")
public void method5(HttpServletRequest req) {
log.info("e method");
log.info(req.getParameter("name"));
log.info(req.getParameter("age"));
}
@RequestMapping("/f")
public void method6(String name, String age) {
log.info("f method");
log.info(name);
log.info(age);
int ageInt = Integer.valueOf(age);
}
@RequestMapping("/g")
public void method6(String name, int age) {
log.info("g method");
log.info(name);
log.info(age);
}
@RequestMapping("/h")
public void method8(String name, int age) {
log.info("h method");
Member member = new Member();
member.setName(name);
member.setAge(age);
log.info(member);
}
@RequestMapping("/i")
public void method9(Member member) {
log.info("i method");
log.info(member);
}
}
arg/h?name=""&age=""
sample/ex01?name=""&age=""
순서 상관 없다.
중복된 매개변수가 있다면 한 개만 살리고 없앨 수 있다.
매개 변수에 클래스를 넣을 수 있다.
클래스를 넣게 되면 get parameter는 클래스 내에 있는 인스턴스를 사용 가능하다
ex) age;
name;
가 있다면 age, name 둘 다 사용 가능하다.