interlij idea创建给Web项目添加SS2M

1、系统环境

IDE:InterliJ IDEA 2017.1.4
jdk版本:1.8
Maven版本:3.5
struts版本:2.x
spring版本:4.2
Mybatis版本:3.X
数据库:MySQL 5.7 包含user表的sql脚本

其他两个环境搭建请参考:
interlij idea创建给Web项目添加struts2interlij idea创建给Web项目添加Mybatis,熟悉熟悉

2、spring环境搭建

添加如下依赖:

        <!-- ********************** Java Servlet API 4.0.0-b01 ********************** -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0-b01</version>
        </dependency>

        <!-- 添加jstl(JSP Standard Tag Library)支持 -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>apache-jstl</artifactId>
            <version>9.4.6.v20170531</version>
        </dependency>

        <!-- ********************** Spring 4.2.4.RELEASE ********************** -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>

在resources文件右键,新建xml的spring配置文件,名字是:spring-config (当然你喜欢其他名字也行)





在web.xml的web-app节点下添加如下:

    <!--加载spring配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-config.xml</param-value>
    </context-param>
    <!--用于初始化Spring容器的Listener-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

3、Spring整合Mybatis

追加如下依赖:

     <!-- ********************** Mysql JDBC驱动 ********************** -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
      <!-- ********************** Mybatis依赖 ********************** -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.4</version>
      </dependency>

      <!-- ********************** Mybatis-Spring插件********************** -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.1</version>
      </dependency>
      <!-- ********************** Druid数据库连接池 ********************** -->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.31</version>
      </dependency>
      <!-- ********************** junit单元测试依赖 ********************** -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

由于spring官方没有对mybatis的支持,所以mybatis在自己社区开发出一个让spring支持mybatis的插件。
最好还是先去看看interlij idea创建给Web项目添加Mybatis,不然你找不到新建的模板。
新建Mybatis配置文件。

这里写图片描述

这里写图片描述

新建实体类:

package POJO;

import java.util.Date;

/**
 * Created by hui on 2017/6/21.
 */
public class User {

    private int id;
    private String name;
    private Date birth;
    private Integer sex;
    private Integer age;
    private String phone;
    private String email;
    private String pwd;

  // 各属性getter和setter方法省略,toString方法



关联一下mapper和config文件,在mybatis-config.xm添加如下:

    <mappers>
        <mapper resource="UserDao.xml"></mapper>
    </mappers>

在UserDAO.xml添加如下:

    <select id="getUserById" resultType="POJO.User">
        SELECT * FROM USER WHERE id = #{id};
    </select>

在UserDAO.java添加如下:

    //使用xml配置文件
    User getUserById(int id);
    //不使用配置文件使用注解
    @Select("Select * from user where id = #{id}")
    User getUserByIdForAnnotation(int id);



上面完成了一次配置文件的创建和关联。
下面是与spring整合:
添加jdbc.properties配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/networkalbum?useSSL=false&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=root

这里写图片描述

spring配置文件spring-config.xml添加如下:

    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>

加载jdbc配置文件
添加dataSource:

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password -->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- 配置监控统计拦截的filters和sql注入 -->
        <property name="filters" value="stat,wall"/>


        <!-- 配置初始化大小、最小、最大 -->
        <property name="maxActive" value="20"/>
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000"/>

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxOpenPreparedStatements" value="20"/>
    </bean>

datasource采用具有连接池的druid,参考spring配置数据库连接池druid
构建sqlSessionFactory:(这是重点,操作数据库都是靠这个类嘛)

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>

构建一个实现UserDao接口的实体类:

    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="POJO.UserDao"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

编写一个单元测试类,看看是否整合:

package space.xxhui;

import POJO.User;
import POJO.UserDao;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by hui on 2017/6/21.
 */
public class Test {

    @org.junit.Test
    public void getMapper(){
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring-config.xml");
        UserDao userDao = (UserDao)beanFactory.getBean("userMapper");
        User user = userDao.getUserById(1);
        System.out.println(user.toString());
        User user1 = userDao.getUserByIdForAnnotation(2);
        System.out.println(user1.toString());

    }
}

这里写图片描述

看到输出,说明成功从spring的ioc容器中获取了usermapper类。

3、Spring整合Struts2

追加如下依赖:

        <!-- ********************** Spring和Struts2的支持插件 ********************** -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.24.1</version>
        </dependency>

        <!-- ********************** Struts 2.3.24.1 ********************** -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.24.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.3.24.1</version>
        </dependency>

添加Struts2(请参考前面添加Struts2,记得去project structure添加,详情请去看系统环境处的文章),添加完成的效果如下:

这里写图片描述

在web.xml的web-app节点下,添加如下:

    <!--添加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>

Login.jsp若想要的,请去Struct2搭建的项目里面找到(login.jsp太长了,不贴出来
其中LoginAction如下:

package action;
import POJO.UserDao;
import com.opensymphony.xwork2.ActionSupport;
/**
 * Created by hui on 2017/6/21.
 */
public class LoginAction extends ActionSupport {
    //两个属性名跟Login.jsp的form属性的name一样
    //这样struts2框架会自动复制,每个属性需要getter和setter
    private String username;
    private String pwd;
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String execute() throws Exception {
        String forword = null;
        if (username.equals("Hitvz") && pwd.equals("123456")) {
            forword = ActionSupport.SUCCESS;
        } else {
            forword = ActionSupport.INPUT;
        }
        return forword;
    }
}

添加完Struct2,接下来Spring整合Struts2.
在Spring配置文件添加如下:

    <bean id="loginActionBySpring" class="action.LoginAction">
        <property name="userDao" ref="userMapper"></property>
    </bean>

在strut.xml添加如下:

    <constant name="struts.objectFactory" value="spring"/>
    <!--必须继承自struts-default-->
    <package name="SSHDemo" extends="struts-default" namespace="/">
        <action name="login" class="loginActionBySpring" >
            <result name="success">index.jsp</result>
            <result name="input">Login.jsp</result>
        </action>
    </package>

这里是整合重点:struct2可以管理对象,而spring也可以管理对象,那么问题来了,到底最后谁来管理生成的对象呢?这里选用Spring来管理对象,应该在spring配置文件配置bean标签,在struts配置文件里的class标签,引用一个spring的实例,如上所示。

4、Struts2与Mybatis整合

spring整合Strut2的操作我并没有查询数据库验证用户
在UserDao添加如下方法:

    @Select("Select * from user where name = #{user.name} and pwd = #{user.pwd}")
    User checkUser(@Param("user") User user);

下面改一下LoginAction代码:

    @Override
    public String execute() throws Exception {
        String forword = null;
        User userEntity =new User();
        userEntity.setName(username);
        userEntity.setPwd(pwd);
        //mybatis配置文件中设置了,如果没有查询到返回null
        User entity = userDao.checkUser(userEntity);

        if (entity!=null) {
            System.out.println(entity.toString());
            ActionContext.getContext().put("user",entity);
            forword = ActionSupport.SUCCESS;
        } else {
            System.out.println("no such user");
            forword = ActionSupport.INPUT;
        }
        return forword;
    }

将固定的验证,变为数据库操作,整合完成

5、SSH的一两个过滤器

放在web.xml的web-app下:

    <!--配置字符编码过滤器(解决乱码问题)-->
    <filter>
        <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>

码云-SS2MDemo案例源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值