SSM項目的完整部署


SSM詳細項目部署

利用SSM做一個簡單的頁面,頁面上可以展示出數據庫中的全部數據。

在知道需要做一個查詢全部數據的的頁面后,首先我們需要使用IDEA創建一個項目,File>new>project;在進行入創建項目的頁面下,進行選擇需要部署的項目,這里我們選擇創建一個maven項目,選擇如下:

 

 

在進入下一步next后,進入一個頁面是進行對項目進行命名的,

 

 

在這個頁面不同的IDEA版本和設置不一樣,但是也是和這個差不多的,若是不一樣,可以去百度如何規范填寫。

然后下一步,到

 

 

然后進行下一步來到,我們項目需要存放的位置選擇好點擊完成。

下面是我們項目的結構:

 

 

 

 

 

 

在創建好后我們需要自己手動的去添加各種包,其中在main包下的java包和resources包有啥創建時,並不是上面的樣子而是一種灰色的這就需要我們進行改動,我們可以選擇做java包后點擊右鍵在里面找到 Mark Directory as(標記目錄為)下選擇 Test Sources Root(源碼 根)就可以了,java、resources這包皆可以實現

 


 

項目步驟

1、創建數據訪問層:

1.1、首先我們在數據庫中創建一個表(以book為例)后,我們需要在domain包下進創建一個封裝book表的實體類Book:

public class Book {
   private Long id;
   private String sn;
   private String name;
   private String author;
   private BigDecimal price;

   private Long dirId;

   @Override
   public String toString() {
       return "Book{" +
               "id=" + id +
               ", sn='" + sn + '\'' +
               ", name='" + name + '\'' +
               ", author='" + author + '\'' +
               ", price=" + price +
               ", dirId=" + dirId +
               '}';
  }

   public Long getId() {
       return id;
  }

   public void setId(Long id) {
       this.id = id;
  }

   public String getSn() {
       return sn;
  }

   public void setSn(String sn) {
       this.sn = sn;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getAuthor() {
       return author;
  }

   public void setAuthor(String author) {
       this.author = author;
  }

   public BigDecimal getPrice() {
       return price;
  }

   public void setPrice(BigDecimal price) {
       this.price = price;
  }

   public Long getDirId() {
       return dirId;
  }

   public void setDirId(Long dirId) {
       this.dirId = dirId;
  }
}

實體類中變量需要和數據庫中創建的表的數據類型,名字一致,這樣才能把屬性封裝上去

1.2、創建數據訪問層(javaweb中是DAO層),使用mybatis創建一個mapper來代替DAO,在mapper下創建一個接口

public interface BookMapper {
   /**
    * 使用注解方法來完成相應的數據庫操作
    * @return
    */
//   @Select("select * from book")
   List<Book> list();
}

其中我們創建好接口后,需要去實現接口,在BookMapper.xml中去編寫方法,也可以使用mybatis注解來實現,建議想簡單的操作使用注解,復雜的可以在xml中進行編寫。

1.3、創建mapper文件(xml),這個我們需要在 resources資源根下創建出一個和BookMapper接口一樣的目錄結構,這樣才能識別到接口(詳細原因可以查資料,這里暫不做解釋)並且名字也要一樣,只不過是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.qinfeng.mapper.BookMapper">

   <select id="list" resultType="com.qinfeng.domain.Book">
      select * from book
   </select>
</mapper>

其中的id為list這個是和我們接口中的方法名是一樣,要是不一樣,那我們就無法進行使用這個sql語句

1.4、我們還需要創建在resources下建一個mybatis配置文件

<!-- 配置文件的根元素 -->
<configuration>
   <!--   類的別名-->
   <typeAliases>
       <package name="com.qinfeng.domain"/>
   </typeAliases>
 
</configuration>

這里按照我們之前學習mybatis時,這里還有很多配置沒有寫,如數據庫的環境配置,加載properties文件,以及加載我們的mapper映射文件,因為我們在使用spring是在它配置文件也有其內容重復,進而簡化。

2、創建業務邏輯層

2.1、在service包下創建一個接口,並創建一個包(impl)用來存放接口實現的,先創建接口:

public interface Book {

   List<com.qinfeng.domain.Book> list();
}

2.2、在impl包下創建一個類來繼承Book接口並實現接口中的方法

@Service("bookImpl")
public class bookImpl implements Book {

   @Autowired
   private BookMapper bookMapper;

   @Override
   public List<com.qinfeng.domain.Book> list() {
       List<com.qinfeng.domain.Book> list = bookMapper.list();
       return list;
  }
}

2.3、這里的實現類使用spring的注解,那我們還需要在resources下建一個bean文件(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:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--   1.使用注解進行掃描-->
   <context:component-scan base-package="com.qinfeng">
<!--       1.1掃描的同時我們會排除這個Controller-->
       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
   </context:component-scan>
<!--2.導入我們db配置文件-->
   <context:property-placeholder location="classpath:db.properties"/>

<!--   3.配置數據池-->
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
       <property name="driverClassName" value="${jdbc.driver}"/>
       <property name="url" value="${jdbc.url}"/>
       <property name="username" value="${jdbc.username}"/>
       <property name="password" value="${jdbc.password}"/>
    </bean>
<!-- 4.這是把我們mybatis配置文件集成在spring配置文件中-->
   <!--4.1配置sessionFactory-->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <!--4.1.1加載mybatis核心文件-->
       <property name="configLocation" value="classpath:mybatisSpring.xml"/>
   </bean>

   <!--4.2掃描mapper所在的包 為mapper創建實現類-->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.qinfeng.mapper"/>
   </bean>

   <!--4.3聲明式事務控制-->
   <!--平台事務管理器 把我們的數據源配置到mybatis中-->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"/>
   </bean>


   <!--4.4配置事務增強-->
   <tx:advice id="txAdvice">
       <tx:attributes>
           <tx:method name="*"/>
       </tx:attributes>
   </tx:advice>

   <!--5事務的aop織入-->
   <aop:config>
       <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.qinfeng.service.impl.*.*(..))"></aop:advisor>
   </aop:config>
   
</beans>

上面代碼有注釋,要是不明白需要在去學習一下ssm的整合以及spring事務處理

3、表示層,由於使用SpringMVC,之前的servlet就不用了,被Controller替代

3.1、在domain包的同級下創建Controller包,在包下建一個Controller的視圖業務邏輯的管理

/**
* 無法直接使用@Controller的原因:
* 由於我們寫的這個Controller類的名字就是Controller
* 所以當我們使用@Controller時,系統能無法識別是那個類會進行報錯
* 但是我們還是需要@Controller就需要帶上他org.springframework.stereotype.Controller
*/
@org.springframework.stereotype.Controller
//這里加上注解,添加路徑,那么下面的方法在訪問時,路徑都需要有/zc
//@RequestMapping("/zc")
public class Controller {

   @Autowired
   private Book bookImpl;

   @RequestMapping(value = "/book")
   public ModelAndView list(){
       List<com.qinfeng.domain.Book> list = bookImpl.list();
       System.out.println(list);
       ModelAndView modelAndView = new ModelAndView();
//存儲數據
       modelAndView.addObject("list",list);
//       轉發頁面
       modelAndView.setViewName("findAll");
       return modelAndView;
  }

}

3.2、在Controller中我們使用了springMVC的注解,那我們需要在resources下建一個讀取spring-mvc.xml的文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.注冊驅動-->
<mvc:annotation-driven/>

<!-- 2.掃描Controller包-->
<context:component-scan base-package="com.qinfeng.contorller"/>

<!-- 3.設置我們頁面資源讀取-->
<!--內部資源視圖解析器-->
<bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>

<!--4.開發靜態資源訪問權限-->
<mvc:default-servlet-handler/>

</beans>

這里為什么有新建一個springmvc的配置文件?難道之前創建的bean文件不能讀取到這些注釋嗎? 答案是可以讀取到的,但是我們為了使前端與后端配置進行分離才進行這樣的操作。

3.3、當我們進行頁面跳轉,需要進行編寫相應的頁面,我們在webapp下創建;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" width="80%" align="center" style="margin: auto">
<tr style="color: lightskyblue">
<th>序號</th>
<th>圖書編號</th>
<th>書名</th>
<th>作者</th>
<th>價格</th>
<th>分類</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="i" varStatus="s">
<tr id="hang${s.count}" style="color: gray">
<td>${s.count}</td>
<td>${i.sn}</td>
<td>${i.name}</td>
<td>${i.author}</td>
<td>${i.price}</td>
<td>${i.dirId}</td>
<td><a href="#">修改</a>&nbsp;
<a href="#">刪除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>

我們訪問時一般都是到index.jsp頁面,可以在這個頁面上加上

<jsp:forward page="${pageContext.request.contextPath}/book"></jsp:forward>

可以自動跳轉去訪問Controller下的/book 路徑下的資源

3.4、做完以上步驟,恭喜你,你距離成功只差一步了。因為我們還需要去配置我們web.xml使用的我們的spring配置可以被前端識別。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<!--spring 監聽器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--springmvc的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!--亂碼過濾器-->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

好的在一切正常的情況下我們可以看到頁面的展示的數據


補充項目所需坐標:

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

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.qinfeng</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>


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

<dependencies>
<!--spring相關-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>

<!--servlet和jsp 這兩留能回和自己我Tomcat中的配置重復,導致無法識別用哪個而出錯-->
<!-- <dependency>-->
<!-- <groupId>javax.servlet</groupId>-->
<!-- <artifactId>servlet-api</artifactId>-->
<!-- <version>2.5</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>javax.servlet.jsp</groupId>-->
<!-- <artifactId>jsp-api</artifactId>-->
<!-- <version>2.0</version>-->
<!-- </dependency>-->

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!--mybatis相關-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

</dependencies>
<!-- Tomcat-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<!-- <artifactId>tomcat</artifactId>-->
<version>2.2</version>
<configuration>
<path>/</path>
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

 

打印日志的log4j.properties:

#
# Hibernate, Relational Persistence for Idiomatic Java
#
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
#

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=all, stdout

 

數據庫信息db.properties:

# jdbc.driver=com.mysql.cj.jdbc.Driver,數據庫是八以上的使用這個
jdbc.driver=com.mysql.jdbc.Driver
# jdbc.url=jdbc:mysql:///數據庫名稱
jdbc.url=jdbc:mysql://localhost:3306/數據庫名稱
jdbc.username=root
jdbc.password=自己的數據庫密碼

 

注意:在編寫時,一定要注意單詞,單詞出錯真的很難受呀~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM