一、前言

公司框架是SSH,hibernate用的越来越少,做了几年后,也懒得用了,springjdbc玩到现在,maven,mybatis没用到一直都没去接触,感慨现在技术真是发展越来越快,有点落伍了,最近刚好私下接了个小项目,心想何不用maven搭建起来,也当学习下,于是花了两天时间搭建了eclipse+mavaen+struts2+spring+mybatis基础环境

二、maven安装配置

1、官网下载maven包,http://maven.apache.org/download.html,我的版本是3.3.9,需JDK1.6+,解压,在同目录建资源文件夹maven_respo,名字自取,配置会用到

2、环境变量,JDK配置就不说了,新增变量M2_HOME,变量值为:maven的解压路径;找到变量:path,追加%M2_HOME%\bin

3、验证下,输入命令mav -v,出现下面界面说明配置好了

4、Eclipse中配置Maven,重新定位下maven,Window - Preference - Maven- Installation - Add,如图

5、配置本地资源库,项目下载的都会在这。在maven解压目录apache-maven-3.3.9\conf\settings.xml,打开,配置我们第一步建的maven_respo文件夹路径

<localRepository>xxxx</localRepository>

还是这个文件,配置阿里镜像仓库,这个仓库jar包下载很快

<mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

6、Eclipse中,点击Window ->Preference - Maven- User Settings,找到自己文件设置下,maven基本配置就结束了

三、maven项目搭建

1、Eclipse新建一个maven项目(eclipse集成maven网上方法很多,一般新一点版本的Eclipse都是自带的)

2、默认NEXT

3、选maven-archetype-webapp后,NEXT

4、填写maven项目基本项,第二项是工程名称,package可不填,后续建,FINISH

5、工程就建完了,看下模样

6、发现一堆编译问题,一个一个解决下,先创建几个maven需要Source Folder

src/main/java

src/test/resources

src/test/java

例如创建src/main/java,项目名称上右键-NEW-Source Folder-在Folder Name填上src/main/java-FINISH

依次建好,操作简单就不上图了

7、再看下项目编译环境,如图操作

8、Source页签,设定4个文件夹的输出Output folder,双击修改

对应如下,依次修改

src/main/resources -->  target/classes

src/main/java  -->  target/classes

src/test/resources  -->  target/test-classes

src/test/java  -->  target/test-classes

9、设置下JDK,我是用的jdk1.7,还是这个界面,Libraries的页签,可在原基础修改,如图操作,如果使用自定义JDK,点击Installed JREs,按提示安装完在到这里选择,问题应该不大,不细说了

10、设置下Project Facets 的JDK,右键项目名称-Propreties,在左侧找到Project Facets,修改JDK为1.7,注意我的Dynamic Web Project版本是2.3,新建项目默认的,改动一些配置文件会出错,先按默认的来

11、到这里发现jsp还有错误,我们加上TOMCAT,在SERVER页面右键NEW个TOMCAT,我的版本是6.0

12、载入TOMCAT的jar包,跟添加JDK方法差不多,按图进一步操作即可

13、到这里差不多了,把项目塞到TOMCAT,SERVER栏TOMCAT右键,按图点,找到我们新建的项目add进去,启动跑下

14、浏览器访问:http://localhost:8080/resmanger-app/       默认了首页是index.jsp,Hello World,问题不大,maven基本环境就搞定了

四、整合Struts2、Spring、Mybatis及项目解析

整合过程确实蛋疼,没有现成的例子,要花些时间才能跑的通,mybatis毕竟也是现学现卖,网上查了很多整合资料,某些片段借引,这里申明下,直接给出我整合完成的一些关键文件

1、先下jar包,看个文件项目的一个文件pom.xml,不清楚这个做什么的可以去网上查查,很多详细解释,我们通过配置dependencie,maven会自己从镜像库下载对应jar包以及相关依赖版本的jar包,这就是maven的一个强大所在,看下我的jar包配置

<dependencies><!-- jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2.1-b03</version><scope>provided</scope></dependency><!-- fastJson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.24</version></dependency><!-- mysql数据库驱动 --><!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId><version>5.1.21</version> </dependency> --><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>0.2.8</version></dependency><!-- aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.0</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11-beta-1</version><scope>test</scope></dependency><!-- struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.4.1</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.3.4.1</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.4.1</version></dependency><!-- spring3 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>3.1.2.RELEASE</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.1.1</version></dependency><!-- MyBatis 关联Spring的包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.1.1</version></dependency><!-- Jackson --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.11</version></dependency><!-- beanutils --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils-core</artifactId><version>1.8.3</version></dependency>  <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.34</version></dependency><!--start 我用的是国产达梦数据库 --><dependency>  <groupId>dm7</groupId>  <artifactId>dm7</artifactId>  <version>1.0</version>  </dependency><dependency>  <groupId>dm7dialect</groupId>  <artifactId>dm7dialect</artifactId>  <version>1.0</version>  </dependency> <!--end 我用的是国产达梦数据库 --></dependencies>

简单介绍下

Struts2、Spring、Mybatis、Log4j等一些基本的没啥好说的,就那么几个基本jar

Mybatis-spring:mybatis关联spring

struts-json:Struts2支持JSON的使用,项目会有很多Ajax数据请求,不用传统write,试试Struts-json,减少代码量

Druid:这是阿里的数据库连接池,只要是jdbc连接的数据库都能用。一直听闻大名,我也把它弄过来用用

DM7:国产达梦数据库驱动,这是我自己本地jar打进maven仓库,上面Mysql配置我注释了,根据自己使用什么厂家数据库修改下这里

2、整合配置跟业务一起讲,给定一个基本业务,登陆--->首页,这就是我们要实现功能,先看下唯一的一张表,用户表,默认初始一条用户值,给出脚本

CREATE SCHEMA "PLATFORM";
CREATE TABLE "PLATFORM"."T_RESM_USER"
("USER_ID" VARCHAR(100) NOT NULL PRIMARY KEY,"USER_NAME" VARCHAR(100) NULL,"USER_PASSWORD" VARCHAR(100) NULL,"USER_PHONE" VARCHAR(50) NULL,"USER_EMAIL" VARCHAR(100) NULL,"USER_BIRTHDAY" TIMESTAMP(6) NULL,"USER_PIC" VARCHAR(100) NULL,"USER_SQ" VARCHAR(100) NULL,"USER_SQ_ANS" VARCHAR(100) NULL
);INSERT INTO "PLATFORM"."T_RESM_USER"("USER_ID","USER_NAME","USER_PASSWORD","USER_PHONE","USER_EMAIL","USER_BIRTHDAY","USER_PIC","USER_SQ","USER_SQ_ANS") VALUES('0bc76c75-e3af-47cb-9fb6-3af24c5b9809','大晴天','4QrcOUm6Wau+VuBX8g+IPg==','18888888888','qingtianlong97@163.com',null,null,null,null);ALTER TABLE "PLATFORM"."T_RESM_USER" ADD CONSTRAINT  PRIMARY KEY("USER_ID");COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_ID" IS '用户ID';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_NAME" IS '用户名';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_PASSWORD" IS '用户密码';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_PHONE" IS '电话';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_EMAIL" IS '邮箱';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_BIRTHDAY" IS '生日';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_PIC" IS '头像';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_SQ" IS '密保问题';COMMENT ON COLUMN "PLATFORM"."T_RESM_USER"."USER_SQ_ANS" IS '密保答案';

2、看下建的几个基本目录,先把包、java文件、配置文件建上,后面看具体内容。东西比较多,后面把项目打包传上去,重点介绍配置细节

3、看下代码结构,贴几个关键代码

1)com.lig.resmanager.action:action代码包

BaseAction.java 继承ActionSupport,所有业务action继承baseAction基础类

LoginAction.java 登陆业务action,看几个片段

//这个是业务接口,下面配置文件会扫描注入,要生成set,get方法
private ResmUserService resmUserService;
//这个是我定义struts输出的json变量,注意看下面的struts.xml 中json的配置,返回的就是这个result,<result type="json">result</result>
//配置多个输出是可以的,自己去网上查下,注意的假设你配置了一个dataMap,你的action要声明这个变量并生成set,get方法
private String result;//这里添加注解:@JSON(serialize=false),不序列化resmUserService至json输出,因为我的action配置了json输出
//只需要给出result,序列化这个对象可能会保错
@JSON(serialize=false)
public ResmUserService getResmUserService() {return resmUserService;
}

SessionInterceptor.java:这个是session失效拦截,后面配置也会用到,“userid”是登陆存入session,结合配置很好理解返回值,简单拦截,注意实现Interceptor接口

/*** 简单处理session失效*/
public String intercept(ActionInvocation arg0) throws Exception {String actionName = arg0.getProxy().getActionName();if (exclude.contains(actionName)) {return arg0.invoke();}ActionContext ac = arg0.getInvocationContext();Map<String, Object> session = ac.getSession();if (session.get("userid")!= null) {return arg0.invoke();} else {return "error";}
}

2)com.lig.resmanager.dao:底层接口包

3)com.lig.resmanager.mapping:mybatis映射xml文件包

4)com.lig.resmanager.vo:实体类包

这三个可以一块讲,很重要。第一个包是接口包,DAO层,但是使用mybatis,我们就没用daoImpl实现类了,只有接口,实现都在第二个包的xml配置文件里,第三个包是业务实体类。结合我们建的用户表,看几个片段

看下接口片段

package com.lig.resmanager.dao;import com.lig.resmanager.vo.ResmUser;public interface TResmUserMapper {public int deleteByPrimaryKey(String userId);public int insert(ResmUser record);public int insertSelective(ResmUser record);public ResmUser selectByPrimaryKey(String userId);public ResmUser selectByPrimaryParams(ResmUser record);public int updateByPrimaryKeySelective(ResmUser record);public int updateByPrimaryKey(ResmUser record);
}

看下实体类片段,均生成set,get方法,

public class ResmUser {private String userId;private String userName;private String userPassword;private String userPhone;private String userEmail;private Date userBirthday;private String userPic;private String userSq;private String userSqAns;public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId == null ? null : userId.trim();}

看下mapping包xml文件片段

<?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="com.lig.resmanager.dao.TResmUserMapper"><resultMap id="BaseResultMap" type="com.lig.resmanager.vo.ResmUser"><id column="USER_ID" jdbcType="VARCHAR" property="userId" /><result column="USER_NAME" jdbcType="VARCHAR" property="userName" /><result column="USER_PASSWORD" jdbcType="VARCHAR" property="userPassword" /><result column="USER_PHONE" jdbcType="VARCHAR" property="userPhone" /><result column="USER_EMAIL" jdbcType="VARCHAR" property="userEmail" /><result column="USER_BIRTHDAY" jdbcType="TIMESTAMP" property="userBirthday" /><result column="USER_PIC" jdbcType="VARCHAR" property="userPic" /><result column="USER_SQ" jdbcType="VARCHAR" property="userSq" /><result column="USER_SQ_ANS" jdbcType="VARCHAR" property="userSqAns" /></resultMap><sql id="Base_Column_List">USER_ID, USER_NAME, USER_PASSWORD, USER_PHONE, USER_EMAIL, USER_BIRTHDAY, USER_PIC, USER_SQ, USER_SQ_ANS</sql><select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from PLATFORM.T_RESM_USERwhere USER_ID = #{userId,jdbcType=VARCHAR} </select><select id="selectByPrimaryParams" parameterType="java.lang.String" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from PLATFORM.T_RESM_USERwhere USER_NAME = #{userName,jdbcType=VARCHAR} or USER_PHONE = #{userPhone,jdbcType=VARCHAR} or USER_EMAIL = #{userEmail,jdbcType=VARCHAR}</select>

<mapper:namespace属性很重要,接口类

<resultMap:type属性很重要,实体类.说白了就是数据库表字段跟你的实体类一一对应
<sql id="Base_Column_List":列出所有字段

<select:id属性很重要,不难发现就是所有的接口方法,有多少个接口这里就对应多少个select

剩下的就是mybatis的语法了,仔细研究这个配置文件,看下怎么去写实现。mybatis支持动态sql,易上手,轻量级,入手问题不大

不难发现,mybatis的工作量在xml配置文件上,配置文件、接口、实体都是一套的不可缺的,添加一个业务xml修改工作还是蛮多的,这里推荐Eclipse一个插件 mybatis-generator,帮我们生成这一套文件

留个传送门,可以去看下,很简单:mybatis-generator

com.lig.resmanager.service:业务接口层

com.lig.resmanager.service.impl:业务接口实现

这里就是几个注解注意下了,看下片段

@Service("resmUserService")
public class ResmUserServiceImpl implements ResmUserService{@Autowiredprivate TResmUserMapper tresmUserMapper;public int deleteByPrimaryKey(String userId) {return 0;}

两种比较常见的注解,结合配置文件应该不难理解

@Service("resmUserService"):这个没啥好说的,以前是用bean,只不过现在用注解方式少点配置

@Autowired:自动装配,一般注在属性或set方法,注在属性上可以去除set方法,dao层我们也不用bean配置,因为spring-mybatis.xml已经帮我们做了这个事
5)com.lig.resmanager.util:工具类

4、配置文件,重点中的重点

jdbc.properties:数据库配置,万年不变的驱动、连接、用户、密码,不多说

validationQuery=SELECT 1
jdbc_url=jdbc:dm7://LOCALHOST:5339
jdbc_driver=dm7.jdbc.driver.Dm7Driver
jdbc_username=SYSDBA
jdbc_password=SYSDBA

log4j.properties:日志,后五行我开放了控制台打印SQL,不要可去掉

#\u5F00\u53D1
#log4j.rootLogger=INFO,Console,File
#\u8C03\u8BD5
log4j.rootLogger=DEBUG,Console,Filelog4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c]%m%nlog4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=mybatis.log
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%nlog4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG   

spring.xml:看注释的几个重点,一个引人jdbc配置文件,一个是自动注入,这里开始跟我们的代码包关联了,com.lig.resmanager.service //service接口层

<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
"><!-- 引入属性文件 --><context:property-placeholder location="classpath:jdbc.properties" /><!-- 自动扫描(自动注入) --><context:component-scan base-package="com.lig.resmanager.service" /><!-- Jackson 是Spring 自带的功能 --><bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean></beans>

spring-mybatis.xml:这个比较重要,用的Druid,一定要吃透注释

<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-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
"><!-- JNDI方式配置数据源 --><!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${jndiName}"></property> </bean> --><!-- 配置数据源 用的Druid ${}是jdbc.properties配置的,一对一填充 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 配置数据源的链接地址、账号、密码 --><property name="driverClassName" value="${jdbc_driver}" /><property name="url" value="${jdbc_url}" /><property name="username" value="${jdbc_username}" /><property name="password" value="${jdbc_password}" /><!-- 初始化连接大小 --><property name="initialSize" value="0" /><!-- 连接池最大使用连接数量 --><property name="maxActive" value="20" /><!-- 连接池最大空闲 --><property name="maxIdle" value="20" /><!-- 连接池最小空闲 --><property name="minIdle" value="0" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="60000" /><!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --><property name="validationQuery" value="${validationQuery}" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="testWhileIdle" value="true" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="25200000" /><!-- 打开removeAbandoned功能 --><property name="removeAbandoned" value="true" /><!-- 1800秒,也就是30分钟 --><property name="removeAbandonedTimeout" value="1800" /><!-- 关闭abanded连接时输出错误日志 --><property name="logAbandoned" value="true" /><!-- 监控数据库 --><!-- <property name="filters" value="stat" /> --><property name="filters" value="mergeStat" /></bean><!-- myBatis文件 mybatis底层交互实现都在xml配置文件里,我们不在需要写daoImpl--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mapping目录, 省掉Configuration.xml里的手工配置 --><property name="mapperLocations" value="classpath:com/lig/resmanager/mapping/*.xml" /></bean><!-- Mapper注入 这是底层dao接口的注入,很重要,路径要对--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.lig.resmanager.dao" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 注解方式配置事物 --><!-- <tx:annotation-driven transaction-manager="transactionManager" /> --><!-- 拦截器方式配置事物 --><tx:advice id="transactionAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED" /><tx:method name="append*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="save*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="modify*" propagation="REQUIRED" /><tx:method name="edit*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="remove*" propagation="REQUIRED" /><tx:method name="repair" propagation="REQUIRED" /><tx:method name="delAndRepair" propagation="REQUIRED" /><tx:method name="get*" propagation="SUPPORTS" /><tx:method name="find*" propagation="SUPPORTS" /><tx:method name="load*" propagation="SUPPORTS" /><tx:method name="search*" propagation="SUPPORTS" /><tx:method name="datagrid*" propagation="SUPPORTS" /><tx:method name="*" propagation="SUPPORTS" /></tx:attributes></tx:advice><aop:config><aop:pointcut id="transactionPointcut" expression="execution(* com.lig.resmanager.service..*Impl.*(..))" /><aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /></aop:config><!-- 这里是druid --><bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean><bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"><property name="patterns"><list><value>com.lig.resmanager.service.*</value></list></property></bean><aop:config><aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" /></aop:config></beans>

struts.xml:Struts2配置,几个注意地方

<result-types>:json我是手动拦截的,没用到json-default
<interceptors>:这是Session失效以及过滤拦截
<action>都是基本配置,难度不大

jsp从附件下载吧,我也是网上下来的登陆、首页改造了下

<?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><!-- 指定由spring负责action对象的创建 --><constant name="struts.objectFactory" value="spring" /><!-- 所有匹配*.action的请求都由struts2处理 --><constant name="struts.action.extension" value="do" /><!-- 是否启用开发模式 --><constant name="struts.devMode" value="true" /><!-- struts配置文件改动后,是否重新加载 --><constant name="struts.configuration.xml.reload" value="true" /><!-- 设置浏览器是否缓存静态内容 --><constant name="struts.serve.static.browserCache" value="false" /><!-- 请求参数的编码方式 --><constant name="struts.i18n.encoding" value="utf-8" /><!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 --><constant name="struts.i18n.reload" value="true" /><!-- 文件上传最大值 --><constant name="struts.multipart.maxSize" value="104857600" /><!-- 让struts2支持动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation" value="true" /><!-- Action名称中是否还是用斜线 --><constant name="struts.enable.SlashesInActionNames" value="false" /><!-- 允许标签中使用表达式语法 --><constant name="struts.tag.altSyntax" value="true" /><!-- 对于WebLogic,Orion,OC4J此属性应该设置成true --><constant name="struts.dispatcher.parametersWorkaround" value="false" /><package name="userPackage" extends="struts-default" namespace="/app"><result-types><result-type name="json" class="org.apache.struts2.json.JSONResult"/></result-types><interceptors><interceptor name="sessionInterceptor" class="com.lig.resmanager.action.SessionInterceptor"><param name="exclude">/app/loginAction!loginChekck.do</param></interceptor><interceptor-stack name="myStack"><interceptor-ref name="logger"></interceptor-ref><interceptor-ref name="params"></interceptor-ref><interceptor-ref name="sessionInterceptor"></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="myStack"></default-interceptor-ref><global-results><result name="error" type="redirect">/app/loginAction!login.do</result></global-results><action name="loginAction" class="com.lig.resmanager.action.LoginAction"><result type="json">result</result><result name="gologin">/app/login.jsp</result><result name="goindex">/app/index.jsp</result></action><action name="resmuserAction" class="com.lig.resmanager.action.ResUserAction"><result type="json">result</result><result name="loginsuccess">/app/index.jsp</result></action></package>
</struts>

食材准备好了,现在就差个锅装进去,就是web.xml.注意我的项目访问名修改成了RESMWeb,简短,项目右键-属性-Web Project Settings设置,就不再用项目名访问

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>RESMWeb</display-name><!-- spring配置文件位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml,classpath:spring-mybatis.xml</param-value></context-param><!-- Struts2配置 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>actionPackages</param-name><param-value>com.lig.resmanager.action</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.do</url-pattern></filter-mapping><!-- spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 防止spring内存溢出监听器 --><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!-- session时效 --><session-config> <session-timeout>10</session-timeout> </session-config> <!-- 项目默认页 -->  <welcome-file-list><welcome-file>/app/login.jsp</welcome-file></welcome-file-list>
</web-app>

5、到这里就差不多了,逻辑代码自己看吧,最简单的登陆业务,我们用tomcat跑起来看看

tomcat启动没毛病就是成功了70%

注意我在web.xml配置了默认首页是登陆界面的jsp,访问项目:http://localhost:8080/RESMWeb/  

首页没毛病,我们试下session失效拦截,细心的吃瓜群众会发现除了loginAction.do,其他界面没登录我都拦截了,默认调回登陆界面,不清楚回去看struts.xml和session拦截代码

走个链接:http://localhost:8080/RESMWeb/app/resmuserAction!save.do,看会不会跳回登陆页面

拦截没毛病,直接跳登陆页面,我们再试下登陆跳转首页,注意我是登陆校验代码我是访问了库的,不是意淫代码

用户名:用户/手机/邮箱/   自己看数据库那条记录吧

密码:123456,数据库存的密码是MD5加密过的

先试个错误密码,主要想说登陆验证是Ajax请求的,用到了我们之前说的struts-json,Ajax项目必不可少

提示错误,我们再正确登陆下,成功跳首页

五、结语

到这里就结束了,在这里也特别申明下,某些技术我也是初学,网上查了很多资料,如果引用到网上哪位作者的片段,我也只能说声抱歉,登陆界面、首页也是网上down的模板改造。这些都是些最基础的东西,很容易理解。

代码下载:完整代码包

Eclipse+Maven+Struts2+Spring+Mybatis完整搭建相关推荐

  1. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用spring+MyBatis+MySQL搭建数据库框架.如果数据量很大,一个mysql库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  2. Easyui+Spring+Mybatis完整示例(前台)

    典型的Easyui+Spring+Mybatis例子,方便自己的记忆. JSP: <%@ page language="java" contentType="tex ...

  3. SpringMVC+Spring+mybatis项目搭建详细过程

    创建maven-web项目,为了方便的管理jar包.首先在maven中导入所需的包.在pom.xml中加入以下代码:<dependency> <groupId>org.spri ...

  4. Eclipse Maven构建Spring MVC项目

    工作中项目开发使用Maven管理项目的构建.打包.编译,框架採用的是Spring MVC框架,而且实现了多模块.多项目的管理.自己也简单的參与了架构的设计.对于刚開始学习的人来说,使用Maven构建项 ...

  5. struts2+spring+mybatis简单配置

    2019独角兽企业重金招聘Python工程师标准>>> ------------------------------------------配置------------------- ...

  6. 基于Maven+SpringMVC+Spring+MyBatis+Layui整合框架,超详细的SSM整合❤️

    人生有太多不如意,我们要学会去努力 参考文档:layUI文档:spring家族文档:mybatis文档 前言:SSM 整合 整合的思路是: 先创建spring框架 通过spring整合spring m ...

  7. java mybatis拦截配置_SpringMvc拦截器配置_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  8. java中mvc事务_关于项目中的事务问题_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  9. Struts2+Spring+Hibernate环境搭建

    为什么80%的码农都做不了架构师?>>>    IDE:MyEclipse8.5 Struts2:struts-2.3.20 Spring:spring-framework-4.1. ...

最新文章

  1. 用神经网络迭代次数曲线模拟原子光谱
  2. [SSCore] 开源dotnet core 版本 SuperSocket
  3. linux之lsof和netstat判断端口(port)被哪些应用占用
  4. linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2
  5. 收到灾区小朋友的电话祝福
  6. php验证邮箱的通用函数,PHP函数:PHP的通用检测函数总结
  7. 九度 1529:棋盘寻宝(递推DP)
  8. 遗传算法MATLAB工具包简介
  9. 动手学深度学习-windows下环境配置
  10. TeraTerm配置Cygwin连接
  11. 数据结构-左倾红黑树
  12. Java数据结构与算法-程序员十大常用算法[day13]
  13. 小米手机超长续航优化的设置
  14. WEB前端面试题整理
  15. 全宇宙第一编辑器VS Code搭配Markdown打造云端笔记(二:MD语法速成)
  16. Java 2、8、16进制概述和由来
  17. mysql学习第二天
  18. python-format
  19. 7628刷breed_遇到懒官方怎么办?袋鼠云路由拆机,7620A+7612EN刷入breed、Padavan固件教程...
  20. 爬虫工具之Beautiful Soup学习

热门文章

  1. OD学习笔记(Push绕过登录框)
  2. 内衣罩杯,A`B`C`D`的真正含义
  3. 2023最新SEO泛目录快速排名技术
  4. SOLID架构设计原则
  5. EDIUS 8中的色块该如何制作
  6. mysql递归死循环查询_MySQL 递归查询实践总结
  7. iOS- Exception Type: 00000020:什么是看门狗机制
  8. python获取群成员信息
  9. 在word文档中如何自查错别字?
  10. 短信验证码接口风险分析