1. 后台单一架构介绍
1.1 概念
- 整个项目都封装到一个war包在一个Tomcat上运行,这就是单一架构模式。也叫“单机版”、“all in one”。
- 优点:结构简单,不涉及模块之间调用。易于开发和部署。
- 缺点:不能容纳规模庞大、访问量高的项目。
1.2 工程之间的关系
1.3 创建Maven工程即Maven Module
1.4 工程创建清单
父工程坐标
- groupid:com.rgh.crowd.funding
- artifactid:atcrowdfunding-admin-0-parent
- packaging:pom
WebUI工程
- Module Name:atcrowdfunding-admin-1-webui
- 注意:打包方式选择war
组件工程
- Module Name:atcrowdfunding-admin-2-component
通用工程
- Module Name:atcrowdfunding-admin-3-common
实体类工程
- Module Name:atcrowdfunding-admin-4-entity
1.5 建立工程之间的依赖关系
-
WebUI依赖Component
atcrowdfunding-admin-0-parent com.rgh.crowd.funding 1.0-SNAPSHOT 4.0.0 atcrowdfunding-admin-1-webui war com.rgh.crowd.funding atcrowdfunding-admin-2-component 1.0-SNAPSHOT -
Component依赖Common
atcrowdfunding-admin-0-parent com.rgh.crowd.funding 1.0-SNAPSHOT 4.0.0 atcrowdfunding-admin-2-component com.rgh.crowd.funding atcrowdfunding-admin-3-common 1.0-SNAPSHOT -
Common依赖Entity
atcrowdfunding-admin-0-parent com.rgh.crowd.funding 1.0-SNAPSHOT 4.0.0 atcrowdfunding-admin-3-common com.rgh.crowd.funding atcrowdfunding-admin-4-entity 1.0-SNAPSHOT
1.6 父工程管理依赖
4.0.0
com.rgh.crowd.funding
atcrowdfunding-admin-0-parent
pom
1.0-SNAPSHOT
atcrowdfunding-admin-1-webui
atcrowdfunding-admin-2-component
atcrowdfunding-admin-3-common
atcrowdfunding-admin-4-entity
5.0.2.RELEASE
org.springframework
spring-orm
${atguigu.spring.version}
org.springframework
spring-webmvc
${atguigu.spring.version}
org.springframework
spring-test
${atguigu.spring.version}
org.aspectj
aspectjweaver
1.9.2
cglib
cglib
2.2
mysql
mysql-connector-Java
5.1.3
com.alibaba
druid
1.0.31
org.mybatis
mybatis
3.2.8
org.mybatis
mybatis-spring
1.2.2
com.github.pagehelper
pagehelper
4.0.0
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.7
org.slf4j
slf4j-log4j12
1.7.7
org.codehaus.jackson
jackson-mapper-asl
1.9.2
jstl
jstl
1.2
junit
junit
4.12
test
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.1.3-b06
provided
创建数据库和数据库表
创建数据库
CREATE DATABASE `atcrowdfunding190105` CHARACTER SET utf8
创建管理员数据库表
drop table if exists t_admin;
create table t_admin
(
id int not null auto_increment,
login_acct varchar(255) not null,
user_pswd char(32) not null,
user_name varchar(255) not null,
email varchar(255) not null,
create_time char(19),
primary key (id)
);
2. 基于Maven的逆向工程
2.1 创建Maven工程
- 建议逆向工程从项目本身独立出来。
- group id:com.rgh.crowd.funding
- artifact id:atcrowdfunding-reverse
- package:jar
-
2.2 pom配置
4.0.0
com.rgh.crowd.funding
atcrowdfunding-reverse
1.0-SNAPSHOT
org.mybatis
mybatis
3.2.8
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.0
org.mybatis.generator
mybatis-generator-core
1.3.2
com.mchange
c3p0
0.9.2
mysql
mysql-connector-java
5.1.8
2.3 generatorConfig.xml
2.4 执行逆向生成操作的Maven命令
2.5 逆向工程生成的资源各归各位
逆向工程目录
项目工程目录
WebUI工程将来在Tomcat上运行时,现在resources目录下的资源会直接放在WEB-INF/classes目录(也就是类路径)下,所以放在resources目录下运行的时候更容易找到。
3. 业务逻辑层
3.1 创建包
- com.rgh.crowd.funding.service
- com.rgh.crowd.funding.service.api
- com.rgh.crowd.funding.service.impl
3.2 在Component工程加入依赖
org.mybatis
mybatis
org.springframework
spring-orm
org.springframework
spring-webmvc
org.aspectj
aspectjweaver
cglib
cglib
mysql
mysql-connector-Java
com.alibaba
druid
org.mybatis
mybatis
org.mybatis
mybatis-spring
com.github.pagehelper
pagehelper
log4j
log4j
org.slf4j
slf4j-api
org.slf4j
slf4j-log4j12
org.codehaus.jackson
jackson-mapper-asl
4. SSM整合总体思路
5. Spring和MyBatis整合
5.1 创建Spring配置文件
- spring-persist-mybatis.xml
- spring-persist-tx.xml
- spring-web-mvc.xml
5.2 创建jdbc.properties
jdbc.user=root
jdbc.password=360
jdbc.url=jdbc:mysql://localhost:3306/atcrowdfunding190105
jdbc.driver=com.mysql.jdbc.Driver
5.3 创建log4j.properties
log4j.rootLogger=DEBUG,myConsole
log4j.appender.myConsole=org.apache.log4j.ConsoleAppender
log4j.appender.myConsole.Target=System.out
log4j.appender.myConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsole.layout.ConversionPattern=%p [%C{1}:%L] %m%n
5.4 配置数据源
所在配置文件spring-persist-mybatis.xml
5.5 测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml","classpath:spring-persist-tx.xml"})
public class CrowdFundingTest {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() throws SQLException {
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
所需依赖webui-pom.xml
org.springframework
spring-test
test
junit
junit
test
5.6 创建MyBatis全局配置文件
mybatis-config.xml
5.7 配置SqlSessionFactoryBean
所在的配置文件:spring-persist-mybatis.xml
5.8 测试整合效果
CrowdFundingTest.java
@Autowired
private AdminService adminService;
@Test
public void testMybatis() {
List adminList = adminService.getAll();
for (Admin admin : adminList) {
System.out.println(admin);
}
}
spring-persist-mybatis.xml中配置扫描服务层
6. 配置声明式事务
所在配置文件:spring-persist-tx.xml
7. 加入Spring MVC
7.1 配置spring-web-mvc.xml
7.2 配置web.xml
contextConfigLocation
classpath:spring-persist-*.xml
org.springframework.web.context.ContextLoaderListener
springDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-web-mvc.xml
1
springDispatcherServlet
*.html
*.json
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceRequestEncoding
true
forceResponseEncoding
true
CharacterEncodingFilter
/*
7.3 伪静态【了解】
DispatcherServlet映射*.html扩展名,那么所有以html结尾的请求都由SpringMVC处理。反之,请求地址没有以html结尾,不会由SpringMVC处理。
这样就可以把一个本来是动态处理的请求看起来像是请求了一个HTML页面。
好处1:增加黑客入侵的难度。
好处2:有利于SEO优化。
注意:如果实质上返回的响应数据是JSON格式,那么Tomcat将认为这个响应数据和请求扩展名“html”不匹配,然后给出415错误。针对这种情况,需要另外再映射*.json扩展名。
7.4 创建Controller类测试
@Controller
public class AdminHandler {
@Autowired
private AdminService adminService;
@RequestMapping("/admin/get/all")
public String getAll(Model model){
List list = adminService.getAll();
model.addAttribute("list",list);
return "admin-target";
}
}
目标页面jsp
7.5 在 atcrowdfunding-admin-1-webui的pom.xml加入依赖
javax.servlet
servlet-api
provided
javax.servlet.jsp
jsp-api
provided
jstl
jstl
admin-target.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Insert title here
${admin }