728x90

@Controller

public class 

 

@GetMapping("")

public String controllerParams(HttpServletRequest request,

HttpServletResponse response

, HttpSession session) {

 

}

HttpServletRequest: HTTP 요청 정보를 다루는 객체로, 클라이언트로부터 받은 요청에 대한 정보를 읽고 조작할 수 있습니다.

HttpServletResponse: HTTP 응답 정보를 다루는 객체로, 서버에서 클라이언트로 응답을 보낼 때 사용됩니다.

HttpSession: 클라이언트와 서버 간의 세션 관리를 위한 객체로, 세션 데이터를 저장하고 검색하는 데 사용됩니다

 

@GetMapping("")

public String controllerParams(WebRequest webRequest

, Locale locale

, InputStream is

, Reader reader

, OutputStream os

, Writer writer) {

locale.getCountry();

locale.getLanguage();

is.read();

}

WebRequest: Spring에서 제공하는 인터페이스로, HTTP 요청 및 응답을 다루는 데 사용됩니다.

Locale: 지역 및 언어 정보를 관리하는 객체로, 다국어 지원 기능에서 사용됩니다.

Reader, InputStream, OutputStream, Writer: 데이터의 입출력을 위한 스트림을 다루는 객체로, 파일 업로드 및 다른 I/O 작업에 사용됩니다.

 

@RequestMapping("")

public String controllerParams(@PathVariable("name") String name

, @RequestParam("name") String name1 

, @RequestParam(value="name", required=false, defaultValue="디폴트") String name2

, @RequestParam String name3 // 메서드 파라미터의 이름과 요청파라미터가 같다면 ("name") 생략가능

, String name4 // 메서드 파라미터의 이름과 요청파라미터가 같고 String, int등 단순한 타입의 경우 @RequestParam 생략가능

, @RequestParam Map<String, String> params) {

 

}

 

@PathVariable("name"): URL 경로 변수를 추출하기 위한 어노테이션으로, 경로에서 변수 값을 추출합니다.

(RequestMapping과 함께 사용됩니다.)

@RequestParam("name"): HTTP 요청 파라미터를 추출하기 위한 어노테이션으로, 요청 파라미터의 값을 추출합니다.

(name 파라메터가 없으면 400 오류 발생)

@RequestParam: 메서드 파라메터의 이름과 요청파라메터의 이름이 같다면 ("name")은 생략가능하다

(메서드 파라메터의 이름과 요청파라메터가 같고 String, int 등 단순한 타입의 경우 @RequestParam 생략 가능

@RequestParam(value="name", required=false, defaultValue="디폴트"): 요청 파라미터의 값을 추출하며, 필수 여부와 기본값을 설정할 수 있습니다.

@RequestParam Map<String, String>: 모든 요청 파라미터를 Map으로 수집합니다.

 

 

 

@GetMapping("")

public String controllerParams(@CookieValue("cookieName") String cookieName

, @CookieValue(value="cookieName", required=false, defaultValue="test") String cookieName1

, @RequestHeader("Host") String host // 값없으면 404 오류 발생

, @RequestHeader("Keep-Alive") long keepAlive) {

 

}

 

@CookieValue("cookieName"): 쿠키 값을 추출하기 위한 어노테이션으로, 쿠키의 값을 추출합니다.

(속성값이 없으면 404 오류 발생)

@CookieValue(value="cookieName", required=false, defaultValue="test"): 쿠키 값을 추출하며, 필수 여부와 기본값을 설정할 수 있습니다.

@RequestHeader(): HTTP 요청 헤더 값을 추출하기 위한 어노테이션으로, 헤더의 값을 추출합니다.

 

@GetMapping("")

public String controllerParams(ModelMap model

, Model model2

, Map map ) {

}

ModelMap, Model, Map: 뷰에 데이터를 전달하기 위한 모델 객체로, 뷰에서 사용할 데이터를 저장합니다.

 

@GetMapping("")

public String controllerParams(@ModelAttribute  User userModel

, @ModelAttribute("xxUser") User userModel2

, @ModelAttribute  User userModel3, BindingResult bindingResult

, @ModelAttribute  User userModel4, Errors errors) {

 

}

@ModelAttribute: 모델에 데이터를 바인딩하고 뷰에 전달하기 위한 어노테이션으로, 커맨드 객체를 생성하고 데이터를 바인딩합니다.

Errors, BindingResult: 데이터 바인딩 및 유효성 검사 결과를 저장하는 객체로, 데이터 바인딩 중 발생한 오류 정보를 관리합니다.

 

@GetMapping("")

public String controllerParams(SessionStatus sessionStatus) {

sessionStatus.setComplete();

sessionStatus.isComplete();

}

SessionStatus: 세션 상태를 관리하는 객체로, 세션을 완료하거나 초기화하는 데 사용됩니다.

 

@GetMapping("")

public String controllerParams(@RequestBody String body) {

 

}

 

@RequestBody: HTTP 요청 본문의 내용을 추출하기 위한 어노테이션으로, JSON 또는 XML과 같은 데이터를 읽어옵니다.

 

@GetMapping("")

public String controllerParams(@Value("#{commonprop['os.name']}") String osName ) {

 

}

 

@Value("#{commonprop['os.name']}") String osName: SpEL (Spring Expression Language)을 사용하여 프로퍼티 값을 주입하는 어노테이션으로, 외부 설정 파일에서 값을 가져올 때 사용됩니다.

 

'Java > Spring Boot' 카테고리의 다른 글

JSTL coreTag  (0) 2023.09.13
Spring CustomTag SPEL(Spring Expression Language)  (0) 2023.09.13
Spring Boot DataSource 설정  (0) 2023.09.13
Java WebAppInitConfig  (0) 2023.09.13
Spring Boot Request Controller  (0) 2023.09.13
728x90

@Config

ApplicationConfig

 

1. Spring의 Environment를 사용하여 속성 값에서 데이터베이스 연결 정보를 가져오는 방법

 

Environment는 application.properties 파일에서 값을 얻어온다.

@Autowired

Environment environment;

@Bean

public DataSource apacheDataSource() {

BasicDataSource dataSource=new BasicDataSource();

dataSource.setUrl(environment.getProperty("spring.datasource.url"));

dataSource.setUsername(environment.getProperty("spring.datasource.username"));

dataSource.setPassword(environment.getProperty("spring.datasource.password"));

return dataSource;

}

dataSource에 set url, username,password 를 할때,

environment에서 property를 가져온다. 

"spring.datasource.url"

 

2. 데이터베이스 연결 정보 하드코딩 

set 할때 DriverClassName을 포함하여 직접 연결정보를 입력해준다.

 

 

'Java > Spring Boot' 카테고리의 다른 글

Spring CustomTag SPEL(Spring Expression Language)  (0) 2023.09.13
Spring Boot Controller Type of Parameters  (0) 2023.09.13
Java WebAppInitConfig  (0) 2023.09.13
Spring Boot Request Controller  (0) 2023.09.13
Spring JSP 국제화  (0) 2023.09.13
728x90

자바클래스로 Spring 기본 설정할 때 사용된다.

 

-web.xml을 대신할 클래스로 톰캣 실행시 기본설정하는 역할을 한다.

 

WebAppInitConfig 클래스는 WebApplicationInitializer 인터페이스를 상속하여 

onStartup 메소드를 구현한다. 

 

onStartup 메소드는 톰캣 실행하자마자 실행되므로 설정의 역할을 하게 된다. 

이 메소드에서 dispatcherServlet도 등록하고 ApplicationConfig, Listener, WebConfig, encodingFilter도 설정할 수 있다. 

 

Spring에서 application.properties 파일로 설정을 하면 불필요한 액션인것 같다.

 

public class WebAppInitConf implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext servletContext) throws ServletException {

/**********1.DispatcherServlet등록***************/

AnnotationConfigWebApplicationContext context =

new AnnotationConfigWebApplicationContext();

context.register(WebConfig.class);

ServletRegistration.Dynamic dynamic=

servletContext.addServlet("dispatcherSevlet", new DispatcherServlet(context));

dynamic.setLoadOnStartup(0);

dynamic.addMapping("/");

 

/********2.config 설정 클래스[ApplicationConfig.java,WebConfig.java]를사용한설정******/

//ApplicationConfig.java

AnnotationConfigWebApplicationContext applicationContext =

new AnnotationConfigWebApplicationContext();

applicationContext.register(ApplicationConfig.class);

//Listener등록

servletContext.addListener(new ContextLoaderListener(applicationContext));

//WebConfig.java

AnnotationConfigWebApplicationContext servletConfig = new AnnotationConfigWebApplicationContext();

servletConfig.register(WebConfig.class);

ServletRegistration.Dynamic dispatcherServlet = servletContext.addServlet("dispatcherServlet", new DispatcherServlet(servletConfig));

dispatcherServlet.setLoadOnStartup(1);

dispatcherServlet.addMapping("/");

//encodingFilter설정

FilterRegistration.Dynamic filterRegistration = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter("UTF-8", true));

filterRegistration.addMappingForUrlPatterns(null, true, "/*");

}

}

'Java > Spring Boot' 카테고리의 다른 글

Spring Boot Controller Type of Parameters  (0) 2023.09.13
Spring Boot DataSource 설정  (0) 2023.09.13
Spring Boot Request Controller  (0) 2023.09.13
Spring JSP 국제화  (0) 2023.09.13
Spring Boot Controller Mapping + View Resolver  (0) 2023.09.12
728x90

RequestMapping

@Controller

@RequestMapping("/user")

public class RequestMappingUserController {

@RequestMapping("/list")

public String user_list() {

return "forward:/WEB-INF/views/user/list.jsp";

}

 

@RequestMapping("/view")

public String user_view() {

return "forward:/WEB-INF/views/user/view.jsp";

}

 

}

RequestMapping은  Get방식과 Post방식 관계없이 들어오는 모든 요청을 받는다.

 

기본적으로 맵핑은 

메소드 위에 Annotation을 붙여 한다. 

 

하지만, 위의 코드는 클래스 레벨에 RequestMapping하여 패키지 단위를 맵핑하였다. 

예를들어 

/user_list

/user_view

/guest_list

/guest_view

가 있다면 

/list와 /view는 /user와 /guest를 반복하므로 

user와 guest를 한번더 폴더링하여 

/user/list

/user/view

/guest/list

/guest/view

로 맵핑하는게 더 관리하기 좋을 수 있다.

 

Get, Post Mapping

@Controller

public class RequestMappingController {

@GetMapping("/login")

public String get_form() {

 

return "forward:WEB-INF/views/form.jsp";

}

@PostMapping("/login")

public String post_login_action(@RequestParam(name="id") String id,@RequestParam(name="password") String password, HttpSession session) {

System.out.println("id param"+id);

System.out.println("password param"+password);

boolean isLogin= true;

if(isLogin) {

session.setAttribute("sUserId", id);

}else {

 

}

return "forward:WEB-INF/views/post_login_result.jsp";

}

}

 

@GetMapping("/login")

public String get_login_form() {

return "forward:WEB-INF/views/get_login_form.jsp";

}

GetMapping("/login")

Get방식으로 /login에 들어오면 get_login_from()이 실행되고 get_login_form.jsp 반환 

get_login_form 에서는 아이디와 패스워드를 입력받고 

Post방식으로 /login으로 다시 보낸다.

 

@PostMapping("/login")

public String post_login_action(@RequestParam(name="id") String id, @RequestParam(name="password") String password,HttpSession session) {

 

session.setAttribute("userId", id);

 

return "forward:WEB-INF/views/post_login_result.jsp";

}

PostMapping("/login")

위와 같은 /login으로 들어오더라도 Post방식으로 들어오면 post_login_action()이 실행된다. 

같은 uri를 맵핑하더라도 메소드 이름은 달라야한다.

@RequestParam(name="id") String id 

파라메터 식별자를 request 의 속성 key와 일치시키면 웬만하면 Spring이 파라메터를 잘 binding하지 

그렇지 않은 경우 @RequestParam으로 명시할 수 있다.

 

위 메소드에선 session도 받아와 userId를 session의 속성에 추가하고 post_login_result.jsp로 forwarding했다.

 

@PostMapping("/user_join_form")

public String model_attribute_user_write_action(@ModelAttribute(name="user") User user) {

User user =new UserService().joinUser(user);

return "forward:WEB-INF/views/user_write_result.jsp";

}

request에 userId, password, name이 등록되어있다면

@ModelAttribute 어노테이션으로 User user 객체를 바로 가져올 수 있다. 

 

스프링은 내부적으로 

requestParam에 userId와 password, name을 가져와서 

 User user = new User();

user Setter() 메소드로 user에 데이터를 담아 

user객체를 request.setAttribute("user",user); 로 담아 준다. 

 

model_attribute_user_write_action()메소드 내부에서 

user 객체를 사용하면 된다. 

 

*request는 forwarding 할 때 동일 request를 그대로 가져가기 때문에 

파라메타로 받은 user는 다음 액션이 forward 이라면 request나 model에서  "user"라는 키로 그대로 다시 꺼내올 수도 있다. 

 

++model.addAttribute() 하면 request에도 자동으로 .setAttribute() 된다. 

 

@PostMapping("/guest_write_action")

public String guest_write_action(@ModelAttribute Guest guest,RedirectAttributes redirectAttributes) throws Exception {

int guest_no=guestService.insertGuest(guest);

redirectAttributes.addAttribute("guest_no",guest_no);

return "redirect:guest_view";

}

RedirectAttributes 

redirect 할 때 가지고 갈 파라메터가 필요할 때 사용할 수 있다. 

redirectAttributes객체에 addAttribute 메서드를 사용해 guest_no를 넘겨주었다. 

redirect할 guest_view는 guest_no를 받을 수 있다. 

 

// parameter에 guest_no가 존재하지 않으면

@GetMapping(value = "/guest_view", params = "!guest_no")

public String guest_view() throws Exception {

 

return "redirect:guest_main";

}

//parameter에 guest_no가 존재하면

@GetMapping(value="/guest_view", params="guest_no")

public String guest_view(@RequestParam int guest_no, Model model) throws Exception {

Guest guest = guestService.selectByNo(guest_no);

if(guest==null) {

model.addAttribute("GUEST_NOT_FOUND_MSG","게시물이 존재하지 않습니다.");

return "guest_view_not_found";

}

model.addAttribute("guest",guest);

return "guest_view";

}

 

guest_view로 넘어올때 guest_no가 필요하기 때문에 

guest_no가 있는 경우와 없는 경우를 나누어 맵핑해준다. 

 

이전까진 @GetMapping("/guest_view") 로 value값만 넣어줘서 value=를 명시하지 않았지만 

params 속성도 넣어야 하기 때문에 value=를 명시해준다. 

params Get방식으로 넘어 올때 필요한 param들을 지정해주는데 

!연산자를 이용해 존재하지 않는 경우와  존재하는 경우를  표현할 수 있다.

 

 

@GetMapping(value={"/user_write_action","/user_login_action",

"/user_logout_action","/user_modify_form",

"/user_modify_action","/user_remove_action"})

public String get_mapping() {

return "redirect:user_main";

}

매핑할때 value=은 배열로 받기 때문에 값을 여러개 줄 수 있다. 

->PostMapping하고 GetMapping을 막을 때 GetMapping으로 들어오는 요청들을 다 main페이지로 redirection시켰다.

 

 

 

'Java > Spring Boot' 카테고리의 다른 글

Spring Boot DataSource 설정  (0) 2023.09.13
Java WebAppInitConfig  (0) 2023.09.13
Spring JSP 국제화  (0) 2023.09.13
Spring Boot Controller Mapping + View Resolver  (0) 2023.09.12
Spring Boot Exception Handler  (0) 2023.09.12

+ Recent posts