- 浏览: 8243 次
- 性别:
最新评论
在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中,即可运行项目。
- SimpleStrutsSpringMybatis.zip (25.3 KB)
- 下载次数: 109
- mybatis.zip (598.2 KB)
- 下载次数: 75
- others.zip (2.4 MB)
- 下载次数: 72
- spring.zip (4.5 MB)
- 下载次数: 77
- struts.zip (3.1 MB)
- 下载次数: 82
相关推荐
在Struts2和MyBatis的整合中,Spring可以协调这两个框架,管理Struts2的Action和MyBatis的Mapper接口,实现依赖注入和事务控制。 整合这三大框架的过程主要包括以下几个步骤: 1. 配置Spring:创建Spring的配置...
Struts2、Maven、Spring和MyBatis是Java Web开发中的四大框架,它们的整合应用可以构建出高效、模块化的应用程序。这个实例是关于如何将这些技术融合在一起,实现一个用户注册的功能。 首先,Struts2是一个基于MVC...
在"Struts2+Spring+Mybatis(Maven)整合"的实践中,首先需要在pom.xml中添加这些框架的依赖,然后配置Spring的ApplicationContext.xml,定义Bean的实例化和依赖关系。接着,创建Struts2的配置文件struts.xml,定义...
Struts2和MyBatis的配置信息通常会整合到Spring的配置文件中,以实现整体的统一管理和控制。 项目结构通常如下: - src/main/java:存放业务逻辑类、DAO接口及实现、Struts2 Action类。 - src/main/resources:存放...
标题中的"struts+spring+mybatis源代码例子"意味着这是一个实际的项目示例,包含了这三个框架的集成使用,可以帮助开发者理解和学习如何在实际项目中整合这些技术。通过分析和研究这个源代码,开发者可以深入理解...
在这个“struts_spring_mybatis登录例子”中,我们将探讨如何整合这三个框架实现一个简单的登录功能。 1. **Struts**: Struts 是一个基于 Model-View-Controller (MVC) 设计模式的Web应用框架。在这个例子中,...
以上就是Struts2、MyBatis和Spring整合的基础步骤。在实际开发中,还需要考虑异常处理、安全性、性能优化等方面的问题。通过这样的整合,我们可以利用这三个框架各自的优势,构建出高效、灵活、易于维护的Java Web...
Struts2、Spring3和MyBatis是Java Web开发中常用的三大框架,它们各自负责不同的职责,协同工作能够构建出高效、松耦合的Web应用。这个“Struts2+Spring3+MyBatis结合项目”是一个实战示例,旨在帮助开发者深入理解...
这个整合项目不仅展示了如何在实际开发中使用Struts2、Spring和MyBatis,还提供了一套完整的示例,对于学习和理解这三大框架的协同工作具有很高的参考价值。通过深入研究和实践,开发者可以更好地掌握Java Web开发的...
1. **配置整合**:首先,需要在Struts2的配置文件中声明Spring的Action代理,使得Struts2能够通过Spring容器来创建和管理Action实例。同时,Spring的配置文件需要包含所有需要的bean定义,包括Action类、Service类...
《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...
5. **Spring与Struts2集成**:使用`struts-plugin.xml`配置Spring插件,让Struts2能够从Spring容器中获取Action实例。 6. **Spring与MyBatis集成**:在Spring配置文件中引入MyBatis的SqlSessionFactory,配置数据源...
在本整合实例中,我们将利用Spring的注解配置来管理Struts2的Action和Mybatis的Mapper。首先,我们需要在Spring配置文件中启用注解扫描,以便Spring能发现并管理我们的Action和Mapper。 1. **Struts2配置**:在...
在Struts和MyBatis的整合中,Spring通常作为容器,管理Struts的Action实例,同时也能方便地集成MyBatis的SqlSessionFactory和Mapper接口。 3. MyBatis:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程...
3. 整合Struts2和Spring:使用Struts2的Spring插件,将Spring的ApplicationContext加载到Struts2的上下文中,使得Struts2可以自动从Spring容器中获取Bean。 4. 配置MyBatis:创建MyBatis的全局配置文件,定义数据源...
在现代Java开发中,整合Struts、Spring和Mybatis框架构建企业级应用是常见的选择。这三者结合,可以实现强大的MVC架构,提供灵活的数据访问层,以及方便的依赖注入。本文将深入探讨这三个框架的集成与使用。 首先,...
整合Struts2、Spring3和MyBatis的过程主要包括以下几个步骤: 1. **引入依赖**:在项目中添加Struts2、Spring3和MyBatis的相关jar包或Maven依赖。 2. **配置Struts2**:创建struts.xml配置文件,定义Action类及其...
在本教程中,我们将学习如何整合Eclipse开发环境、Struts2框架、Spring框架、MyBatis持久层框架以及jQuery库,来搭建一个Java Web开发环境。本教程内容翔实,适合初学者一步步搭建开发环境并学习使用这些技术。 ...