나는 아무도 SSH에 대해 모른다고 생각합니다. Struts2+Spring+Hibernate, "기본"엔터프라이즈 개발 아키텍처, 기본 사항이 인용문으로 표시되는 이유는 무엇입니까? 이 기초는 많은 사람들이 생각하는 것이기 때문입니다. 가장 기본적인 것은 서블릿입니다. 많은 훈련 기관은 많은 기본 사항을 가르치지 않으며 세 가지 주요 프레임 워크를 직접 가질 것입니다. SSH 또는 SSI는 많은 사람들이 Javaweb 개발에 프레임 워크가 있어야한다고 생각하게합니다. 프레임 워크가 없으면 손을 잃는 것과 동일합니다. 세 가지 주요 프레임 워크에는 해가 없으며 실용적입니다. 많은 회사들이 그것들을 사용하고 있으며 직접 개발을 시작할 수 있습니다. 그러나 졸업 후, 나는 오랫동안 세 가지 주요 프레임 워크를 사용하지 않았다고 생각했습니다. 스프링은 특히 SpringMVC입니다. Struts2보다 사용하는 것이 훨씬 더 흥미 롭습니다. 실제로, 당신이 그것에 대해 생각한다면, 봄은 스트럿의 장점 중 일부를 흡수하고 몇 가지 편안한 것들을 사용하면 훨씬 더 즐겁습니다. 그러나 오늘 우리는 SpringMVC를 보지 않을 것이며 앞으로 SpringMVC의 우아한 부분을보기 위해 시간이 걸릴 것입니다.
요점에 가십시오. SSH는 버전을 업데이트하고 있으므로 여기서 버전에 대해 이야기하고 싶습니다. 그렇지 않으면 많은 친구들이 나를 꾸짖을 것입니다. 나는 Struts2의 경우 2.3.4를 사용하고, Spring은 최신 3.2.2이고, 최대 절전 모드는 4.1.9이며, 이는 아주 새로운 것입니다.
코드를 입력하기 전에 먼저 세 가지 주요 프레임 워크가 수행 한 역할을 이해해 봅시다.
1) 스트럿 : 왜 우리는 스트럿을 사용합니까? 그들과 서블릿의 차이점은 무엇입니까? 실제로, 우리는 여전히 스트럿없이 MVC를 수행 할 수 있지만 구성 파일에서는 조금 더 우울할 수 있습니다. Struts는 주로 배포 함수를 실현하고 특정 요청을 특정 클래스로 나누고 속성을 설정하는 데 도움이됩니다 (Struts1.x의 ActionForm을 통해 수행). Struts2는 Struts1에 비해 많은 진전을 이루었습니다. 자동으로 값을 설정하고 구현 또는 상속 클래스가 필요하지 않으며 요청 체인과 같은 일련의 개념이 있습니다. 이것들은 많이 사용되지 않기 때문에 형제들을 오도하지 않기 때문에 많이 말하지 않을 것입니다.
2) 봄 : 나는 봄의 다임 요 (Daimyo)가 자바가 아니라고 모르겠다. 많은 사람들이 처음에 IOC를 통해 Spring에 대해 배웠거나 아무것도 몰랐습니다. 어쨌든 세 가지 주요 프레임 워크를 사용할 때는 중요하지 않습니다. Spring은 대부분 링크 클래스를위한 도구입니다. 다른 두 가지 주요 프레임 워크 인 SSI 및 SSH와 결합하여 동일합니다. Spring은 세 가지 주요 프레임 워크를 사용하는 데 더 편리하게 도구를 제공합니다. 물론, 프레임 워크 조합의 많은 프로그램은 Spring의 IOC에 의존하며 물론 거래를 사용할 것입니다. AOP와 다른 고급적인 것들은 필요에 따라 달라집니다. 로그 요구 사항과 가로 채기 요구 사항이있는 경우 AOP를 사용하여이를 달성하는 것이 좋습니다.
3) 최대 절전 모드 : 최대 절전 모드는 기본적으로 ORM의 표준 인 Java 세계에서도 유명합니다. 캐시, 레벨 1 및 레벨 2를 제공하며 HQL도 있습니다. 세 가지 주요 프레임 워크를 결합 할 때 무엇을 사용합니까? 물론, 그것은 ORM 매핑의 주요 기능이므로 당분간 캐시를 고려하지 않을 것입니다. 많은 사람들이 왜 ORM이 필요한지 고려한 적이 없습니다. 실제로, 그것은 주로 데이터 필드와 클래스 간의 충돌 때문입니다. JDBC를 사용하여 필드를 하나씩 작동하고 설정하는 경우 오랫동안 수행 한 후에 미치게 될 것입니다. 따라서 현재 ORM이 나타납니다.
세 가지 주요 프레임 워크는 다음과 같은 것들을 담당합니다. struts2- 양식의 전달 및 해당 처리를 책임지고, Spring -Class Organization (예 : IOC)은 Struts2가 원래 관리하는 동작을 콩으로 관리하고 최대 절전 모드 - ORM 매핑을 관리하며 클래스를 테이블에 매핑합니다.
노동의 일반 부서를 이해 한 후, 우리는 코딩을 시작했습니다. 세 가지 주요 프레임 워크에서 가장 번거로운 것은 패키지입니다. 많은 사람들이 주로 세 가지 주요 프레임 워크의 패키지를 가져 오는 데 도움이 될 수 있기 때문에 주로 MyEclipse를 사용하는 것을 좋아합니다. 그러나 초보자는 그것을 사용해서는 안되는 것이 좋습니다. 먼저, MyClipse에는 자체 프로젝트 구조가 있습니다. Eclipse 가이드를 받으면 일부 프로젝트 측면을 설정하여 다른 프로젝트를 설정해야합니다. 둘째, MyClipse는 회사에서 거의 사용하지 않으므로 Eclipse에 익숙해지는 것이 좋습니다. 아니면 아이디어를 좋아한다면 좋습니다.
Struts2에 필요한 패키지는 Antlr, ASM, Xwork, Struts2-Core, Ognl, Common-Logging, Common-Fileupload, Struts-Spring-Plugin입니다. 아마도 몇 개 밖에 없을 것입니다. 시작시 오류를 추가 할 수 있습니다. 시작하자마자 모든 패키지를 버리는 것이 좋습니다. 세 프레임 워크의 일부 패키지는 충돌 중입니다.
Spring3에서 요구하는 패키지는 스프링 콩, 스프링 코어, 스프링 컨텍스트, 스프링 컨텍스트 지원, 스프링 발현, 스프링-오르름 (세 가지 주요 프레임 워크를 사용하고 ORM 지원이 필요함), 스프링 웹, 스프링 -TX (트랜잭션을 사용하지 않지만 예제에는 관련이 없음)입니다.
Hibernate4에서 요구하는 패키지는 다음과 같습니다. Hibernate 다운로드 패키지의 필요한 폴더의 모든 JAR 패키지를 다운로드합니다.
이 패키지와 마찬가지로 여전히 똑같습니다. 세 가지 프레임 워크의 일부 패키지에는 충돌이 있기 때문에 시작하자마자 모든 패키지를 넣는 것이 좋습니다. 필요할 때 적절한 경우 추가하십시오. ClassNotFound가 나타나면 해당 JAR 패키지를 LIB 디렉토리에 넣으십시오.
준비는 여기서 끝나고 우리는 공식적으로 시작합니다.
1) 우선, 우리는 struts2를 사용해야하며 요청을 가로 채워야합니다.
<filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsprepareAndexecuteFilter </filter-class> </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-panttern>/*/url-patn> </필터 매핑>
이 코드는 Struts가 모든 요청을 가로 채도록 허용합니다. 물론, 모든 요청이 봄에 의해 가로 채는 것을 의미하지는 않습니다. 특정 접미사 이름을 가로 채도록 struts.xml을 구성 할 수도 있습니다. 일반적으로 말하면, 그것은 행동입니다. 다음과 같이 :
<constant name = "struts.objectFactory"value = "spring" /> <constant name = "struts.action.extension"value = "action" />
struts.action.extension intercepting의 기본 접미사 이름을 구성하여 가로 채기 할 때 접미사 이름을 확인하고 일치하는 이름은 Struts로 전달됩니다. struts.objectory는 Struts 전달 처리 클래스가 관리를 위해 Spring으로 넘겨진다는 것을 의미합니다. 즉, 콩으로 관리됩니다.
2) 일반적으로 Spring을 직접 사용하면 *ApplicationContext를 호출하지만 이제 웹에 있으므로 수동으로 호출 할 수 없습니다. 실제로, Spring은 웹 상황에서 호출 방법을 제공합니다. 서블릿 (사용하지 않았고 사용 방법을 모르겠습니다). 청취자, 서블릿은 필터를 지원하지 않는 응용 프로그램 서버를위한 서비스입니다. 그러나 이제 기본적으로 리스너를 사용합니다.
<Leater> <Leater-Class> org.springframework.web.context.contextloaderListener </Leater-Class> </largeer>
이 경우, 스프링이 다른 프레임 워크와 결합되어야하는 대부분의 경우. SpringMVC 만 사용할 때는 위의 struts 서플렛을 교체하기 위해 Dispatcherservlet을 직접 구성 할 수 있습니다. 나중에 SpringMVC를 사용할 때 세부 사항을 살펴 보겠습니다.
이 경우 Web-Inf 디렉토리의 ApplicationContext.xml 파일이 일반적으로로드됩니다. 파일 이름이 여기에 있지 않거나 경로가 여기에 있지 않으면 ConfigContextPath 속성을 구성 할 수 있습니다.
<CERTXT-PARAM> <Param-name> configContextPath </param-name> <Param-value> web-inf/applicationcontext.xml </param- value> </context-param>
ClassPath : Prefix 등의 사용을 지원합니다. 여기서는 이야기하지 않으며 Spring의 구성 파일을 자세히 읽을 수 있습니다. 이런 식으로, 우리는 실제로 스트럿과 스프링을 결합했지만 콩 구성과 스트럿 전달을 수행하지 않았습니다.
3) ORM으로서, 최대 절전 모드는 현재 봄까지 관리됩니다. Spring은 LocalssessionFactory를 제공합니다. 이 클래스, Hibernate3 및 4는 다르고 Spring은 2를 제공합니다. 다음 구성은 ApplicationContext.xml에 있습니다
<bean id = "sessionFactory"> <속성 이름 = "DataSource"ref = "DataSource"/> <속성 이름 = "MappingResources"> <list> </list> </property name = "HibernateProperties"> <props> </props> </property> </ban
실제로 구성은 최대 절전 모드의 구성과 유사하므로 여기에서 특정 코드에 대해서는 이야기하지 않습니다.
4) 과거에, 봄 2.5.x가 가장 많이 사용했을 때, 우리는 가장 많이 사용했지만 Spring 3.x는 처음 에이 지원을 제공하지 않았습니다. 우리는 기본 세션을 사용하여 작동해야하지만 (세션)를 주입해야하지만 실제로 여기에는 문제가 있습니다. 각 요청에 대한 연결을 열고 닫으면 더 많은 리소스가 소비되지만 연결을 닫지 않으면 그리 좋지 않습니다. 따라서 트레이드 오프 솔루션과 연결을 관리하는 관리자가 있습니다. 여기 Spring은 OpenSessionInView를 제공합니다. 보기가 열릴 때마다 (기본적으로 모든 요청) 세션이 열립니다. 우리는 그것이 내부적으로 어떻게 관리되는지를 무시할 것입니다.
<filter> <filter-name> OpenSessionInViewFilter </filter-name> <filter-class> org.springframework.orm.hibernate4.support.opensessionInviewFilter </filter-class> </filter> <filter-mapping> <filter-name> OpenSessionInViewFilter </filter-name> <url-pattern>/*</url-pattern> </필터 매핑>
여기서 우리는 여전히 모든 요청을 가로 채도록 요청합니다. 물론 액션 접미사 만 인터셉트하도록 구성 할 수 있으므로 자원을 낭비 할 필요가 없습니다.
5) 기본적으로 SSH 프레임 워크가 설정되었으며 다음은 코드의 문제입니다. 스프링 구성 파일에서만 Bean을 구성하면 또는 주석이 마음에 드는 경우 @Component (value = 'bean name') 만 직접 할 수 있지만 구성 파일에서 Component-Scan을 활성화해야합니다.
코드는 대략 다음과 같이 자세히 작성되지 않습니다.
@Component (value = "userAction") public class userAction {} <package name = "user"extends = "struts-default"namespace = "/user"> <!-사용자 로그인-> <action name = "login"> <result name = "error">/pages/login.jsp </acture> </cackage> 실제로 클래스의 포인터를 포인터 콩으로 수정하면됩니다.
자세한 코드를 게시하지 않겠습니다. 결국 요약입니다. 일반적으로 SSH는 Framework 사양에 따라 작성된 코드가 기본적으로 특정 양식을 가지므로 향후 유지 보수에 더 좋습니다. 그러나 초보자에게는 프레임 워크에 너무 많이 의존하지 않는 것이 좋습니다. 실제로 사용해야한다면 일반적 으로이 프레임 워크가 수행하는 일, 사용 해야하는 상황 및 어떤 상황을 사용하지 않아야하는지 이해해야합니다.