軟件環境:
css
1 jdk1.8
JAVA_HOME:是給軟件用的,各類啓動的軟件都會尋找JAVA_HOME的環境變量;
Path:給windows用的;
2 eclipse marS2/neon
解壓的無中文路徑,無空格的文件夾中;防止讀取相對路徑時出現亂碼
若是當前系統的JAVA_HOME對應版本是支持neon的啓動的,那麼就能夠直接啓動eclipse
設置workspace,無中文路徑,無空格
3 maven3.5
解壓到無中文路徑,無空格的文件夾便可(後續會介紹,配置,和使用等)
4 tomcat 9
tomcat7 沒有自動處理亂碼,tomcat8以上的版本,無需管理亂碼(servlet沒有驗證)
5 mysql5.5
若是是5.5無需變更,若是不是,須要刪除從新安裝;5.0沒法導入5.5備份的數據;
刪除:只裝過一次5.0,直接刪除服務(控制面板的卸載程序)
安裝sqlYog,數據庫客戶端;html
Spring框架:
工廠類建立對象
加在xml的標籤建立對象
經過配置文件掃描註解
@Controller 控制層對象
@Service 業務層對象
@Component 普通對象
對象的建立交給Spring
控制反轉: 對象我框架包了
java基礎複用的方法
方法封裝被調用
子繼承父類,直接調用
Spring框架節點
Spring管理的全部對象中相互注入使用
@Resource
@Autowired
注入依賴:哪用對象,跟我說,注入就直接用
Springmvc
處理頁面和程序的交互(升級了servlet的使用)
前端控制器(springmvc,dispatcherServlet,映射mapping "/")
適配器映射器(handleMapping)(尋找RequestMapping的接收地址)
適配器協調器(handleAdapter):轉給handler
處理器(handler): 調用RequestMapping的方法所在類的對象,執行方法,返回
字符串渲染: WEB-INF/views/index.jsp
顯式頁面想添加數據: Model 模板對象 addAttribute
Springmvc爲何和spring整合?
1 實現代碼中的三層結構;controller,service,mapper依賴注入
2 處理持久層困難(spring能夠整合mybatis)
Springmvc是怎麼整合的?
須要:看到配置文件了
不須要:無縫整合;controller直接注入service使用,造成service調用mapper(前提是spring整合了mybatis),三層項目結構
mybatis:
JDBC
mybatis功能:
自動封裝(提交的參數,返回的結果,無需手動jdbc處理resultSet)
sql語句是經過映射文件xml綁定(bind)接口mapper的同名方法;
配置文件
駝峯命名,分頁插件
和spring整合
配置文件(spring_mybatis)
datasource:數據庫鏈接中的參數,url,username,password,數據庫鏈接池
sqlSession:datasource
整合一塊兒使用的SSM框架的配置文件
spring:管理spring容器的配置文件
spring-mvc:springmvc配置文件
mybatis:mybatis持久層配置文件
spring-mybatis:整合spring和mybatis的配置文件
前端
建立easymalldb數據庫java
1 商品相關--t_product
○ 展現所有商品的分頁信息
○ 某個商品的信息
○ 後臺的商品管理增刪改查
商品表格mysql
2 用戶相關---t_user
• 登陸 (查詢單個user)
• 註冊 (新增)
• 註冊的用戶名校驗(查詢)
用戶表格git
3 購物車相關--t_cart
• 添加購物車
• 查詢當前用戶的全部購物車商品
• 修改購物車數量
• 刪除購物車
購物車表格github
4 訂單相關--t_order和t_order_item(主從表的關係,order爲主,item爲從,1對多的關係)
• 個人所有訂單
• 新增訂單
• 刪除訂單
主表t_order
web
表格代碼 能夠直接經過sqlyong導入數據庫(想要數據庫設計sql代碼留言私發,這裏不支持上傳)redis
4.1web項目的管理方式的弊端:
myeclipse生成一個web應用的項目結構,servlet直接開發代碼
若是用到三大框架的內容:
1 jar的管理不規範
把jar包先找到,徹底是憑藉測試和經驗完成的;
2 直接整合外界的第三方tomcat進行war包的運行spring
3 項目管理的結構
src:代碼
webroot:web應用相關
ssm框架的配置文件????
src管理配置文件;
4.2 maven介紹
Maven項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件是一個軟件,而且能夠實現各類項目結構的管理功能--工具;
快速搭建項目(java普通工程,web應用工程)
能夠經過引入的各類插件完成豐富的外接功能(例如maven的tomcat插件能夠直接在項目內部啓動插件的tomcat運行web工程)
對工程的管理結構很是嚴格:
java工程:
src/main/java:編寫代碼的文件夾
src/main/resouces:配置文件(ssm框架,properties等)
src/test/java:測試代碼,在打包時不會進行包裝
pom.xml:經過一小段描述來管理項目(管理依賴的jar包,是經過dependency完成)
web應用工程:
和java工程同樣:
main的文件夾下,有webapp的管理,web應用所在的路徑;
有了maven就能夠方便快速的搭建咱們想要的各類工程結構,從而經過對pom文件中描述信息的修改(標籤),完成項目的各類管理功能;
http://www.javashuo.com/article/p-ptxspaor-da.html
1 選擇骨架(webapp)
2 web的應用結構
src/main/java:當前easymall的ssm框架的全部運行代碼都在這個文件夾
src/main/resources: 存放配置文件的位置
src/test/java:測試內容
3 pom的依賴
maven主要就是管理jar包的依賴,當前SSM框架須要依賴的東西很是多;
spring,springmvc,mybatis,一些工具的依賴;
<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.jt</groupId> <artifactId>easymall-ssm</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>easymall-ssm Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring的版本號 --> <spring.version>4.3.7.RELEASE</spring.version> <!-- mybatis的版本號 --> <mybatis.version>3.4.5</mybatis.version> <!-- log日誌管理 --> <slf4j.version>1.7.12</slf4j.version> <log4j.version>1.2.17</log4j.version> <pagehelper.version>3.4.2</pagehelper.version> <jsqlparser.version>0.9.1</jsqlparser.version> </properties> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> <!-- spring context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- spring mvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- spring mvc 輔助包 jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.1</version> </dependency> <!--servlet依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- Spring tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- aspectj --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.7</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- mysql 驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.8</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- 阿里巴巴數據庫鏈接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.14</version> </dependency> <!-- 阿里巴巴的json工具 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency> <!-- commons fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <!-- jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Apache poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> </dependency> <!-- 分頁插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>${jsqlparser.version}</version> </dependency> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-all</artifactId> <version>1.2.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
4 拷貝靜態資源
easymall-ssm的靜態文件拷貝到當前工程中,從navigator保存
這裏要關閉eclipse自帶的web前端的各類校驗
(須要靜態資源留言)
5 準備ssm框架的配置文件
spring自己的配置文件
spring整合mybatis配置文件
springmvc配置文件
mybatis配置文件
5.1 web.xml
tomcat容器啓動時會加載當前工程的web.xml文件,會根據web.xml文件中的配置,設置當前加載各類其餘資源,listener,初始化參數,配置spring和springmvc配置文件
1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value> 4 classpath:spring/spring*.xml; 5 </param-value> 6 </context-param> 7 8 指定當前tomcat啓動時須要加載的配置文件,classpath=target/classes; 9 成功加載配置文件以後,若是有依賴的jar包,就能夠正確啓動spring springmvc容器了; 10 11 <servlet> 12 <servlet-name>springmvc</servlet-name> 13 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 14 <init-param> 15 <param-name>contextConfigLocation</param-name> 16 <param-value>classpath:spring/spring_mvc.xml</param-value> 17 </init-param> 18 <load-on-startup>1</load-on-startup> 19 </servlet> 20 <servlet-mapping> 21 <servlet-name>springmvc</servlet-name> 22 <url-pattern>/</url-pattern> 23 </servlet-mapping>
建立springmvc中的dispatcherServlet,實現讀取springmvc的配置文件,當前的servlet就會提供給springmvc的邏輯使用;
當前dispatcherServlet接收全部的請求地址 "/"
web.xml是通知tomcat在啓動時加載全部的須要配置的文件;SSM框架
5.2 spring.xml
1 <bean 2 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 3 <!-- 容許JVM參數覆蓋 --> 4 <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 5 <!-- 忽略沒有找到的資源文件 --> 6 <property name="ignoreResourceNotFound" value="true" /> 7 <!-- 配置資源文件 --> 8 <property name="locations"> 9 <list> 10 <value>classpath:mysql.properties</value> 11 </list> 12 </property> 13 </bean> 14 <!-- 掃描全部com.jt的包--> 15 <context:component-scan base-package="com.jt"></context:component-scan>
利用加載的spring容器,建立一個PropertyPlaceHolder的對象,讀取mysql.properties的數據(key-value鍵值對),其中的數據就是配置加載的datasource的內容,在配置的指定上進行解耦,能夠修改properties變更鏈接數據庫的信息.
掃描包的路徑,全部當前工程已com.jt開始的包中只要存在註解都會被spring容器掃描到,像@Component,@Service等就會自動建立對象
5.3 spring_mvc.xml
<!-- 在restful模式下,添加靜態資源 若是刪除致使頁面沒有js效果--> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <mvc:resources location="/" mapping="/**"></mvc:resources>
保持當前jsp等頁面資源加載成功js,css等內容
<!-- 掃描spring的組件 --> <context:component-scan base-package="com.jt.easymall.controller"></context:component-scan><!-- 掃描 spring mvc的註解 @RequestMapping @ResponseBody --> <mvc:annotation-driven></mvc:annotation-driven>
springmvc掃描的spring建立的對象,完成和spring的整合;requestMapping映射就能夠加載全部com.jt.easymall.controller的類中;
啓動responseBody requestMapping requestParam requestBody
<!-- spring mvc處理響應的jsp --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
頁面渲染時拼接的先後綴名稱,/WEB-INF/views/保存着全部頁面;
<!-- spring mvc 文件上傳 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--能配置多少個property,能夠查文檔和查詢源代碼 --> <!--最大上傳文件的大小 --> <property name="maxUploadSize" value="8388608"></property> <property name="resolveLazily" value="true"></property> </bean>
MultipartFile是springmvc的包中的類,處理頁面上傳的文件;
大小定義,和懶加載,接收的其實是流對象;
5.4 spring-mybatis整合
1 <!-- 數據庫鏈接池 commons-dbcp ,c3p0,proxool,阿里巴巴druid --> 2 <bean id="alibabaDataSource" 3 class="com.alibaba.druid.pool.DruidDataSource" 4 init-method="init" 5 destroy-method="close"> 6 <!-- 數據庫鏈接的4項 --> 7 <property name="driverClassName"> 8 <value>${jdbc_driverClass}</value> 9 spring啓動時,PropertiesPlaceHolder加載了mysql.properties文件 定義的jdbc_driverClass 10 </property> 11 <property name="url"> 12 <value>${jdbc_url}</value> 13 </property> 14 <property name="username"> 15 <value>${jdbc_userName}</value> 16 </property> 17 <property name="password"> 18 <value>${jdbc_userPassword}</value> 19 </property> 20 <!-- 鏈接池中的最大鏈接數 --> 21 <property name="maxActive"> 22 <value>5</value> 23 </property> 24 <!-- 初始化的鏈接數 --> 25 <property name="initialSize"> 26 <value>2</value> 27 </property> 28 <!-- 獲取鏈接的最大等待時間 --> 29 <property name="maxWait"> 30 <value>6000</value> 31 </property> 32 <!-- 鏈接池的最大空閒 --> 33 <property name="maxIdle"> 34 <value>2</value> 35 </property> 36 <!-- 鏈接池的最小空閒 --> 37 <property name="minIdle"> 38 <value>2</value> 39 </property> 40 <!-- 自動清除無用的鏈接 --> 41 <property name="removeAbandoned"> 42 <value>true</value> 43 </property> 44 <!-- 自動清除無用的鏈接的等待時間 --> 45 <property name="removeAbandonedTimeout"> 46 <value>180</value> 47 </property> 48 <!-- 鏈接屬性 --> 49 <property name="connectionProperties"> 50 <value>clientEncoding=UTF-8</value> 51 </property> 52 </bean> 53 54 <!-- 實例化MyBatis的SqlSessionFactoryBean對象--> 55 <!--mybatis配置,讀取配置文件(掃描配置文件)--> 56 <bean id="sqlSessionFactory" 57 class="org.mybatis.spring.SqlSessionFactoryBean" 58 p:dataSource-ref="alibabaDataSource" //綁定的數據源 59 p:mapperLocations="classpath:mapper/*.xml"> //映射文件mapper.xml的位置 src/main/resources 60 <!-- mybatis-config.xml --> 61 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> //指向mybatis的內容配置文件 62 <!-- 定義當前工程的別名包 --> 63 <property name="typeAliasesPackage" value="com.jt.easymall.pojo"/> //持久層封裝對象時,無需指定類的全路徑名稱 resultType="Product" 64 </bean>
spring管理的整合持久層對象sqlSession;沒有這個對象動態代理沒法完成接口類方法的實現和xml映射文件中sql語句的綁定關係
5.5 mybatis.xml
<settings> <!-- 開啓駝峯自動映射 --> <setting name="mapUnderscoreToCamelCase" value="true" /> <!-- 二級緩存的總開關 redis完成緩存的功能.不使用數據庫自身的緩存--> <setting name="cacheEnabled" value="false" /> </settings>
到此SSM項目框架搭建成功(搭建過程當中可能會出現不一樣的問題,一些常見的問題已經整理好 請查看https://www.cnblogs.com/nanlinghan/p/9973495.html解決)
邏輯:
首頁index.jsp存儲在 WEB-INF/views/index.jsp
訪問url:localhost:port/直接訪問
代碼邏輯
編寫在一個被spring和springmvc掃描到的controller裏
1 @RequestMapping("/") 2 public String goIndex(){ 3 return "index";} 4 5 package com.jt.easymall.controller; 6 @Controller 7 public class IndexController { 8 9 //添加首頁的映射地址"/" 10 @RequestMapping("/") 11 public String goIndex(){ 12 return "index";//WEB-INF/views/index.jsp 13 }}
Maven的tomcat插件
maven內部能夠引入tomcat的插件,執行當前工程的啓動功能,無需外部的tomcat容器來加載當前工程的war包執行了;
pom中經過描述信息,引入maven的tomcat插件
配置啓動maven工程的debug模式