SSM框架搭建

来源:互联网 发布:淘宝店铺违规扣12分 编辑:程序博客网 时间:2024/06/10 01:43

新建一个maven工程


NEXT,选择webapp


NEXT,然后finsh


建立完后的框架目录结构为(可以忽略掉jsp页面带来的影响,删掉重新创建一个就好)


未出现src/main/java目录,可能是因为用了maven工程默认的jre,就要在build path 里面先移除掉默认的JRE,再添加工作空间默认的jdk



这时你会看到工程出现ERROR,这是因为web.xml和pom.xml文件还没有完善好,以下的web.xml中加入了Shiro过滤器用于登录还有授权功能方面的

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>Archetype Created Web Application</display-name><!-- Spring 配置文件路径,此处可将Spring MVC的相关配置内容配置到Spring的配置文件applicationContext.xml中,共享同一个配置文件即可 --><context-param><param-name>contextConfigLocation</param-name><param-value> classpath:applicationContext.xml,            classpath:applicationContext-shiro.xml</param-value></context-param> <!--Spring上下文监听器-->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- Character Encoding filter 解决中文问题 -->    <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>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>        <!--Shiro过滤器-->    <filter>        <filter-name>shiroFilter</filter-name>        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>        <init-param>            <param-name>targetFilterLifecycle</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>shiroFilter</filter-name>        <url-pattern>/*</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>FORWARD</dispatcher>    </filter-mapping> <!-- springmvc 控制器 -->    <servlet>        <servlet-name>springmvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:springmvc-servlet.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>        <async-supported>true</async-supported>    </servlet>    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hand</groupId><artifactId>demo</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>ssm Maven Webapp</name><url>http://maven.apache.org</url>   <properties>    <slf4j.version>1.7.5</slf4j.version>    <logback.version>1.0.13</logback.version>    <spring.version>3.2.9.RELEASE</spring.version>    <shiro.version>1.2.2</shiro.version>    <jackson.version>2.2.2</jackson.version>  </properties>  <dependencies>      <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.11</version>        <scope>test</scope>      </dependency>      <dependency>        <groupId>joda-time</groupId>        <artifactId>joda-time</artifactId>        <version>2.1</version>      </dependency>      <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>${slf4j.version}</version>      </dependency>      <dependency>        <groupId>ch.qos.logback</groupId>        <artifactId>logback-core</artifactId>        <version>${logback.version}</version>      </dependency>      <dependency>        <groupId>ch.qos.logback</groupId>        <artifactId>logback-classic</artifactId>        <version>${logback.version}</version>      </dependency>      <dependency>        <groupId>org.aspectj</groupId>        <artifactId>aspectjweaver</artifactId>        <version>1.6.12</version>      </dependency>      <dependency>        <groupId>org.aspectj</groupId>        <artifactId>aspectjrt</artifactId>        <version>1.6.11</version>      </dependency>      <dependency>        <groupId>cglib</groupId>        <artifactId>cglib-nodep</artifactId>        <version>3.1</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-test</artifactId>        <version>${spring.version}</version>        <scope>test</scope>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-aop</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-aspects</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-tx</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-web</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-orm</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-webmvc</artifactId>        <version>${spring.version}</version>      </dependency>      <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis</artifactId>        <version>3.2.7</version>      </dependency>      <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis-spring</artifactId>        <version>1.2.2</version>      </dependency>      <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.1.22</version>        <scope>runtime</scope>      </dependency>      <dependency>        <groupId>com.alibaba</groupId>        <artifactId>druid</artifactId>        <version>1.0.15</version>      </dependency>      <dependency>        <groupId>javax.servlet</groupId>        <artifactId>servlet-api</artifactId>        <version>2.4</version>        <scope>provided</scope>      </dependency>      <dependency>        <groupId>javax.servlet</groupId>        <artifactId>jsp-api</artifactId>        <version>2.0</version>        <scope>provided</scope>      </dependency>      <dependency>        <groupId>javax.servlet</groupId>        <artifactId>jstl</artifactId>        <version>1.2</version>      </dependency>      <dependency>        <groupId>com.fasterxml.jackson.core</groupId>        <artifactId>jackson-core</artifactId>        <version>${jackson.version}</version>      </dependency>      <dependency>          <groupId>com.fasterxml.jackson.core</groupId>          <artifactId>jackson-databind</artifactId>          <version>${jackson.version}</version>      </dependency>      <dependency>        <groupId>com.google.guava</groupId>        <artifactId>guava</artifactId>        <version>11.0.1</version>      </dependency>      <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-lang3</artifactId>        <version>3.3.2</version>      </dependency>      <dependency>        <groupId>commons-io</groupId>        <artifactId>commons-io</artifactId>        <version>2.4</version>      </dependency>      <dependency>        <groupId>commons-fileupload</groupId>        <artifactId>commons-fileupload</artifactId>        <version>1.3</version>      </dependency>      <dependency>        <groupId>commons-codec</groupId>        <artifactId>commons-codec</artifactId>        <version>1.8</version>      </dependency>      <dependency>        <groupId>commons-beanutils</groupId>        <artifactId>commons-beanutils</artifactId>        <version>1.9.2</version>      </dependency>      <dependency>        <groupId>com.alibaba</groupId>        <artifactId>fastjson</artifactId>        <version>1.1.42</version>      </dependency>      <dependency>        <groupId>org.apache.shiro</groupId>        <artifactId>shiro-core</artifactId>        <version>${shiro.version}</version>      </dependency>      <dependency>        <groupId>org.apache.shiro</groupId>        <artifactId>shiro-spring</artifactId>        <version>${shiro.version}</version>      </dependency>      <dependency>        <groupId>org.apache.shiro</groupId>        <artifactId>shiro-ehcache</artifactId>        <version>${shiro.version}</version>      </dependency>  </dependencies>  <build>        <finalName>demo</finalName>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>2.3.2</version>                <configuration>                    <source>1.7</source>                    <target>1.7</target>                    <encoding>UTF-8</encoding>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-resources-plugin</artifactId>                <version>2.4</version>                <configuration>                    <encoding>UTF-8</encoding>                </configuration>            </plugin>            <!-- mybatis 代码生成器插件 -->            <plugin>                <groupId>org.mybatis.generator</groupId>                <artifactId>mybatis-generator-maven-plugin</artifactId>                <version>1.3.2</version>                <configuration>                    <verbose>true</verbose>                    <overwrite>true</overwrite>                </configuration>                <dependencies>                    <dependency>                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>                        <version>5.1.22</version>                    </dependency>                </dependencies>            </plugin>        </plugins>  </build></project>

进行完上面的步骤之后将工程Maven->Update project,maven会自动将pom.xml里面的jar包自动下载下来,

下载的完成后假如出现以下图片上的问题,也不要慌,小姐姐也是这样一步步走过来的


打开工程所在目录,找到settings文件夹,打开org.eclipse.wst.common.project.facet.core.xml,替换以下内容,然后再Update project就OK了

<?xml version="1.0" encoding="UTF-8"?><faceted-project>  <fixed facet="wst.jsdt.web"/>  <installed facet="java" version="1.7"/>  <installed facet="jst.web" version="3.0"/>  <installed facet="wst.jsdt.web" version="1.0"/></faceted-project>

接下来就直接上其他的配置

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:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 扫描service、dao -->    <context:component-scan base-package="com.hand">        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>    </context:component-scan>    <!-- 配置连接池 -->    <context:property-placeholder location="classpath:jdbc.properties"/>    <!--创建jdbc数据源 -->     <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"          init-method="init" destroy-method="close">        <property name="url" value="${master_driverUrl}"/>        <property name="username" value="${master_username}"/>        <property name="password" value="${master_password}"/>        <property name="initialSize" value="5"/>        <property name="maxActive" value="100"/>        <property name="minIdle" value="10"/>        <property name="maxWait" value="60000"/>        <property name="validationQuery" value="SELECT 'x'"/>        <property name="testOnBorrow" value="true"/>        <property name="testOnReturn" value="true"/>        <property name="testWhileIdle" value="true"/>        <property name="timeBetweenEvictionRunsMillis" value="60000"/>        <property name="minEvictableIdleTimeMillis" value="300000"/>        <property name="removeAbandoned" value="true"/>        <property name="removeAbandonedTimeout" value="1800"/>        <property name="logAbandoned" value="true"/>        <property name="filters" value="mergeStat"/>    </bean>    <!-- spring整合mybatis (mybatis-spring项目提供整合类) -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">         <property name="dataSource" ref="dataSource" />        <property name="configLocation" value="classpath:mybatis-config.xml" />    </bean>    <!-- Mapper文件扫描配置工具,Spring将自动扫描对应配置路径下的Mapper -->    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <!-- 对Dao 接口动态实现,需要知道接口在哪  -->        <property name="basePackage" value="com.hand.mapper"/>    </bean>    <!-- 事务管理 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 事务管理 属性 -->    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">        <tx:attributes>            <tx:method name="find*" propagation="REQUIRED" read-only="true"/>            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>            <tx:method name="add*" propagation="REQUIRED"/>            <tx:method name="save*" propagation="REQUIRED"/>            <tx:method name="insert*" propagation="REQUIRED"/>            <tx:method name="update*" propagation="REQUIRED"/>            <tx:method name="edit*" propagation="REQUIRED"/>            <tx:method name="delete*" propagation="REQUIRED"/>        </tx:attributes>    </tx:advice>    <!-- 配置切面 -->    <aop:config>        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.hand.service..*.*(..))"/>    </aop:config></beans>
applicationContext-shiro.xml(没有在web.xml里面加shiroFilter的就不用加此配置文件,有关shiro的都可以忽略,并且去掉web有关shiro的
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"default-lazy-init="true"><description>Shiro安全配置</description><!--安全管理器 --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><!--设置自定义Realm --><property name="realm" ref="shiroDbRealm" /><!--将缓存管理器,交给安全管理器 --><property name="cacheManager" ref="shiroEhcacheManager" /></bean><!-- 項目自定义的Realm --><bean id="shiroDbRealm" class="com.hand.shiro.ShiroDbRealm" /><!-- Shiro Filter --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><!-- 安全管理器 --><property name="securityManager" ref="securityManager" /><!-- 默认的登陆访问url --><property name="loginUrl" value="/login" /><!-- 登陆成功后跳转的url --><property name="successUrl" value="/index" /><!-- 没有权限跳转的url --><property name="unauthorizedUrl" value="/unauth" /><property name="filterChainDefinitions"><value>/commons/** = anon <!-- 不需要认证 -->/static/** = anon/login = anon/** = authc <!-- 需要认证 --></value></property></bean><!-- 用户授权信息Cache, 采用EhCache --><bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"><property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml" /></bean><!-- 在方法中 注入 securityManager ,进行代理控制 --><beanclass="org.springframework.beans.factory.config.MethodInvokingFactoryBean"><property name="staticMethod"value="org.apache.shiro.SecurityUtils.setSecurityManager" /><property name="arguments" ref="securityManager" /></bean><!-- 保证实现了Shiro内部lifecycle函数的bean执行 --><bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /><!-- AOP式方法级权限检查 --><beanclass="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"depends-on="lifecycleBeanPostProcessor" /><!-- 启用shrio授权注解拦截方式 --><beanclass="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"><property name="securityManager" ref="securityManager" /></bean></beans>

mybaits-config.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><!-- 配置映射文件   --><configuration>    <mappers>    <!--映射文件-->       <mapper resource="mybatisMapper/UserMapper.xml"/>    </mappers></configuration>
springmvc-servlet.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:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc.xsd">    <context:component-scan base-package="com.hand">        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>    </context:component-scan>    <!-- 配置结果页面 前缀和后缀 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="order" value="10"></property>        <property name="prefix" value="/WEB-INF/views/"></property>        <property name="suffix" value=".jsp"></property>    </bean>    <!-- 配置哪些是静态资源,缺省Servlet 直接返回 -->    <mvc:resources location="/static/" mapping="/static/**"/>    <mvc:annotation-driven>        <mvc:message-converters register-defaults="true">            <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <constructor-arg value="UTF-8"/>            </bean>        </mvc:message-converters>    </mvc:annotation-driven>    <!-- 文件上传 -->    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 设置上传文件总大小限制 -->        <property name="maxUploadSize" value="10000000"></property>    </bean></beans>


UserController.java

package com.hand.controller;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.shiro.SecurityUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.hand.model.User;import com.hand.service.IUserService;@Controllerpublic class UserController {@Autowired    private IUserService userService;@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic String helloUser(HttpServletRequest request, Model model) {List<User> userList = userService.findAllUser();model.addAttribute("userList",userList);return "/index";}  /**     * GET 登录     *     * @param model     * @param request     * @return     */    @RequestMapping(value = "/login", method = RequestMethod.GET)    public String login(Model model, HttpServletRequest request) {    List<User> userList = userService.findAllUser();model.addAttribute("userList",userList);        return "/index";    }}
IUserSerive

package com.hand.service;import java.util.List;import com.hand.model.User;public interface IUserService { public List<User> findAllUser() ;}

UserServiceImpl


package com.hand.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.hand.mapper.UserMapper;import com.hand.model.User;import com.hand.service.IUserService;@Servicepublic class UserServiceImpl implements IUserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAllUser() {return userMapper.findAllUser();}}

UserMapper.java

package com.hand.mapper;import java.util.List;import com.hand.model.User;public interface UserMapper {public List<User> findAllUser();}

UserMapper.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.hand.mapper.UserMapper">      <resultMap type="com.hand.model.User" id="User" autoMapping="true">          <id  property="id" column="id"/>          <result  property="username" column="username"/>          <result property="password" column="password"/>           <result property="age" column="age"/>      </resultMap>            <select id="findAllUser" resultMap="User">          select * from user      </select>    </mapper>
jdbc.properties

#jdbc.driver=com.mysql.jdbc.Drivermaster_driverUrl=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=truemaster_username=rootmaster_password=root

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><!-- 配置映射文件   --><configuration>    <mappers>    <!--映射文件-->       <mapper resource="mybatisMapper/UserMapper.xml"/>    </mappers></configuration>
启动项目,在浏览器里输入http://localhost:8080/ssm/login,
WEB-INF/views/index.jsp ,WEB-INF目录下的index.jsp

好了、到这里一个简单的SSM就搭建好了~


原创粉丝点击