知了堂|IDEA快速搭建SSM框架(新手必备)

第一步:新建MAVEN项目
在这里插入图片描述

第二步:搭建项目整体架构
在这里插入图片描述

项目结构分析:(和三层架构类似)

.controller层:控制层,处理页面请求
interceptor:拦截器
mapper:后台持久层(相当于三层架构中的Dao层)
pojo:实体类
service:业务访问层
resource:存放SSM中的配置文件,方便管理
webapp-static:存放静态文件,js,css,images等
WEB-INF-page:存放jsp页面
test-java:junit单元测试
第三步: 配置maven:pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>


4.0.0
cn.testssm
TestSSM
1.0-SNAPSHOT
war
TestSSM Maven Webapp
http://www.example.com

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>


<spring.version>5.0.2.RELEASE</spring.version>

<mybatis.version>3.4.5</mybatis.version>

<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>

<mysql.version>5.1.6</mysql.version>





org.aspectj
aspectjweaver
1.6.8


org.springframework
spring-aop
s p r i n g . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . s p r i n g f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > s p r i n g − c o n t e x t < / a r t i f a c t I d > < v e r s i o n > {spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version> spring.version</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>springcontext</artifactId><version>{spring.version}


org.springframework
spring-web
s p r i n g . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . s p r i n g f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > s p r i n g − w e b m v c < / a r t i f a c t I d > < v e r s i o n > {spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version> spring.version</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>springwebmvc</artifactId><version>{spring.version}



org.springframework
spring-test
s p r i n g . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . s p r i n g f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > s p r i n g − t x < / a r t i f a c t I d > < v e r s i o n > {spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version> spring.version</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>springtx</artifactId><version>{spring.version}


org.springframework
spring-jdbc
s p r i n g . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < ! − − j u n i t 单 元 测 试 , t e s t : 只 有 在 t e s t 环 境 下 使 用 , c o m p i l e 全 局 使 用 − − > < d e p e n d e n c y > < g r o u p I d > j u n i t < / g r o u p I d > < a r t i f a c t I d > j u n i t < / a r t i f a c t I d > < v e r s i o n > 4.12 < / v e r s i o n > < / d e p e n d e n c y > < ! − − m y s q l 连 接 驱 动 − − > < d e p e n d e n c y > < g r o u p I d > m y s q l < / g r o u p I d > < a r t i f a c t I d > m y s q l − c o n n e c t o r − j a v a < / a r t i f a c t I d > < v e r s i o n > {spring.version}</version> </dependency> <!-- junit单元测试,test:只有在test环境下使用,compile全局使用--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- mysql连接驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version> spring.version</version></dependency><!junit,test:test使compile使><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!mysql><dependency><groupId>mysql</groupId><artifactId>mysqlconnectorjava</artifactId><version>{mysql.version}



javax.servlet
servlet-api
2.5
provided


javax.servlet.jsp
jsp-api
2.0
provided



jstl
jstl
1.2



log4j
log4j
l o g 4 j . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . s l f 4 j < / g r o u p I d > < a r t i f a c t I d > s l f 4 j − a p i < / a r t i f a c t I d > < v e r s i o n > {log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version> log4j.version</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4japi</artifactId><version>{slf4j.version}


org.slf4j
slf4j-log4j12
s l f 4 j . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < ! − − l o g e n d − − > < ! − − m y b a t i s 持 久 层 − − > < d e p e n d e n c y > < g r o u p I d > o r g . m y b a t i s < / g r o u p I d > < a r t i f a c t I d > m y b a t i s < / a r t i f a c t I d > < v e r s i o n > {slf4j.version}</version> </dependency> <!-- log end --> <!-- mybatis持久层--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version> slf4j.version</version></dependency><!logend><!mybatis><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>{mybatis.version}


org.mybatis
mybatis-spring
1.3.0




c3p0
c3p0
0.9.1.2
jar
compile



com.fasterxml.jackson.core
jackson-core
2.9.8


com.fasterxml.jackson.core
jackson-databind
2.9.8



commons-fileupload
commons-fileupload
1.3.1


commons-io
commons-io
2.6



com.alibaba
fastjson
1.2.60



TestSSM



maven-clean-plugin
3.1.0



maven-resources-plugin
3.0.2


maven-compiler-plugin
3.8.0


maven-surefire-plugin
2.22.1


maven-war-plugin
3.2.2


maven-install-plugin
2.5.2


maven-deploy-plugin
2.8.2






src/main/java

/*.xml



src/main/resources

/.xml
**/.properties
**/*.html





第四步:编写四大配置文件
一.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>



<context:property-placeholder
location=“classpath:jdbcConfig.properties”/>


























<context:component-scan
base-package=“cn.test.service”/>






<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>
tx:attributes

<tx:method name=“find*” read-only=“true”/>

<tx:method name="" isolation=“DEFAULT”/>
</tx:attributes>
</tx:advice>

aop:config
<aop:advisor advice-ref=“txAdvice” pointcut="execution(
cn.test.service.impl..(…))"></aop:advisor>
</aop:config>

二:mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?> 三:spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?>



<context:component-scan base-package=“cn.test.controller”/>

<mvc:resources location="/static/" mapping="/static/"></mvc:resources>

mvc:annotation-driven</mvc:annotation-driven>
mvc:annotation-driven

<mvc:message-converters register-defaults=“true”>







text/html;charset=UTF-8
application/json




WriteMapNullValue
QuoteFieldNames



</mvc:message-converters>
</mvc:annotation-driven>
mvc:default-servlet-handler/

mvc:interceptors
mvc:interceptor
<mvc:mapping path="/sys/
"/>

</mvc:interceptor>
</mvc:interceptors>

四:web.xml

<?xml version="1.0" encoding="UTF-8"?>


Archetype Created Web Application


characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8


forceEncoding
true



characterEncodingFilter
/*



contextConfigLocation

classpath:applicationContext.xml



org.springframework.web.context.ContextLoaderListener



dispatcherServlet
org.springframework.web.servlet.DispatcherServlet


contextConfigLocation
classpath:spring-mvc.xml


1


dispatcherServlet
/


/WEB-INF/pages/login.jsp


第五步: jdbcConfig.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
第六步: log4j.properties

Set root category priority to INFO and its only appender to CONSOLE.

#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=info, CONSOLE, LOGFILE

Set the enterprise logger category to FATAL and its only appender to CONSOLE.

log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
第七步:编写Junit单元测试

/**

  • 测试类
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = “classpath:applicationContext.xml”)
    public class TestSSM {
    @Resource
    private ApplicationContext ac;
    @Test
    public void testUserLogin() {
    UserService userService = (UserService) ac.getBean(“userService”, UserService.class);
    User user = new User();
    user.setUserName(“admin”);
    user.setUserPassword(“admin”);
    Integer result = userService.userLogin(user);
    System.out.println(result);
    System.out.println(“送悟空”);
    }
    }
    测试框架整合
    ok,框架基本上就是已将搭建完成了,下面创建的测试界面,看框架能否正常运行。

第一步:编写User实体类
package cn.test.pojo;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String userName;
private String userPassword;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Override
public String toString() {
return “User{” +
“id=” + id +
“, userName=’” + userName + ‘’’ +
“, userPassword=’” + userPassword + ‘’’ +
‘}’;
}
}
第二步: 编写持久层(mapper)
这里因为是刚学习ssm,所以将xml文件和接口放在了同一包下。

UserMapper.java

import cn.test.pojo.User;
public interface UserMapper {
/**
 * 用户登录
 *
 * @param user
 * @return
 */
public Integer userLogin(User user);
}

2. UserMapper.xml
   ```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="cn.test.mapper.UserMapper">
       <select id="userLogin" resultType="Integer" parameterType="user">
           SELECT COUNT(1) FROM user WHERE userName = #{userName} and userPassword = #{userPassword}
       </select>
   </mapper>
第三步:编写业务层(ServiceUserService.java

```java package cn.test.service;

import cn.test.pojo.User;

public interface UserService {

public Integer userLogin(User user);
}

2. UserServiceImpl.java
   ```java
   package cn.test.service.impl;
   import cn.test.mapper.UserMapper;
   import cn.test.pojo.User;
   import cn.test.service.UserService;
   import org.springframework.stereotype.Service;
   import javax.annotation.Resource;
   @Service("userService")
   public class UserServiceImpl implements UserService {
       @Resource
       private UserMapper userMapper;
       @Override
       public Integer userLogin(User user) {
           return userMapper.userLogin(user);
       }
   }
第四步:编写Controller

package cn.test.controller;
import cn.test.pojo.User;
import cn.test.service.UserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/userController")
public class UserController {
    @Resource
    private UserService userService;
    @RequestMapping("/userLogin")
    public String userLogin(User user) {
        System.out.println(user);
        Integer result = userService.userLogin(user);
        return "";
    }
    @RequestMapping("/testAjax")
    @ResponseBody
    public String testAjax(User user) {
        System.out.println(user);
        Map<String, User> map = new HashMap<String, User>();
        map.put("data", user);
        return JSONArray.toJSONString(map);
    }
}
第五步:jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Dell
  Date: 2020/8/8
  Time: 21:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="userController/userLogin" method="post">
    <div>
        <p>测试登录</p>
        <p>账号*</p>
        <p><input type="text" name="userName" required placeholder="请输入账号"/></p>
        <div id="login_password">
            <p>密码*</p>
            <p><input type="text" name="userPassword" required placeholder="请输入密码"/></p>
        </div>
        <p><input type="submit" name="login" value="登陆"/></p>
    </div>
</form>
<button type="button" value="测试ajax" id="btn">测试ajax</button>
<script src="${pageContext.request.contextPath}/static/js/jquery.min.js"></script>
<script>
    $(function () {
        $("#btn").click(function () {
            $.ajax({
                url: "userController/testAjax",
                type: "POST",
                data:
                    {userName: "张三", userPassword: "1234"},
                dataType: "json",
                success: function (res) {
                    var data = JSON.parse(res);
                    alert(res);
                    alert(data);
                    for (var key in data) {
                        alert(data[key].userName);
                    }
                }
            })
        })
    })
</script>
</body>
</html>
启动服务器,在浏览器地址输入http://localhost:8080/index.jsp




整合成功

新手可能会出现的问题,以下整理了解决方法:
junit单元测试时提示:Can not find Class :cn.testssm.test 解决方案:因为开发工具使用的时idea,当初在建包时将java名称改成了test,重新改成java就好了

2.我使用的spring版本时5.0.2,spring5开始要求junit单元测试版本必须>=4.1.2

3.Error creating bean with name ‘org.springframework.web.servlet.mvc.method.anRequestMappingHandlerAda

4.jsp页面不识别el表达式
解决方案:在头部加入: isELIgnored=false<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
5.控制台输出中文乱码:

-Dfile.encoding=utf-8
解决方案:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7f0614b86e954d1baafddd9938ef1751.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rGH5pm655-l5LqG5aCC,size_20,color_FFFFFF,t_70,g_se,x_16)


end~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值