`

struts2 spring3 mybatis3整合简单例子

    博客分类:
  • java
阅读更多

    在java web开发中,struts, springs和mybatis是常用的框架。下面通过一个简单的登录功能对这三个框架学习。
    1.下载需要的框架。
     struts:   http://struts.apache.org/
    spring:   http://www.springsource.org/download/
    mybatis:  http://code.google.com/p/mybatis/
   
    2.使用eclipse建立dynamic web工程 SimpleStrutsSpringMybatis 
   
    3.编写web.xml配置文件,添加spring监听,log4j监听和struts过滤器

<?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"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
  <display-name>SimpleStrutsSpringMybatis</display-name>
  <description>Struts spring mybatis intergaration</description>
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
 
  <context-param>
      <param-name>log4jConfigLocation</param-name>
      <param-value>/WEB-INF/log4j.properties</param-value>
  </context-param>
 
  <context-param>
      <param-name>log4jRefreshInterval</param-name>
      <param-value>60000</param-value>
  </context-param>
 
  <listener>
      <listener-class>
          org.springframework.web.util.Log4jConfigListener
      </listener-class>
  </listener>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
      <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>
 
  <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>
 
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

   4. 编写struts.xml,这只简单实现了登录功能(从数据库中取数据进行判断)。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
      <constant name="struts.i18n.encoding" value="UTF-8"></constant>
      <package name="learn" extends="struts-default">
        <interceptors>
            <interceptor name="loginedCheck"
                class="simple.learn.ssb.interceptor.LoginedCheckInterceptor" />
        </interceptors>
       
        <action name="login" class="loginAction" method="logining">
            <result name="success">/jsp/success.jsp</result>
            <result name="error">jsp/error.jsp</result>
            <result name="input">/index.jsp</result>
        </action>
       
        <action name="loginout" class="loginAction" method="loginout">
            <result name="input">/index.jsp</result>
        </action>
       
    </package>
</struts>
  5. 完成基础配置后,编写java代码了,使用action,entity,mapper,service和interceptor包来存放对象java代码。
   创建实体对象:User.java

package simple.learn.ssb.entity;

import java.io.Serializable;

public class User implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}



   LoginAction.java, 在这使用了模型作为参数

package simple.learn.ssb.action;

import java.util.Map;

import javax.annotation.Resource;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;

import simple.learn.ssb.entity.User;
import simple.learn.ssb.service.UserOperation;

public class LoginAction implements ModelDriven<User> {
	
	private User user = new User();
	@Resource
	private UserOperation uop ;	
	
	public void setUop(UserOperation uop) {
		this.uop = uop;
	}

	public String logining() throws Exception
	{
		if(null!=uop.getlogin(user.getUsername(), user.getPassword()))
		{
			System.out.println("login success!");
			ActionContext actionContext = ActionContext.getContext();
			Map<String, Object> session  = actionContext.getSession();
			session.put("logined", "logined");
		}
		else
		{
			return "error";
		}
		
		return "success";
	}
	
	public String loginout() throws Exception
	{
		return "input";
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
}


   编写数据库映射接口,LoginMapper.java,这只有一个登录方法

package simple.learn.ssb.mapper;

import simple.learn.ssb.entity.User;

public interface LoginMapper {

	public User loginbyUsernameAndPassword(User user);
}


编写LoginMapper.xml文件,和LoginMapper.java放在相同目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="simple.learn.ssb.mapper.LoginMapper">
    <cache/>
   
    <select id="loginbyUsernameAndPassword" parameterType="simple.learn.ssb.entity.User" resultType="user">
        select username, password
        from login where
        username=#{username} and password=#{password}
    </select>
</mapper>

   编写service类

package simple.learn.ssb.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import simple.learn.ssb.entity.User;
import simple.learn.ssb.mapper.LoginMapper;

@Service
public class UserOperation {
	
	@Autowired
	private LoginMapper loginMapper;
	
	public User getlogin(String username,String password)
	{
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		return loginMapper.loginbyUsernameAndPassword(user);
	}
}


  编写拦截器进行登录验证,LoginedCheckInterceptor.java

package simple.learn.ssb.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginedCheckInterceptor extends AbstractInterceptor{


	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation ai) throws Exception{
		if(ai.getInvocationContext().getSession().containsKey("logined")){
			return ai.invoke();
		}
		else
		{
			return "input";
		}
	}
}


   编写LogAspect.java,进行方法调用日志信息捕获

package simple.learn.ssb.interceptor;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LogAspect {

	public Logger logger = Logger.getLogger(LogAspect.class);
	
	@Pointcut("execution(* simple.learn.ssb.service.*.*(..))")
	public void anyMethod()
	{
	}
	@Before(value = "anyMethod()")
	public void myBeforAdvice(JoinPoint joinpoint) {
		String classAndMethod = joinpoint.getTarget().getClass().getName() + "类的"
				+ joinpoint.getSignature().getName();
		logger.info("前置通知:" + classAndMethod + "开始执行");

	}

	@AfterReturning(value = "anyMethod()")
	public void myAfterReturningAdvice(JoinPoint joinpoint) {
		String classAndMethod = joinpoint.getTarget().getClass().getName() + "类的"
				+ joinpoint.getSignature().getName();
		logger.info("后置通知:" + classAndMethod + "方法正确执行");
	}

	@AfterThrowing(value = "anyMethod()", throwing = "e")
	public void myAfterThrowingAdvice(JoinPoint joinpoint, Exception e) {
		String classAndMethod = joinpoint.getTarget().getClass().getName() + "类的"
				+ joinpoint.getSignature().getName();
		logger.info("异常通知:" + classAndMethod + "方法异常" + e.getMessage());
	}

	@After(value = "anyMethod()")
	public void myAfterAdvice(JoinPoint joinpoint) {
		String classAndMethod = joinpoint.getTarget().getClass().getName() + "类的"
				+ joinpoint.getSignature().getName();
		logger.info("最终通知:" + classAndMethod + "方法执行结束");
	}

	@Around(value = "anyMethod()")
	public Object myAroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
		long begintime = System.currentTimeMillis();
		Object result = pjp.proceed();
		long endtime = System.currentTimeMillis();
		String classAndMethod = pjp.getTarget().getClass().getName() + "类的"
				+ pjp.getSignature().getName();
		logger.info("环绕通知:" + classAndMethod + "方法执行结束,耗时" + (endtime - begintime)
				+ "毫秒");
		return result;
	}
}


  
  6. 编写applicationContext.xml,配置applicationContext.xml是一个相当问题比较多的文件。我参考了mybatis和spring整合的jpetstore例子。http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DSample
<?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:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:jdbc="http://www.springframework.org/schema/jdbc"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="jdbcUrl"
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=jhsy1" />
<property name="user" value="sa" />
<property name="password" value="123456" />
<property name="initialPoolSize" value="10" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="30" />
<property name="acquireIncrement" value="10" />
<property name="maxIdleTime" value="10" />
<property name="maxStatements" value="0" />
</bean>

<!-- 数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url"
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=jhsy1"></property>
<property name="username" value="sa"></property>
<property name="password" value="123456"></property>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="c3p0DataSource" />
<property name="typeAliasesPackage" value="simple.learn.ssb.entity" /> 
</bean>

<!-- 声明式事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<!--
enable component scanning (beware that this does not enable mapper
scanning!)
-->
<context:component-scan base-package="simple.learn.ssb.service" />

<!-- enable autowire -->
<context:annotation-config />

<aop:aspectj-autoproxy />

<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="simple.learn.ssb.mapper" />
</bean>
   
<bean id="loginAction" class="simple.learn.ssb.action.LoginAction"></bean>
<bean id="loginAspect" class="simple.learn.ssb.interceptor.LogAspect"></bean>
    </beans>

项目jar包过多,分为四个压缩包上传,项目压缩包中剔除了jar包,将所有jar包放回WEB-INF下lib中,即可运行项目。

 

分享到:
评论

相关推荐

    struts2_mybatis_spring_框架实例整合_数据库 文档

    在Struts2和MyBatis的整合中,Spring可以协调这两个框架,管理Struts2的Action和MyBatis的Mapper接口,实现依赖注入和事务控制。 整合这三大框架的过程主要包括以下几个步骤: 1. 配置Spring:创建Spring的配置...

    Struts2+maven+spring+mybatis整合实现注册功能实例

    Struts2、Maven、Spring和MyBatis是Java Web开发中的四大框架,它们的整合应用可以构建出高效、模块化的应用程序。这个实例是关于如何将这些技术融合在一起,实现一个用户注册的功能。 首先,Struts2是一个基于MVC...

    Struts2+spring+mybatis(Maven)整合

    在"Struts2+Spring+Mybatis(Maven)整合"的实践中,首先需要在pom.xml中添加这些框架的依赖,然后配置Spring的ApplicationContext.xml,定义Bean的实例化和依赖关系。接着,创建Struts2的配置文件struts.xml,定义...

    Struts2, Spring与myBatis整合示例项目

    Struts2和MyBatis的配置信息通常会整合到Spring的配置文件中,以实现整体的统一管理和控制。 项目结构通常如下: - src/main/java:存放业务逻辑类、DAO接口及实现、Struts2 Action类。 - src/main/resources:存放...

    struts+spring+mybatis源代码例子

    标题中的"struts+spring+mybatis源代码例子"意味着这是一个实际的项目示例,包含了这三个框架的集成使用,可以帮助开发者理解和学习如何在实际项目中整合这些技术。通过分析和研究这个源代码,开发者可以深入理解...

    struts_spring_mybatis 登录例子

    在这个“struts_spring_mybatis登录例子”中,我们将探讨如何整合这三个框架实现一个简单的登录功能。 1. **Struts**: Struts 是一个基于 Model-View-Controller (MVC) 设计模式的Web应用框架。在这个例子中,...

    struts2+mybatis+spring整合简单案例

    以上就是Struts2、MyBatis和Spring整合的基础步骤。在实际开发中,还需要考虑异常处理、安全性、性能优化等方面的问题。通过这样的整合,我们可以利用这三个框架各自的优势,构建出高效、灵活、易于维护的Java Web...

    Struts2+Spring3+MyBatis结合项目

    Struts2、Spring3和MyBatis是Java Web开发中常用的三大框架,它们各自负责不同的职责,协同工作能够构建出高效、松耦合的Web应用。这个“Struts2+Spring3+MyBatis结合项目”是一个实战示例,旨在帮助开发者深入理解...

    struts2.3 spring3.2 mybatis3.2整合及示例代码

    这个整合项目不仅展示了如何在实际开发中使用Struts2、Spring和MyBatis,还提供了一套完整的示例,对于学习和理解这三大框架的协同工作具有很高的参考价值。通过深入研究和实践,开发者可以更好地掌握Java Web开发的...

    struts2+spring+mybatis

    1. **配置整合**:首先,需要在Struts2的配置文件中声明Spring的Action代理,使得Struts2能够通过Spring容器来创建和管理Action实例。同时,Spring的配置文件需要包含所有需要的bean定义,包括Action类、Service类...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    struts2_spring_mybatis整合案例(加jar包)

    5. **Spring与Struts2集成**:使用`struts-plugin.xml`配置Spring插件,让Struts2能够从Spring容器中获取Action实例。 6. **Spring与MyBatis集成**:在Spring配置文件中引入MyBatis的SqlSessionFactory,配置数据源...

    Struts2+Mybatis+Spring整合增删改查实例

    在本整合实例中,我们将利用Spring的注解配置来管理Struts2的Action和Mybatis的Mapper。首先,我们需要在Spring配置文件中启用注解扫描,以便Spring能发现并管理我们的Action和Mapper。 1. **Struts2配置**:在...

    经典struts+spring+mybatis架构基础包

    在Struts和MyBatis的整合中,Spring通常作为容器,管理Struts的Action实例,同时也能方便地集成MyBatis的SqlSessionFactory和Mapper接口。 3. MyBatis:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程...

    struts2+spring+mybatis整合

    3. 整合Struts2和Spring:使用Struts2的Spring插件,将Spring的ApplicationContext加载到Struts2的上下文中,使得Struts2可以自动从Spring容器中获取Bean。 4. 配置MyBatis:创建MyBatis的全局配置文件,定义数据源...

    MyBatis学习使用struts+spring+mybatis

    在现代Java开发中,整合Struts、Spring和Mybatis框架构建企业级应用是常见的选择。这三者结合,可以实现强大的MVC架构,提供灵活的数据访问层,以及方便的依赖注入。本文将深入探讨这三个框架的集成与使用。 首先,...

    struts2 正和spring3和mybatis

    整合Struts2、Spring3和MyBatis的过程主要包括以下几个步骤: 1. **引入依赖**:在项目中添加Struts2、Spring3和MyBatis的相关jar包或Maven依赖。 2. **配置Struts2**:创建struts.xml配置文件,定义Action类及其...

    Eclipse+Struts2+Spring+MyBatis+jQuery整合教程

    在本教程中,我们将学习如何整合Eclipse开发环境、Struts2框架、Spring框架、MyBatis持久层框架以及jQuery库,来搭建一个Java Web开发环境。本教程内容翔实,适合初学者一步步搭建开发环境并学习使用这些技术。 ...

Global site tag (gtag.js) - Google Analytics