您的位置:首页 > Web前端 > BootStrap

J2EE 环境 Sturts2+Spring+MyBatis+bootstraps 整合案例(非maven项目)

2016-12-11 18:23 351 查看
最近在研究Sturts2+Spring+MyBatis新型SSM组合框架,由于传统的SSM框架适合开发那种json数据传输的,但是如果是jsp页面传参等,感觉上没有sturts2处理强大。因此小编今天就尝试着进行整合Sturts2+Spring+MyBatis框架,终于花了2个小时的时间搞定了。

环境:j2ee + MySql数据库+JDK1.8+Tomcate 8.0 不是maven项目

下面就直接上代码了。如果觉得能帮助到你们,给个好评,源码不知道怎么上传,如果需要源码,小编也给大家上了 百度云盘分享地址:

http://pan.baidu.com/s/1pLxuSgr

项目结构图如下:



首先:applicationContext.xml配置:

<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd ">

<!-- 自动扫描 包下面的所有-->
<context:component-scan base-package="com.engle" />

<!--数据源配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm_spring"/>
<property name="username" value="root"/>
<property name="password" value="42208474"/>

</bean>

<!--配置sessionFacfory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--加载dataSource-->
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描mappers.xml文件 -->
<property name="mapperLocations" value="classpath:com/engle/mapper/*.xml"></property>
<!--加载usermapper.xml-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<!--userDao容器-->
<!-- <bean id="userDao" class="com.engle.dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean> -->
<!--userService容器-->
<!--  <bean id="userService" class="com.engle.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean> -->
<!--userAction容器-->
<!--  <bean id="userAction" class="com.engle.action.UserAction">
<property name="service" ref="userService"/>
</bean> -->

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.engle.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!--配置事务管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionMana
4000
ger">
<property name="dataSource" ref="dataSource"/>
</bean>

<!--配置通知-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="new*" propagation="REQUIRED" />
<tx:method name="set*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="change*" propagation="REQUIRED" />
<tx:method name="check*" propagation="REQUIRED" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="load*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>

<!--配置事务切面-->
<aop:config>
<aop:pointcut id="pointcut"  expression="execution(* com.engle.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>

</beans>


log4j.properties配置如下:

log4j.rootLogger=DEBUG, Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

log4j.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


mybatis-config.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置别名,这样在mapper.xml文件中,可以直接使用实体类类名即可,不需要引入全类名了 -->
<typeAliases>
<package name="com.engle.entity"/>
</typeAliases>
</configuration>


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="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="com.engle.interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"></default-interceptor-ref>

<!-- 设置全局页面 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<!-- 配置首页访问的Action -->
<action name="user_*" class="com.engle.action.UserAction" method="{1}">
<result name="error">/login.jsp</result>
<result name="logOut" type="redirect">/login.jsp</result>
<result name="success">/main.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

</package>
</struts>


web.xml配置如下:

<?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>SSMDemo</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>

<!--spring 配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 编码过滤器 -->
<filter>
&l
d8dd
t;filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</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>

<!--struts 配置-->
<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>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

</web-app>


Dao层User实体类代码:

package com.engle.entity;

import java.io.Serializable;
/**
* Use实体类
* @author Administrator
*
*/
public class User implements Serializable {
private int userId;
private String userName;
private String password;

public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
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;
}

}


UserDao接口代码如下:

package com.engle.dao;

import com.engle.entity.User;

/**
* userDao层
* @author Administrator
*
*/
public interface UserDao {
/**
* 用户登陆页面
* @param user
* @return
*/
public User login(User user);
}


UserService接口代码如下:

package com.engle.service;

import com.engle.entity.User;
/**
* User service层
* @author Administrator
*
*/
public interface UserService {
/**
* 用户登陆页面
* @param user
* @return
*/
public User login(User user);
}


UserServiceImpl实现类代码如下:

package com.engle.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.engle.dao.UserDao;
import com.engle.entity.User;
import com.engle.service.UserService;

/**
* userservice层实现类
* @author Administrator
*
*/
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;

/**
* 用户登陆页面
* @param user
* @return
*/
public User login(User user){
return userDao.login(user);
}

}


UserAction控制层代码如下:

package com.engle.action;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;

import com.engle.entity.User;
import com.engle.service.UserService;
import com.engle.util.BaseAction;
import com.engle.util.NavUtil;
import com.engle.util.StringUtil;

@Controller
public class UserAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = 1L;
@Resource
private UserService userService;
private User user;
private String error;
private String imageCode;

private String mainPage; // 主页变动模块
private String navCode;  // 用于设置主页显示的当前位置字符串

/**定义了 get set方法,便于接收参数*/
public void setMainPage(String mainPage) {
this.mainPage = mainPage;
}
public void setNavCode(String navCode) {
this.navCode = navCode;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setError(String error) {
this.error = error;
}
public String getImageCode() {
return imageCode;
}
public void setImageCode(String imageCode) {
this.imageCode = imageCode;
}

public String login(){
HttpSession session=request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
if(user==null){
if(currentUser==null){
return ERROR;
}else{
return SUCCESS;
}
}
if(StringUtil.isEmpty(user.getUserName())||StringUtil.isEmpty(user.getPassword())){
error="用户名或密码为空!";
return ERROR;
}
if(StringUtil.isEmpty(imageCode)){
error="验证码为空!";
return ERROR;
}
if(!imageCode.equals(session.getAttribute("sRand"))){
error="验证码错误!";
return ERROR;
}
currentUser=userService.login(user);
if(currentUser==null){
error="用户名或密码错误!";
return ERROR;
}else{
session.setAttribute("currentUser", currentUser);
return SUCCESS;
}
}

public String preSave(){
navCode=NavUtil.getNavgation("系统管理", "修改密码");
mainPage="user/modifyPassword.jsp";
return SUCCESS;
}

}


LoginInterceptor拦截器代码如下:

package com.engle.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoginInterceptor implements Interceptor{

/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("执行了销毁方法");
}

@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("执行了初始化方法");
}

@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext=invocation.getInvocationContext();
Map<String,Object> session=actionContext.getSession();
Object currentUser=session.get("currentUser");
String result=null;
if(currentUser!=null){
result=invocation.invoke();
}else{
result="login";
}
return result;
}
}


jar包如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sturts2 SSM SSM整合