SSH의 세 가지 주요 프레임워크 통합에 대한 자세한 설명
SSH는 JavaWeb의 고전적인 프레임워크입니다. 100% 사람들이 SSH 프레임워크를 알아야 한다고 말할 수는 없지만, 대부분의 회사에서는 프레임워크에 관해서라면 ssh를 언급하겠습니다. 매우 간단한 등록 예제를 사용합니다. 프레임워크를 통합할 때는 통합하기 전에 각 프레임워크를 별도로 테스트하는 데 주의해야 합니다. 그렇지 않으면 통합 후 문제를 해결하기가 어렵습니다.
환경: windows + MyEclipse + JDK1.7 + Tomcat7 + MySQL
코드는 테스트를 거쳤습니다. 오류가 있는 경우 군데군데 명확하게 설명하지 않았기 때문일 수 있으니 메시지를 남겨주세요.
1. 통합 원리
2. 가이드 패키지(41)
1. hibernate persist api java 지속성 사양(인터페이스)
(3) 데이터베이스 드라이버
2.스트럿츠2
(1) struts-blank.war/WEB-INF/lib/*
참고: javassist-3.18.1-GA.jar 패키지와 최대 절전 모드 간의 중복(상위 버전만 유지)
( 2) struts 통합 스프링 플러그인 패키지
참고: 이 패키지를 가져오면 struts2가 스프링 컨테이너를 찾을 때 시작됩니다. 찾을 수 없으면 예외가 발생합니다
3. spring
(1) 기본: 4+2
코어 | 컨텍스트 | 로깅 | log4j
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx/spring-tx-4.2.xsd "><bean name="userAction" class="cn.xyp.web.action.UserAction"></bean></beans>
2. 프로젝트로 시작하도록 spring 구성 )
<!-- 让spring随web启动而创建的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置spring配置文件位置参数 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
4. struts2를 별도로 구성합니다
1. struts2 기본 구성 파일(struts.xml)을 구성합니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="crm" namespace="/" extends="struts-default"><action name="UserAction_*" class="cn.xyp.web.action.UserAction" method="{1}"><result name="success">/success.jsp</result></action></package></struts>
<!-- 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-pattern>/*</url-pattern> </filter-mapping>
### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
### Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
# struts.objectFactory = spring
### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
struts.objectFactory.spring.autoWire = name
로그인 후 복사
### if specified, the default object factory can be overridden here ### Note: short-hand notation is supported in some cases, such as "spring" ### Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here # struts.objectFactory = spring ### specifies the autoWiring logic when using the SpringObjectFactory. ### valid values are: name, type, auto, and constructor (name is the default) struts.objectFactory.spring.autoWire = name
Spring은 액션의 수명주기를 완벽하게 관리합니다. Spring의 기능만 Action에 적용됩니다.
4. 통합 솔루션 2: Spring은 액션 생성과 어셈블리를 담당합니다. (권장) ApplicationContext.xml:<!-- # struts.objectFactory = spring 将action的创建交给spring容器 struts.objectFactory.spring.autoWire = name spring负责装配Action依赖属性--><constant name="struts.objectFactory" value="spring"></constant>
<!-- 整合方案1:class属性上仍然配置action的完整类名 struts2仍然创建action,由spring负责组装Action中的依赖属性 --><action name="UserAction_*" class="cn.xyp.web.action.UserAction" method="{1}" ><result name="toHome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action>
6. 구성 별도로 최대 절전 모드
1. 엔터티 클래스 및 orm 메타데이터 가져오기
예: User .java <!-- action --><!-- 注意:Action对象作用范围一定是多例的.这样才符合struts2架构 --><bean name="userAction" class="cn.itcast.web.action.UserAction" scope="prototype" ><property name="userService" ref="userService" ></property></bean>
<!-- 整合方案2:class属性上填写spring中action对象的BeanName 完全由spring管理action生命周期,包括Action的创建 注意:需要手动组装依赖属性 --><action name="UserAction_*" class="userAction" method="{1}" ><result name="toHome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action>
package cn.xyp.web.domain;import java.util.HashSet;import java.util.Set;public class User {private Long user_id;private String user_code;private String user_name;private String user_password;private Character user_state;public Long getUser_id() {return user_id; }public void setUser_id(Long user_id) {this.user_id = user_id; }public String getUser_code() {return user_code; }public void setUser_code(String user_code) {this.user_code = user_code; }public String getUser_name() {return user_name; }public void setUser_name(String user_name) {this.user_name = user_name; }public String getUser_password() {return user_password; }public void setUser_password(String user_password) {this.user_password = user_password; }public Character getUser_state() {return user_state; }public void setUser_state(Character user_state) {this.user_state = user_state; } @Overridepublic String toString() {return "User [user_id=" + user_id + ", user_code=" + user_code + ", user_name=" + user_name + ", user_password=" + user_password + "]"; } }
七、spring整合hibernate
1.整合原理
将sessionFactory对象交给spring容器管理
2.在spring中配置sessionFactory
(1)配置方案一:(了解)
<!-- 加载配置方案1:仍然使用外部的hibernate.cfg.xml配置信息 --><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><property name="configLocation" value="classpath:hibernate.cfg.xml" ></property></bean>
(2)配置方案二:(推荐)
<!-- 加载配置方案2:在spring配置中放置hibernate配置信息 --><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><!-- 将连接池注入到sessionFactory, hibernate会通过连接池获得连接 --><property name="dataSource" ref="dataSource" ></property><!-- 配置hibernate基本信息 --><property name="hibernateProperties"><props><!-- 必选配置 --><prop key="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</prop><prop key="hibernate.connection.url" >jdbc:mysql:///crm_32</prop><prop key="hibernate.connection.username" >root</prop><prop key="hibernate.connection.password" >1234</prop> <prop key="hibernate.dialect" >org.hibernate.dialect.MySQLDialect</prop><!-- 可选配置 --><prop key="hibernate.show_sql" >true</prop><prop key="hibernate.format_sql" >true</prop><prop key="hibernate.hbm2ddl.auto" >update</prop></props></property><!-- 引入orm元数据,指定orm元数据所在的包路径,spring会自动读取包中的所有配置 --><property name="mappingDirectoryLocations" value="classpath:cn/itcast/domain" ></property></bean>
八、spring整合c3p0连接池
1.配置db.properties
jdbc.jdbcUrl=jdbc:mysql:///xyp_crm jdbc.driverClass=com.mysql.jdbc.Driver jdbc.user=root jdbc.password=123456
2.引入连接池到spring中
<!-- 读取db.properties文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 配置c3p0连接池 --><bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" ><property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property><property name="driverClass" value="${jdbc.driverClass}" ></property><property name="user" value="${jdbc.user}" ></property><property name="password" value="${jdbc.password}" ></property></bean>
3.将连接池注入给SessionFactory
<bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" ><!-- 将连接池注入到sessionFactory, hibernate会通过连接池获得连接 --><property name="dataSource" ref="dataSource" ></property>
九、spring整合hibernate环境操作数据库
1.Dao类创建:继承HibernateDaoSupport
注意:项目中要确保使用统一版本。
//HibernateDaoSupport 为dao注入sessionFactorypublic class UserDaoImpl extends HibernateDaoSupport implements UserDao {
2.hibernate模板的操作
(1)execute
@Overridepublic User getByUserCode(final String usercode) {//HQLreturn getHibernateTemplate().execute(new HibernateCallback<User>() { @Overridepublic User doInHibernate(Session session) throws HibernateException { String hql = "from User where user_code = ? "; Query query = session.createQuery(hql); query.setParameter(0, usercode); User user = (User) query.uniqueResult();return user; } });
(2)findByCriteria
//CriteriaDetachedCriteria dc = DetachedCriteria.forClass(User.class); dc.add(Restrictions.eq("user_code", usercode)); List<User> list = (List<User>) getHibernateTemplate().findByCriteria(dc); if(list != null && list.size()>0){return list.get(0); }else{return null; }
3.spring中配置dao
<!-- Dao --><bean name="userDao" class="cn.xyp.dao.impl.UserDaoImpl" ><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean>
十、spring的aop事务
1.准备工作
<!-- 核心事务管理器 --><bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager" ><property name="sessionFactory" ref="sessionFactory" ></property></bean>
2.xml配置aop事务
(1)配置通知
<!-- 配置通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager" > <tx:attributes><tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" /> <tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice>
(2)配置织入
<!-- 配置将通知织入目标对象 配置切点 配置切面 --><aop:config> <aop:pointcut expression="execution(* cn.itcast.service.impl.*ServiceImpl.*(..))" id="txPc"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" /> </aop:config>
3.注解配置aop事务
(1)开启注解事务
<!-- 开启注解事务 --><tx:annotation-driven transaction-manager="transactionManager" />
(2)Service类中使用注解
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)public class UserServiceImpl implements UserService{
@Override @Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)public void saveUser(User u) { ud.save(u); }
十一、扩大session作用范围
1.配置filter
为了避免使用懒加载时出现no-session问题.需要扩大session的作用范围。
<!-- 扩大session作用范围 注意: 任何filter一定要在struts的filter之前调用 因为struts是不会放行的 --> <filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
十二、练习:用户登录
1.struts.xml核心配置
<struts><!-- # struts.objectFactory = spring 将action的创建交给spring容器 struts.objectFactory.spring.autoWire = name spring负责装配Action依赖属性--><constant name="struts.objectFactory" value="spring"></constant><package name="crm" namespace="/" extends="struts-default" ><global-exception-mappings><exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping></global-exception-mappings> <!-- 整合方案:class属性上填写spring中action对象的BeanName 完全由spring管理action生命周期,包括Action的创建 注意:需要手动组装依赖属性 --><action name="UserAction_*" class="userAction" method="{1}" ><result name="toHome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action></package></struts>
2.Action代码
public class UserAction extends ActionSupport implements ModelDriven<User> {private User user = new User(); private UserService userService ; public void setUserService(UserService userService) {this.userService = userService; } public String login() throws Exception { // 1 调用Service执行登陆逻辑User u = userService.getUserByCodePassword(user); // 2 将返回的User对象放入session域ActionContext.getContext().getSession().put("user", u);// 3 重定向到项目首页return "toHome"; } @Overridepublic User getModel() {return user; } }
2.Service核心代码
public User getUserByCodePassword(User u) { // 1 根据登陆名称查询登陆用户User existU = ud.getByUserCode(u.getUser_code());// 2 判断用户是否存在.不存在=>抛出异常,提示用户名不存在if (existU == null) {throw new RuntimeException("用户名不存在!"); } // 3 判断用户密码是否正确=>不正确=>抛出异常,提示密码错误if (!existU.getUser_password().equals(u.getUser_password())) {throw new RuntimeException("密码错误!"); } // 4 返回查询到的用户对象return existU; }
3.Dao核心代码
public User getByUserCode(final String usercode) { //CriteriaDetachedCriteria dc = DetachedCriteria.forClass(User.class); dc.add(Restrictions.eq("user_code", usercode)); List<User> list = (List<User>) getHibernateTemplate().findByCriteria(dc); if(list != null && list.size()>0){return list.get(0); }else{return null; } }
위 내용은 SSH의 세 가지 주요 프레임워크 통합에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











인터넷의 발달로 인해 빅데이터 분석과 실시간 정보처리는 기업의 중요한 요구사항이 되었습니다. 이러한 요구 사항을 충족하기 위해 기존 관계형 데이터베이스는 더 이상 비즈니스 및 기술 개발 요구 사항을 충족하지 않습니다. 대신 NoSQL 데이터베이스를 사용하는 것이 중요한 옵션이 되었습니다. 이 기사에서는 NoSQL 데이터베이스와 통합된 SpringBoot를 사용하여 최신 애플리케이션을 개발하고 배포하는 방법에 대해 설명합니다. NoSQL 데이터베이스란 무엇입니까? NoSQL은 SQL이 아닙니다.

Docker 컨테이너를 사용하여 Java EE 애플리케이션 배포: Dockerfile을 생성하여 이미지를 정의하고, 이미지를 빌드하고, 컨테이너를 실행하고, 포트를 매핑한 다음, 브라우저에서 애플리케이션에 액세스합니다. 샘플 JavaEE 애플리케이션: REST API는 Docker를 통해 배포한 후 localhost에서 액세스할 수 있는 데이터베이스와 상호 작용합니다.

UniApp은 Vue.js 프레임워크의 완벽한 통합을 실현합니다. 소개: UniApp은 Vue.js 프레임워크를 기반으로 하는 크로스 플랫폼 개발 도구로, Vue.js 프로젝트를 iOS, Android 등 다양한 플랫폼용 애플리케이션으로 컴파일할 수 있습니다. 소규모 프로그램 등 UniApp의 장점은 개발자가 하나의 코드 세트만 작성하여 동시에 여러 플랫폼에 적응할 수 있어 개발 효율성을 높이고 개발 비용을 절감할 수 있다는 것입니다. 다음은 Vue.js 프레임워크의 완벽한 통합을 달성하기 위해 UniApp을 사용하는 방법을 소개합니다.

Vue2와 비교한 Vue3의 변경 사항: 더욱 강력한 네트워크 요청 라이브러리 통합 Vue.js가 계속 개발 및 업데이트됨에 따라 Vue.js의 다음 버전인 Vue3은 몇 가지 흥미로운 변경 사항과 개선 사항을 가져옵니다. 가장 중요한 변화 중 하나는 더욱 강력한 네트워크 요청 라이브러리 통합입니다. Vue2에서는 일반적으로 axios와 같은 타사 라이브러리를 사용하여 네트워크 요청을 수행합니다. Vue3에서 Vue 개발팀은 보다 직관적이고 유연한 방법을 제공하는 내장 네트워크 요청 라이브러리를 제공합니다.

Java 및 Javaee가 정의되고 사용되며 구성 요소 및 기능, 플랫폼 및 환경, 애플리케이션 범위 및 개발 모델 등이 있습니다. 자세한 소개: 1. 정의 및 목적, Java는 Sun Microsystems가 1995년에 출시한 객체 지향 프로그래밍 언어입니다. Java는 크로스 플랫폼, 이식성, 보안 및 단순성의 특성을 가지며 다양한 응용 프로그램을 개발하는 데 널리 사용됩니다. Java EE는 대규모의 확장 가능하고 안정적인 엔터프라이즈급 애플리케이션 등을 개발 및 배포하도록 설계된 Java 플랫폼의 엔터프라이즈급 확장입니다.

PHPcm을 다른 시스템과 통합하기 위한 실용적인 팁 인터넷 기술의 지속적인 발전으로 인해 웹사이트 개발 분야는 더욱 다양해지고 복잡해졌습니다. 실제 프로젝트에서 우리는 다양한 시스템을 통합해야 하는 상황에 자주 직면하며, 이를 위해서는 이러한 문제를 해결하기 위한 특정 기술과 경험이 필요합니다. 이 기사에서는 개발자가 문제에 더 잘 대처할 수 있도록 PHPcms 시스템을 다른 시스템과 통합하기 위한 몇 가지 실용적인 팁과 구체적인 코드 예제를 소개합니다. 1. 통합의 기본 원칙 시스템 통합을 수행할 때 가장 먼저 해야 할 일은

인터넷의 급속한 발전과 함께 웹 애플리케이션에 대한 수요도 증가하고 있으며, 기업용 애플리케이션의 품질을 보장하는 중요한 부분인 소프트웨어 테스트가 점점 더 중요해지고 있습니다. 그러나 기존의 수동 테스트 방법은 시간이 많이 걸리고 힘들며 오류가 발생하기 쉽습니다. 자동화된 테스트는 이 문제를 해결하는 방법입니다. 웹 애플리케이션의 자동화된 테스트는 일반적인 테스트 방법이 되었습니다. 그 중에서 웹 애플리케이션의 자동화된 테스트를 위해 WebDriver를 사용하는 것은 매우 인기 있는 방법입니다. 이 기사

Java EE 컨테이너화된 애플리케이션을 사용할 때 세션 상태 관리, 종속성 주입, 리소스 풀링 및 보안과 같은 호환성 문제가 발생할 수 있습니다. 이러한 문제에 대한 솔루션에는 외부 세션 스토리지 사용, JNDI 구성, 리소스 풀 관리, Java EE 애플리케이션이 컨테이너 기술과 원활하게 통합되고 컨테이너화의 이점을 얻을 수 있도록 보안 구성이 포함됩니다.
