Spring + Hibernate + Struts 정화
web.xml
< context - param >
< param - name > log4jConfigLocation </ param - name >
< param - value >/ WEB - INF / classes / log4j.properties </ param - value >
</ context - param >
< listener >
< listener - class > org.springframework.web.util.Log4jConfigListener </ listener - class >
</ listener >
1. spring + struts
1. springContext 불 러 오기
struts - config. xml 에 plug - in 플러그 인 을 추가 하여 springContext 를 불 러 옵 니 다.
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>
applicationContext. xml 는 spring 의 프로필 입 니 다.
2. strutsAction 을 Spring 용기 에 맡 겨 관리
struts - config. xml 의 action 속성 을 수정 합 니 다. action 의 type 값 은 구체 적 인 실현 클래스 를 지정 하지 않 고 프 록 시 클래스 로 통일 적 으로 수정 합 니 다.
<action input="/login.jsp"
name="loginActionForm"
path="/loginAction"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy"
validate="false">
<forward name="success" path="/success.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
3. applicationContext. xml 에 있 는 bean name 값 설정 은 struts - config. xml 에서 action path 값 과 대응 하여 프 록 시 Delegating Action Proxy 가 들 어 오 는 path 에 따라 springContext 에서 해당 하 는 bean 을 찾 아 struts 에 인 스 턴 스 를 되 돌려 줍 니 다.
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" />
</property>
</bean>
2. spring + hibernate
1.dateSource
springContext 에 dateSource Bean 을 설정 합 니 다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
<property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
<property name="username" value="it"></property>
<property name="password" value="it"></property>
</bean>
2.sessionFactory
springContext 에 session Factory Bean 을 설정 합 니 다.
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>hbm\OvertimeRecord.hbm.xml</value><!--hbm -->
<value>hbm\OvertimePermit.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
3.transactionManager
springContext 에 transaction Manager Bean 을 설정 합 니 다.
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
4.DAO bean
<bean id="Ilogin" class="com.derek.business.Login">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
public class Login extends HibernateDaoSupport implements LoginInterface
DAO 계승 HibernateDao 지원
Hibernate Support 는 HibernateTemplate 와 Session Factory 실례 의 연관 성 을 실 현 했 고, HibernateTemplate 는 Hibernate Session 조작 을 봉 인 했 으 며, HibernateTemplate. execute 방법 은 봉 인 된 메커니즘 의 핵심 이다. HibernateTemplate 를 빌려 우 리 는 매번 데이터 조작 에서 벗 어 나 세 션 실례, 시작 사무,제출 / 스크롤 백 및 번 거 로 운 try / catch / finally 의 번 거 로 운 작업.
Spring 의 사무 관 리 는 실제 적 으로 동적 AOP 메커니즘 을 바탕 으로 이 루어 집 니 다. 동적 AOP 를 실현 하기 위해 Spring 은 기본 적 인 상황 에서 자바 DynamicProxy 를 사용 합 니 다. 그러나 Dynamic Proxy 는 대리 대상 에 게 하나의 인 터 페 이 스 를 실현 해 야 한다 고 요구 합 니 다. 이 인 터 페 이 스 는 대 리 를 준비 하 는 방법 을 정의 합 니 다.인터페이스 가 구현 되 지 않 은 자바 클래스 에 대해 서 는 다른 방식 을 사용 해 야 하 며, Spring 은 CGLib 를 통 해 이 기능 을 수행 해 야 한다.
5. DAOProxy 대리 bean
프 록 시 를 통 해 위의 DAO bean 을 spring 용기 의 사무 관리 에 포함 시 키 고 그 중에서 어떤 방법 으로 사무 관 리 를 하 는 지 설정 합 니 다.
<bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="Ilogin" /> <!-- bean-->
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop> <!-- insert -->
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!-- get -->
</props>
</property>
</bean>
6.action bean
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" /> <!-- DAO bean , ref bean, LoginAction -->
</property>
</bean>
예제 코드:
struts-conifg.xml
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE struts - config PUBLIC " -//Apache Software Foundation//DTD Struts Configuration 1.1//EN " " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
< struts - config >
< form - beans >
< form - bean name = " loginActionForm " type = " com.derek.form.LoginActionForm " />
</ form - beans >
< action - mappings >
< action input = " /login.jsp " name = " loginActionForm " path = " /loginAction " scope = " request " type = " org.springframework.web.struts.DelegatingActionProxy " validate = " false " >
< forward name = " success " path = " /success.jsp " />
< forward name = " failure " path = " /failure.jsp " />
</ action >
</ action - mappings >
< plug - in className = " org.springframework.web.struts.ContextLoaderPlugIn " >
< set - property property = " contextConfigLocation " value = " /WEB-INF/applicationContext.xml " />
</ plug - in >
</ struts - config >
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans SYSTEM "D:\JAVA\MyWork\SpringDemo\SpringWeb\WEB-INF\spring-beans.dtd">
<!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->
<!--
- Root application context for the Countries application.
- Web-specific beans are defined in "countries-servlet.xml".
-->
<beans>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
<property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
<property name="username" value="it"></property>
<property name="password" value="itservice"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>hbm\OvertimeRecord.hbm.xml</value>
<value>hbm\OvertimePermit.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!--------------- JNDI ----------------
bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/cqccms</value>
</property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">
weblogic.jndi.WLInitialContextFactory
</prop>
<prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
</props>
</property>
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
lazy-init="default" autowire="default" dependency-check="default">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
weblogic.jndi.WLInitialContextFactory
</prop>
<prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
lazy-init="default" autowire="default" dependency-check="default">
<property name="jndiTemplate">
<ref local="jndiTemplate" />
</property>
<property name="userTransactionName">
<value>weblogic/transaction/UserTransaction</value>
</property>
</bean>
--------------------------------->
<bean id="RecordDao" class="com.derek.business.RecordDao">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="RecordDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="RecordDao" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="Ilogin" class="com.derek.business.Login">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="Ilogin" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" />
</property>
</bean>
</beans>
LoginInterface
package com.derek.myinterface;
public interface LoginInterface {
public boolean check(String name,String pwd);
}
Login
package com.derek.business;
import com.derek.myinterface.LoginInterface;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.List;
public class Login extends HibernateDaoSupport implements LoginInterface{
private SessionFactory sessionFactory;
private String hsql = "from OvertimePermit where account=? and password=?";
public Login() {}
public boolean check(String name,String pwd){
String condition[] = {name, pwd};//
/**
* HibernateTemplate
* Session 、 、 / try/catch/finally
*/
List l = this.getHibernateTemplate().find(hsql, condition);
if (l.size() > 0) return true;
else return false;
}
}
RecordDaoInterface
package com.derek.myinterface;
import java.util.List;
import hbm.OvertimeRecord;
public interface IRecordDao {
public List findAll(String hsql);
public void insert(OvertimeRecord or);
}
RecordDao
package com.derek.business;
import com.derek.myinterface.IRecordDao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.hibernate.SessionFactory;
import hbm.OvertimeRecord;
public class RecordDao extends HibernateDaoSupport implements IRecordDao{
private SessionFactory sessionFactory;
public RecordDao() {
}
public List findAll(String hsql) {
return this.getHibernateTemplate().find(hsql);
}
public void insert(OvertimeRecord or) {
this.getHibernateTemplate().saveOrUpdate(or);
}
}
LoginAction 은 용기 에 주 입 된 Login 인 스 턴 스 를 통 해 업무 수행 (인터페이스 강제 형식 으로 전환 해 야 합 니 다)
package com.derek.action;
import javax.servlet.http.*;
import com.derek.form.*;
import org.apache.struts.action.*;
import org.apache.log4j.Logger;
import com.derek.myinterface.LoginInterface;
public class LoginAction extends Action {
private LoginInterface login;
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
Logger log = Logger.getLogger(this.getClass().getName());
LoginActionForm loginActionForm = (LoginActionForm) actionForm;
String name = loginActionForm.getName();
String pwd = loginActionForm.getPwd();
boolean TF = login.check(name,pwd);
if(TF){ log.warn("LoginSuccess------------");;return actionMapping.findForward("success");}
else{ log.warn("LoginFailure------------");;return actionMapping.findForward("failure");}
}
public void setLogin(LoginInterface Ilogin) {this.login = Ilogin;}
public LoginInterface getLogin() {return login;}
}
클래스 에서 Context 를 통 해 bean 인 스 턴 스 를 직접 얻 습 니 다 (프 록 시 클래스 를 통 해 인 스 턴 스 를 얻 고 인터페이스 에서 강제 형식 으로 전환 해 야 합 니 다)
package com.derek.pub;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.derek.myinterface.IRecordDao;
import java.util.List;
import hbm.OvertimeRecord;
public class Untitled1 {
public Untitled1() {
ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
IRecordDao recordDao = (IRecordDao)ctx.getBean("RecordDaoProxy");
OvertimeRecord newor = new OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
newor.setMark("0");
recordDao.insert(newor);
List l = recordDao.findAll("from OvertimeRecord");
for(int i=0;i<l.size();i++){
OvertimeRecord or = (OvertimeRecord)l.get(i);
System.out.println(or.getId());
}
}
public static void main(String[] a){
Untitled1 u = new Untitled1();
}
}
하나의 Spring application context 의 정 의 는 여러 가지 서로 다른 문맥 에 의 해 읽 힐 수 있 습 니 다. 예 를 들 어 FileSystemXmlapplicationContext 와 ClassPathXmlapplicationContext, XmlWebapplicationContext 등 입 니 다.기본적으로 웹 프로그램 은 'WEB - INF / applicationContext. xml' 에서 루트 context 를 받 습 니 다.모든 Spring 응용 프로그램 에서 XML 파일 에 정 의 된 application context 는 Hibernate session factory 와 데이터 액세스 와 업무 대상 (위 에서 정의 한 bean 과 같이) 을 포함 한 모든 application beans 를 연결 합 니 다.이들 대부분 은 Spring 용기 에 의 해 관리 되 는 것 을 의식 하지 못 하고 심지어 다른 bean 과 합작 할 때 자바 빈 스 의 규범 만 따 르 기 때문이다.하나의 bean 속성 및 값 매개 변 수 를 표시 할 수도 있 고 다른 합작 bean 일 수도 있 습 니 다.아래 의 bean 정 의 는 Spring 웹 MVC context 의 일부분 으로 가장 기본 적 인 application context 에서 business beans 를 방문 할 수 있 습 니 다.
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ProductService productService = (ProductService) context.getBean("myProductService");
ApplicationContext context =
new FileSystemXmlApplicationContext("C:/myContext.xml");
ProductService productService =
(ProductService) context.getBean("myProductService");
ApplicationContext context =
new ClassPathXmlApplicationContext("myContext.xml");
ProductService productService =
(ProductService) context.getBean("myProductService");
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.