2021년 11월 27일 토요일

[스프링학원]Spring MVC HelloWorld, XML방식 및 자바설정(Java Config), 스프링동영상교육, 학원교육도좋지만 예제 많이 만들어 보세요~

 [스프링학원]Spring MVC HelloWorld, XML방식 및 자바설정(Java Config), 스프링동영상교육, 학원교육도좋지만 예제 많이 만들어 보세요~

http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=888 


Spring MVC HelloWorld, XML방식 및 자바설정(Java Config), 스프링동영상교육

Spring MVC HelloWorld, XML방식 및 자바설정(Java Config), 스프링동영상교육1. File -> New -> Spring Legacy Project 선택Project name : hello3Spring MVC Project 선택top level package 를 a.b.hello3 로 입력 (hello3은 Context…

ojc.asia


https://www.youtube.com/watch?v=OXnif975EoQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=12 

https://www.youtube.com/watch?v=KPiMj6pJQj0&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=15&t=18s 

 

1. File -> New -> Spring Legacy Project 선택

Project name : hello3

Spring MVC Project 선택


top level package 를 a.b.hello3 로 입력 (hello3은 Context 이름, localhost:8080/hello3)


pom.xml에서 스프링의 버전을 4.3 이상으로… 4.3.0


2. webapp아래의 다운로드된 모든 파일 삭제, a.b.hello3 패키지의 HomeController.java 삭제

3. HelloController.java


package a.b.hello3;


import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

@RequestMapping("/hello")   //http://localhost:8080/hello3/hello

public class HelloController {

@GetMapping

//@RequestMapping(method=RequestMethod.Get)

public String hello(Model model) {

model.addAttribute("message", "Hello Spring MVC framework!");

return "hello";  //View 이름, ViewResolver가 해석함, 주로 접두어. 접미어 붙임

}

}



4. WEB-INF/web.xml (프로젝트에서 우측 마우스 >> j2ee tools >> generate deployment descriptor stub 선택)


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">


<servlet>

<servlet-name>helloServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>  


<servlet-mapping>

<servlet-name>helloServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

  

</web-app>


5. /WEB-INF/helloServlet-servlet.xml (디스패처 서블릿의 설정 파일)


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">


<context:component-scan base-package="a.b.hello3"/>  


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix">

<value>/WEB-INF/jsp/</value>

</property>

<property name="suffix" value=".jsp"/>

</bean>

</beans>


6. /WEB-INF/jsp/hello.jsp


<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<h3>${message}</h3>

</body>

</html>


실행 : http://localhost:8080/hello3/hello



Spring MVC HelloWorld를 자바설정(Java Config)으로 변경

 

1. File -> New -> Spring Legacy Project 선택

Project name : spring4mvc

Spring MVC Project 선택


top level package 를 a.b.spring4mvc 로 입력


2. 기본적으로 컨트롤러, web.xml, 디스패처 서블릿의 설정파일을 자동 다운로드 한다. 프로젝트에서 우측 마우스 버튼 run as --> run on server 로 실행해보자.

(http://localhost:8080/spring4mvc/)


3. /WEB-INF/web.xml 파일과 /WEB-INF/spring/root-context.xml, /WEBINF/spring/appServlet/servlet-context.xml 파일을 삭제하자.


4. pom.xml에서 아래 플러그인을 추가하자.(web.xml이 없어도 에러나지 않도록)


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>2.6</version>

<configuration>

<failOnMissingWebXml>false</failOnMissingWebXml>

</configuration>

</plugin>


servlet-api 버전 3.0 이상인지 확인하자.


<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.1.0</version>

</dependency>



5. 기본 패키지 아래에 config 패키지 만들고 아래의 두 자바 설정 파일을 만들자.


[Config.java]

/* DispatcherServlet 설정파일의 뷰리졸버를 정의 */

package config;

import org.springframework.context.annotation.Bean;

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.view.JstlView;

import org.springframework.web.servlet.view.UrlBasedViewResolver;


@Configuration                      //자바 설정 파일임을 나타냄

@ComponentScan("a.b.spring4mvc")  //XML 설정의 component-scan base-package

@EnableWebMvc                     //Spring Web MVC의 Annotation 이 가능하도록

public class Config {

@Bean

public UrlBasedViewResolver setupViewResolver() {  //뷰 리졸버

UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();

viewResolver.setPrefix("/WEB-INF/views/");

viewResolver.setSuffix(".jsp");

viewResolver.setViewClass(JstlView.class);

return viewResolver;

}

}


[WebInit.java]

/* web.xml 파일의 설정을 정의한다. */

package config;


import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.WebApplicationInitializer;

import

org.springframework.web.context.support.AnnotationConfigWebApplicationCont

ext;

import org.springframework.web.servlet.DispatcherServlet;


public class WebInit implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext servletContext) throws ServletException {

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

ctx.register(Config.class);

ctx.setServletContext(servletContext);

Dynamic servlet = servletContext.addServlet("appServlet", new DispatcherServlet(ctx) );

servlet.addMapping("/");

servlet.setLoadOnStartup(1);

}

}


6. 브라우저에서 실행해 보자.

http://localhost:8080/spring4mvc/



#스프링학원, #스프링교육, #Spring학원, #Spring교육, #SpringMVC, #스프링HelloWorld, #스프링강좌, #스프링강의


스프링학원, 스프링교육, Spring학원, Spring교육, SpringMVC, 스프링HelloWorld, 스프링강좌, 스프링강의 



[오라클학원, SQL학원]오라클 피봇(Pivot) 함수, 언피봇(Unpivot) 함수로 행값들을 열(칼럼) 값을 변환하세요~

 

[오라클학원, SQL학원]오라클 피봇(Pivot) 함수, 언피봇(Unpivot) 함수로 행값들을 열(칼럼) 값을 변환하세요~


http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=699 


오라클 피봇(Pivot) 함수, 언피봇(Unpivot) 함수로 행값들을 열(칼럼) 값을 변환하세요~

오라클 피봇(Pivot) 함수, 언피봇(Unpivot) 함수로 행값들을 열(칼럼) 값을 변환하세요~오라클 SQL 동영상 참조하세요~pivot, unpivot 함수는 오라클 11G 부터 제공되는 함수입니다.기존에 decode, case등으로

ojc.asia

https://youtu.be/2vf5siPGyew

오라클 SQL 동영상 참조하세요~


https://www.youtube.com/watch?v=6jXlLe6SbYk&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=15 


pivot, unpivot 함수는 오라클 11G 부터 제공되는 함수입니다.

기존에 decode, case등으로 행, 열 값을 변환했는데요, pivot, unpivot의 등장으로  한결 파워풀 해 졌습니다.^^


#오라클교육, #오라클학원, #SQL교육, #SQL학원, #오라클PIVOT, #오라클 UNPIVOT, #오라클DECODE, #오라클CASE


오라클교육, 오라클학원, SQL교육, SQL학원, 오라클PIVOT, 오라클UNPIVOT, 오라클DECODE, 오라클CASE 

스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)

 스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)


http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=887 


스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리

스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리컨트롤러 기반 예외처리컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다. 스프링은 컨트롤러 안에 @ExceptionHand

ojc.asia


https://www.youtube.com/watch?v=OXnif975EoQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=12&t=11s 


https://www.youtube.com/watch?v=YlXpUGYXrKQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=10 

 

  • 컨트롤러 기반 예외처리

컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다.  스프링은 컨트롤러 안에 @ExceptionHandler를 사용한 메소드가 존재하면 그 메소드가 컨트롤러 내부의 예외를 처리하도록 하며 @ExceptionHandler의 인자로 들어오는 예외가 발생하는 경우에 해당 메소드가 실행된다.



@Controller

public class EmpController {

@RequestMapping(value="/emp/{empno}", method=RequestMethod.GET)

public String getEmp(@PathVariable("empno") int empno, Model model) {

if(empno==null) throw new EmpNotFoundException(id);

else {    ...... }

}

@ExceptionHandler(EmpNotFoundException.class) //EmpNotFoundException에 대한 예외처리 메소드

public ModelAndView exHandler(HttpServletRequest request, Exception ex){

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("exception", ex);

modelAndView.addObject("url", request.getRequestURL());

modelAndView.setViewName("error");

return modelAndView;

}

}



  • 글로벌 예외처리

@ExceptionHandler  : 스프링 @MVC에서 에러나 예외를 처리하기 위한 특별한 방법을 제공하는데  @ExceptionHandler 어노테이션을 이용하면 된다. 스프링 컨트롤러에서 정의한 메소드에서 기술한 예외가 발생되면 자동으로 받아낼 수 있다. 이를 이용하여 컨트롤러에서 발생하는 예외를 View단 JSP등으로 보내서 처리할 수 있다.

 

@ControllerAdvice : @ControllerAdvice는 스프링3.2 이상에서 사용가능하며  @Controller 나 스프링 4.0이상에서 지원하는 @RestController 에서 발생하는 예외 등을 catch하는 기능을 가지고 있다. 클래스 위에 @ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지 내부 메소드를  선언하여 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 기술한다. 스프링4.0이상에서는 특정한 컨트롤러만 지정해서 캐치할 수 있다.

 

STS에서

File >> New >> Spring Legacy Project

Project Name : springmvcexception

Spring MVC Project 선택

다음 화면의 top level package에서 a.b.springmvcexception 입력


[pom.xml]

Spring Framework 버전이 4.X 아래라면 수정하자.

<properties>

……

<org.springframework-version>4.2.4.RELEASE</org.springframework-version>

……

</properties>


[HomeController.java]

package a.b.springmvcexception;


import java.io.IOException;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

public class HomeController {

@RequestMapping(value = "/")

public String hello() throws IOException {

// 뷰이름 이름, hello.jsp 호출

return "home";

}


@RequestMapping(value = "/test")

public String test() throws IOException {

{

throw new IOException("occured IOException...");

}

}

}


[ExceptionControllerAdvice.java]


package a.b.springmvcexception;


import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.servlet.ModelAndView;


@ControllerAdvice

public class ExceptionControllerAdvice {


@ExceptionHandler(Exception.class)

public ModelAndView exception(Exception e) {

ModelAndView mav = new ModelAndView("exception");

mav.addObject("name", e.getClass().getSimpleName());

mav.addObject("message", e.getMessage());


return mav;

}

}


[ webapp/WEB-INF/views/home.jsp]


<html>

<head>

<title>Spring MVC Exception Handling</title>

</head>

<body>

<h1>Spring MVC Exception Handling</h1>

<a href="/springmvcexception/test">Click here to test Exception handling</a>

</body>

</html>


[ webapp/WEB-INF/views/exception.jsp]

<html>

<head>

<title>Spring MVC Exception example</title>

</head>

<body>

<h1>Error Handing Page</h1>

<b>${name}</b>:  ${message}

</body>

</html>


[실행]

프로젝트에서 우쪽 마우스 버튼 -> Run as -> Run On Server 클릭 후 STS에 기본적으로 내장되어 있는 Pivotal tc Server를 선택하고 Finish를  클릭하여 실행하자

http://localhost:8080/springmvcexception/



"Click here to test Exception handling "를 클릭하자

exception.jsp에서 예외를 받아서 출력한다.

 

  • Spring4 @RestController 컨트롤러 기반 예외처리

 

@RestController  @RequestMapping("/emp")

public class EmpController {

@ExceptionHandler(EmpNotFoundException.class)  //EmpNotFoundException 예외처리용

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());

error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

@RequestMapping("/get")

public Emp getEmp(@RequestParam(value="empno") String empno) {

if (empno == null) throw new EmpNotFoundException(empno);

......

return emp;        } }


public class EmpNotFoundException extends RuntimeException {

public EmpNotFoundException(String empno){

super(empno +" not found!");

}

}

http://localhost:8080/emp/get?empno=9999

존재하지 않는 사원이라면 오류는 JSON 형태로 리턴된다.

{"status":400,"message":"9999 not found!","url":"http://localhost:8080/emp/get/emperror/"}

 

  • Spring4 @RestController 글로벌 예외처리

 

@RestController

@RequestMapping("/emp")

class EmpApiController {

@RequestMapping(value = "{empno}", produces = "application/json")

@ResponseStatus(value = HttpStatus.OK)

Emp getEmp(@PathVariable Long empno) {

if (empno == null) throw new EmpNotFoundException(empno);    }

}

@ControllerAdvice(annotations = RestController.class)

class ExceptionHandlerAdvice {

@ExceptionHandler(value = EmpNotFoundException.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ResponseBody

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());     error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

}



스프링예외, 스프링교육, 스프링학원, 자바교육, 자바학원, ExceptionHandler,ControllerAdvice,자바교육학원,스프링교육학원,JAVA교육학원,Spring교육학원



#스프링예외, #스프링교육, #스프링학원, #자바교육, #자바학원, #ExceptionHandler,#ControllerAdvice,#자바교육학원,#스프링교육학원,#JAVA교육학원,#Spring교육학원
 

안녕하세요, 자바교육동영상 입니다.JAVA학원에서도 배우겠지만 혼자 천천히 따라해 보세요, JAVA동영상교육도 들으시면 좋습니다. 자바공부는 실습이 젤이죠^^ JAVA학원 안가셔도 되요,



안녕하세요, 자바교육동영상 입니다.JAVA학원에서도 배우겠지만 혼자 천천히 따라해 보세요, JAVA동영상교육도 들으시면 좋습니다. 자바공부는 실습이 젤이죠^^ JAVA학원 안가셔도 되요,

1. 자바 JVM 실행 데이터 영역(JVM Runtime Data Area), 메소드영역,힙(Heap),스택(Stack)

https://www.youtube.com/watch?v=MOWjp9UUL54&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=4

자바 JVM Runtime Data Area는 JVM이 운영되면서 운영체제로 부터 부여 받은 메모리 영역 으로 아래와 같이 구분됩니다. 메소드 영역(Method Area) : 모든 쓰레드가 공유하는 영역이며 JVM이 시작될 때 생성된다. 클래스와 인터페이스의 메소드에 대한 바이트코드, 전역변수(클래스 변수), 런타임 상수 풀이 위치한다. 오라클의 Hot Spot VM에서는 Permanent Area, Permanent Generation(PermGen)이라고 부른다. 힙(heap) 영역 : 객체를 저장할 때 사용하는 메모리 영역이며 성능을 생각할 때 가장 많이 고려되는 부분이다. JVM 스택(JVM Stack) 때 마다 할당되는 스택 프레임(Stack Frame)이라는각 쓰레드 마다 하나씩 존재하고 메소드가 실행될 구조체를 저장한다. JVM은 오직 JVM 스택에 메소드에 대한 스택 프레임을 추가하고 제거하는 동작만 실행한다. 자바에서 예외 발생 시 printStackTrace() 등의 메서드로 보여주는 Stack Trace의 각 라인은 하나의 스택 프레임을 표현한다. 실행되는 메소드의 스택 프레임을 가지는데 각 스택 프레임에는 지역변수, 메소드의 인자, 메소드의 리턴값, 리턴 번지 등이 저장되고 스택 프레임은 메소드가 끝나면 사라진다. PC 레지스터(Program Counter Register) 쓰레드가 시작될 때 생성되며 쓰레드 마다 하나씩 존재하여 실행 할 JVM의 명령어의 주소를 가리킨다. 실행 상수 풀(Runtime Constant Pool) : 메소드 영역으로 부터 할당 받으며 클래스와 인터페이스의 상수, 메서드, 필드에 대한 모든 레퍼런스를 저장하는 영역이다. 자바 프로그램에서 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리상 주소를 찾아서 참조하게 된다. 네이티브 메소드 스택(Native Mathod Stack) : 자바이외의 언어로 작성된 네이티브 코드를 위한 스택, JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택이다. 메소드 내에서 객체 참조 형으로 선언된 변수인 경우 지역변수로서 스택에 위치하며 힙에 저장되어 있는 객체에 대한 참조 값을 가지게 된다. 객체 참조 형 변수의 값이 null 이라는 의미는 아무것도 참조하고 있지 않다는 의미이다. new 연산자는 힙(heap) 메모리에 객체를 만들고 그 객체의 참조값을 반환한다. 객체 참조 변수의 경우 대입, 메소드 호출시의 인자, 반환형 등으로 사용 될 때 참조 값만 전달 될 뿐, 객체 자체가 복제되어 전달되는 것은 아니다.

2. 자바(JAVA)변수 종류(인스컨스변수, 클래스변수), 자바학원가지말고 혼자해보세요~

https://www.youtube.com/watch?v=5CyNDCnruy4&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=5&t=3s

3. JAVA8 forEach문을 기존 개선된 for 문과 비교해 살펴보고 예제/예문을 통해 학습하는 자바교육영상

https://www.youtube.com/watch?v=7TZYJHHXifQ&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=6&t=1s

4. 자바에서 배열을 생성하고 다루는 방법에 대해 설명한 JAVA교육 영상입니다.

https://www.youtube.com/watch?v=tFq_JmgcL7U&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=7&t=4s

5. 자바의 클래스와 객체의 개념을 이해하시고 예문을 실습해 보세요~ 자바학원교육 안받으셔도 되요, 열공하세요~

https://www.youtube.com/watch?v=3pBujuGBX6g&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=8

위5개 자바동영상 천천히 살펴보세요~

자바학원 필요성도 있지만 코드를 이해하는데 어렵지 않으시면 JAVA학원 가지마시고 천천히 혼자 학습해보세요~

물론 자바학원 교육의 필요성도 있죠^^

감사합니다.

#자바교육, #자바동영상, #JAVA학원, #JAVA동영상, #자바공부, #JAVA공부, #JAVA동영상, #자바교육학원, #자바배열, #자바변수, #클래스변수, #자바forEach

자바교육, 자바동영상, JAVA학원, JAVA동영상, 자바공부, JAVA공부, JAVA동영상, 자바교육학원, 자바배열, 자바변수, 클래스변수, 자바forEach



(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...