java 에러 - The processing instruction target matching "[xX][mM][lL]" is not allowed
내용을 보시려면 비밀번호를 입력하세요.
- xml 설정파일에 직접 <bean> 태그로 등록 할 수 있지만 spring 3.0 이후부터는 대부분이 @(어노테이션)을 사용하게 된다.
1. 만든 두개의 xml 파일에 다음과 같은 코드를 추가한다.
1
2
3
4
5
6
7
8 |
<beans>
<context:component-scan base-package="com.controller">
</context:component-scan>
<!-- 지정한 패키지에 존재하는 어노테이션을 사용한 클래스를
전부 스캔하여 여기에 <bean> 형태로 등록한다 라는 뜻이다. -->
</beans> |
-base-package= 안에 설정에 해당하는 (서블릿 설정파일이면 컨트롤러를, 리스너의 설정파일이면 모델단에 해당하는) 패키지 명이 들어간다.
2. @(어노테이션)을 이용해 컨트롤러, 서비스 등을 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 |
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.service.HelloService;
@Controller
public class HelloController {
@Autowired
HelloService service;
@RequestMapping("/hello.do")
public String hello(Model model){
System.out.println("sfefd");
service.exe();
//포워딩 시키고 싶은 데이터는 메소드의 매개변수로 모델을 받으면 된다.
//모델에 속성을 추가하면 된다.
//이렇게 만들어진 모델은 리퀘스트의 생명 주기와 같다.
//설정을 통해 어플리케이션, 세션으로 바꿀 수 있다.
//jsp에서 호출을 할 때는 EL을 사용하면 된다.
model.addAttribute("pw", "1234");
return "/WEB-INF/view/hello.jsp";
}
} |
1
2
3
4
5
6
7
8
9 |
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public void exe(){
System.out.println("service 실행");
}
}
|
@Controller, @Service, @Repository는 @Component의 자식들이다. Component를 스캔하면 전부 스캔 되는 것이다.
@Controller는 이것만 쓰면은 기능을 못한다.
기능을 실행 하는 메소드에 @RequestMapping("/hello.do")라는 매핑 어노테이션이 필요하고,
리턴으로 데이터를 받거나 보여줄 jsp 파일 위치가 들어가야 한다.
서비스를 호출 해야 한다면 서비스를 맴버 변수로 가지고, 위에 @Autowired 가 붙으면 자동으로 생성자나 setter를 이용한 di를 생성한다.
constructor 나 byType 혹은 byName 으로 생성자나 setter를 설정할 수 있다. 생성자나 setter가 존재 해야 가능하다.
[Spring]스프링 charactor 인코딩 필터 추가. (0) | 2013.10.27 |
---|---|
[Mybatis]마이바티스 설정하기. (0) | 2013.10.25 |
[Spring]5. Spring MVC 설정하기. (0) | 2013.10.22 |
[Spring]4. scope (0) | 2013.10.21 |
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI (0) | 2013.10.21 |
- 스프링 mvc 프로젝트는 2개의 xml파일이 필요하다.
보통의 pojo객체를 관리하는 bean관리 xml, M
컨트롤러 bean을 관리하기 위한 xml. C
- 자바 빈 객체를 관리하는 xml은 톰캣 서버가 실행 될때 같이 실행 되어야 한다.
즉, 서버 실행과 동시에 spring 컨테이너가 같이 실행 되어야 한다.
- 서버가 실행 될 때를 감지하는 리스너와 spring bean 설정파일이 필요하다.
리스너는 스프링 라이브러리 안에 존재 하며, spring bean xml파일과 web.xml에 등록을 해야 한다.
1. 프로젝트에 스프링 라이브러리를 추가한다.
1-1. 일반적인 다이나믹 웹 프로젝트를 생성.
1-2. /WEB-INF/lib 폴더에 스프링 라이브러리를 추가.
- 스프링을 사용하려면 logging 라이브러리가 필요하다.
2. web.xml에 스프링 라이브러리 안에 있는 리스너와 프론트 서블릿을 추가한다.
2-1. 리스너를 추가한다.
- 리스너를 추가하는 이유는 스프링의 자바 빈을 관리하는 xml파일을 서버가 실행 할때 같이 로딩 시키기 위함.
1
2
3
4
5
6
7
8 |
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param> |
- 이 코드의 뜻은 이렇다.
* 서버 웹 어플리케이션안의 contextConfigLocation라는 변수에 /WEB-INF/applicationContext.xml를 넣는다.
* 서버가 실행할 때 ContextLoaderListener리스너가 실행 된다.
* 리스너는 contextConfigLocation변수 안에 존재하는
설정 파일 패스와 이름을 호출하여 (/WEB-INF/applicationContext.xml 파일을 호출하여) 스프링 컨테이너를 실행 하게 된다.
2-2. 리스너가 로딩할 xml설정 파일을 만든다.
- 이름이 딱 정해진 것이 아니다. param-value에 자기가 정한대로 넣으면 된다.
- 스키마로 네임 스페이스를 정하는데 여기까진 beans, context를 추가 하면 된다.
나중에 더 추가 할 수 있다.
2-3. 프론트 서블릿을 추가한다.
- 톰캣에서 만들어진 서블릿 기능을 스프링에서 만든 서블릿으로 위임하기 위함이다.
-web.xml에 등록해야 할 서블릿.
1
2
3
4
5
6
7
8
9 |
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> |
-모든 .do가 붙은 요청은 이 서블릿이 받는다.
2-4. 서블릿이 사용할 xml 설정 파일을 만든다.
- 이 설정 파일에는 C, Controller bean을 관리한다.
- 반드시 위에서 지정한 servlet-name에 "-servlet.xml"라는 이름으로 파일을 만들어야 한다.
"mvc-servlet.xml"
[Mybatis]마이바티스 설정하기. (0) | 2013.10.25 |
---|---|
[Spring]6. spring MVC 시작하기. (0) | 2013.10.22 |
[Spring]4. scope (0) | 2013.10.21 |
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI (0) | 2013.10.21 |
[Spring]2. Spring DI - xml파일을 이용한 DI (0) | 2013.10.21 |
1
2
3
4
5
6
7
8
9
10
11
12 |
public class MainTest {
public static void main(String[] args) {
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
Controller c1 = factory.getBean(Controller.class);
Controller c2 = factory.getBean(Controller.class);
System.out.println(c1.hashCode()+" "+c1);
System.out.println(c2.hashCode()+" "+c2);
}
} |
1
2
3 |
<bean id = "controller"
class = "Controller"
scope = "singleton"/> |
- scope에 설정하면 된다.
[Spring]6. spring MVC 시작하기. (0) | 2013.10.22 |
---|---|
[Spring]5. Spring MVC 설정하기. (0) | 2013.10.22 |
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI (0) | 2013.10.21 |
[Spring]2. Spring DI - xml파일을 이용한 DI (0) | 2013.10.21 |
[Spring] 1. Spring DI (0) | 2013.10.21 |
- @(어노테이션)을 이용한 방법.
- Spring DI는 xml로 직접 소스를 작성하지 않고, @(어노테이션)을 써도 ApllicationContext.xml 파일에 자동으로 <bean>형태로 객체를 생성한다.
- context 스키마를 추가한다.
- xml설정 파일에 다음과 같은 코드를 추가 한다.
-applicationContext.xml
1
2
3
4
5
6 |
<beans>
<context:component-scan base-package="com"></context:component-scan>
<!-- 지정한 패키지에 존재하는 어노테이션을 사용한 클래스를 전부 스캔하여 여기에 등록한다 라는 뜻이다. -->
</beans> |
클래스에 @Component 를 추가한다.
1
2
3
4
5
6
7 |
@Component
public class HelloService {
public void exe(){
System.out.println("service 실행");
}
}
|
끝.
[Spring]5. Spring MVC 설정하기. (0) | 2013.10.22 |
---|---|
[Spring]4. scope (0) | 2013.10.21 |
[Spring]2. Spring DI - xml파일을 이용한 DI (0) | 2013.10.21 |
[Spring] 1. Spring DI (0) | 2013.10.21 |
XML 이란? (0) | 2013.10.21 |
- xml설정파일을 이용하는 방법..
- 자바에서 클래스를 추가할 때 import를 하는것 처럼 태그를 추가할 때 xml설정 파일에도 스키마로 네임스페이스를 추가하여야 한다.
- Dao 인터페이스와 그 것을 구현한 OracleDao.
- Service인터페이스와 구현한 OracleService. Dao에 의존성이 있기 때문에 멤버로 Dao를 가지고 있다.
- Service를 가지고 있는 Coltroller.
- Controller를 호출할 메인 메소드.
- 예상 결과 Controller를 호출합니다. Controller - OracleService를 호출합니다. OracleService.getList() - OracleDao.GetList() 를 호출합니다 OracleDao.getList() - Oracle DB에 접근합니다 OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다. Controller - Service에서 데이터를 받아 View에 넘겨줍니다 |
- 이것을 실행 시키기 위해서는 설정된 xml파일이 필요하다.
- 위의 세 클래스(controller, service, dao)를 이와 같이 등록한다.
- Bean은 객체이다. Spring DI는 모든 등록된 클래스를 프로젝트를 처음 실행할때 전부 객채로 생성한다. 객체가 다른 객체를 필요로 할 때, 필요로 하는 객체를 생성자나 setter를 통해 주입시켜준다. - xml파일에 <constructor-arg>를 이용하여 생성자를 이용한 DI도 가능하다. - autowire속성으로 자동으로 의존성 주입이 가능하다.
|
- 다음 코드는
- 다음과 같다.
|
[Spring]4. scope (0) | 2013.10.21 |
---|---|
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI (0) | 2013.10.21 |
[Spring] 1. Spring DI (0) | 2013.10.21 |
XML 이란? (0) | 2013.10.21 |
Spring (0) | 2013.10.18 |
1. Spring DI
- Spring DI : 모든 클래스의 객체를 미리 생성해 두고, 어떠한 객체가 필요로 하는 객체를 주입 시켜주는 일종의 컨테이너.
주입 시키는 방법은 xml 설정과 @어노테이션이 있다. 어노테이션도 결국 xml로 바뀐다. 보통 어노테이션 방법을 많이 쓰지만 소스는 없고 클래스 파일만 가지고 있을때는 xml 설정을 쓴다.
- 생성자, setter주입을 사용한다. xml에 설정하면 자동으로 주입 시킨다.
- 경량 컨테이너라고도 한다. 다른 컨테이너에 비해 리소스 용량이 크지 않기 때문이다.
- DI를 사용하기 위해서는 필요한 클래스를 멤버 변수로 가지고 있어야 하고, 생성자 혹은 setter를 가지고 있어야 한다.
- 빈은 빈팩토리에서 getBean()을 실행 할 때 모든 객체 생성이 이루어 진다.
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI (0) | 2013.10.21 |
---|---|
[Spring]2. Spring DI - xml파일을 이용한 DI (0) | 2013.10.21 |
XML 이란? (0) | 2013.10.21 |
Spring (0) | 2013.10.18 |
Maven (0) | 2013.10.18 |
- XML(Extensible Markup Language) : 확장형 마크업 언어. 데이터 교환에 대한 표준을 정의 한다.
- SGML(Standard Generalized Markup Language) : xml 과 html의 모체가 되는 언어.
다양한 형태의 전자문서들을 서로 다른 시스템들 사이에 정보의 손실없이 효율적으로 전송, 저장, 자동처리를 위한 국제표준화기구, ISO 문서처리표준의 하나이다. html과 xml도 이것을 이용해 만들어졌다.
[Spring]2. Spring DI - xml파일을 이용한 DI (0) | 2013.10.21 |
---|---|
[Spring] 1. Spring DI (0) | 2013.10.21 |
Spring (0) | 2013.10.18 |
Maven (0) | 2013.10.18 |
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것. (0) | 2013.10.17 |
- Spring : 스프링은 컨테이너와 같다. 객체 생성과 관리는 스프링이 한다. 스프링에서 객체는 bean이라고 한다.
- InsertController
1 2 3 4 5 6 | public class InsertController { public void execute(){ System.out.println("InsertController.execute() 실행."); } } |
- applicationContext.xml
* bean을 관리하는 설정 파일.
* 반드시 이런 이름을 쓸 필요는 없다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id = "insertController" class = "wakeup.controller.InsertController"> </bean> </beans> |
- Maintest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import wakeup.controller.InsertController; public class MainTest { public static void main(String[] a){ //빈 설정을 한 xml 리소스 파일의 위치를 찾음. Resource resource = new ClassPathResource("applicationContext.xml"); //찾은 리소스 파일을 가지고 빈을 생성할 수 있는 빈 팩토리를 만든다. BeanFactory beanFactory = new XmlBeanFactory(resource); //빈 팩토리에서 insertController를 가져온다. id나 클래스 이름을 적는다. //id는 여러개의 객체에서 호출 할 때, //class는 하나의 객체에서 호출 할 때 사용한다. InsertController Controller = (InsertController) beanFactory.getBean("insertController"); Controller.execute(); } } |
- 새로 객체 생성을 할 필요 없이 spring 에서 객체를 관리하고 호출 할 수 있다.
[Spring] 1. Spring DI (0) | 2013.10.21 |
---|---|
XML 이란? (0) | 2013.10.21 |
Maven (0) | 2013.10.18 |
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것. (0) | 2013.10.17 |
Dependency Injection, DI - 의존성 주입. (0) | 2013.10.16 |
- group id : 패키지 명.name space.
- artifact id : 프로젝트 명. 메이븐 프로젝트는 전 세계 공유를 목적으로 하기 때문에 패키지 명과 함께 전 세계에 유일한 이름이 들어가야 한다.
모든 자바 파일은 소스와 리소스로 구성된다. xml파일은 리소스 파일이다.
maven 설정은 pom.xml 에 전부 들어간다.
- pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>wakeup</groupId> <artifactId>maven-test</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 라이브러리를 직접 다운 받아 클래스패스에 넣지 않아도 maven의 pom.xml 파일에 다음 코드를 입력하면 자동으로 서버에서 다운받는다.--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.4.RELEASE</version> </dependency> </dependencies> </project> |
- 스코프
* compile 스코프
* provided 스코프
* runtime 스코프
* test 스코프
- 추이 의존성 : 의존성이 추가 될 때 라이브러리가 중복 될 때가 있다.
- 메이븐 프로젝트는 보통의 export가 아닌 메이븐 빌드를 통해 일반 jar, war 파일로 배포해야 한다.
XML 이란? (0) | 2013.10.21 |
---|---|
Spring (0) | 2013.10.18 |
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것. (0) | 2013.10.17 |
Dependency Injection, DI - 의존성 주입. (0) | 2013.10.16 |
Collection - List 배열, Set 셋 (0) | 2013.10.15 |