天天看點

SSM個人部落格項目實戰01

1. 使用的環境

  這個部落格系統準備使用SpringMVC+MyBatis+Spring來搭建,背景管理使用EasyUI,前台使用Bootstrap。使用Apache的Shiro架構來實作安全認證,使用Apache的Lucene全文檢索引擎架構實作全站的檢索。資料庫用的是mysql,資料庫連接配接池用的是阿裡巴巴的Druid,整個項目工程使用Maven來管理。基本環境就是這樣子,後面有什麼改動再做補充,下面開始搭建,先看一下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>ssm.blog</groupId>
  <artifactId>Blog</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>

    <!-- 添加sevlet支援 -->
    <dependency>
        <groupId>Javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- 添加jsp支援 -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <!-- 添加jstl支援 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- 添加spring支援 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>

    <!-- 添加mybatis支援 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>

    <!--  jdbc驅動包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

    <!-- 添加阿裡巴巴連接配接池Druid支援 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.16</version>
    </dependency>

    <!-- 添加日志支援 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>

    <!-- 添加Shiro支援 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-web</artifactId>
        <version>1.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.2.5</version>
    </dependency>

    <!-- 添加lucene支援 -->
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>6.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queryparser</artifactId>
        <version>6.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-common</artifactId>
        <version>6.1.0</version>
    </dependency>

    <!-- Apache共公包 -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
    </dependency>   
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>   
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.8.3</version>
    </dependency>   
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
    </dependency>   
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>   
    <dependency>
        <groupId>net.sf.ezmorph</groupId>
        <artifactId>ezmorph</artifactId>
        <version>1.0.6</version>
    </dependency>

    <!-- 添加百度編輯器ueditor支援 -->
    <!-- 還有幾個maven倉庫中沒有,我放到lib下了 -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.2</version>
    </dependency>

    <!-- 添加junit支援 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

  </dependencies>
  <build>
    <finalName>Blog</finalName>
  </build>
       
</project>      
之前在我的一篇多線程的博文中,有個網友給我回複說現在阿裡巴巴的Druid連接配接池用的也比較多,是以這次我準備使用這個Druid連接配接池,阿裡巴巴的産品應該不會讓我們失望的,不過我沒有深入的去研究這個,到時候再說吧,了解一下也不錯~

2. 表的設計

  由于現在隻是搭建一個架構,是以表的話目前我先建幾個,但是隻設定了id字段,其他字段還沒設定,在我具體寫項目的時候再來添加,因為具體的需求我還沒想全,到時候再添加也不遲,主要建了下面幾張表:
表名 作用
t_blogger 部落客資訊表
t_blog 部落格資訊表
t_blogType 部落格類型表
t_comment 評論資訊表
t_link 友情連結表

目前就建了這幾個,到時候再說吧。

3. 項目工程結構搭建

  接下來就是将項目整個架構給弄好,比如一些配置檔案啊,一些包啊,包括簡單的java程式啊等等。

先來把部配置設定置檔案搞定,首先是日志的配置檔案log4j.properties,這個我都是從官方給的貼過來的,如下:

log4j.rootLogger=DEBUG, Console  

#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  

log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG      

接下來就是在web.xml中添加Spring監聽器、Shiro過濾器和SpringMVC的支援,以及其他一些配置:

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Blog</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

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

  <!-- 添加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:spring-mvc.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>*.do</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>*.html</url-pattern> <!-- 僞靜态 -->
  </servlet-mapping>

  <!-- 添加shiro過濾器 -->
  <filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <!-- 該值預設為false,表示聲明周期由SpringApplicationContext管理,設定為true表示ServletContainer管理 -->
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 編碼過濾器 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>      

然後去配Spring的配置檔案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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <!-- 自動掃描包中的bean -->
    <context:component-scan base-package="ssm.blog.service" />

    <!-- 配置資料源,使用阿裡巴巴連接配接池Druid -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url"
            value="jdbc:mysql://localhost:3306/db_blog?useUnicode=true&amp;characterEncoding=UTF-8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <!-- 配置mybatis的sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自動掃描mappers.xml檔案 -->
        <property name="mapperLocations" value="classpath:ssm/blog/mappers/*.xml"></property>
        <!-- 加載mybatis全局配置檔案 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>

    <!-- 掃描mapper接口(即dao),Spring會自動查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="ssm.blog.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- 事務管理(transaction manager) -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 自定義Realm -->
    <bean id="myRealm" class="ssm.blog.realm.MyRealm" />

    <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm" />
    </bean>

    <!-- Shiro過濾器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- Shiro的核心安全接口,這個屬性是必須的 -->
        <property name="securityManager" ref="securityManager" />
        <!-- 身份認證失敗,則跳轉到登入頁面的配置 -->
        <property name="loginUrl" value="/login.jsp" />
        <!-- 權限認證失敗,則跳轉到指定頁面,因為個人部落格就一個人登陸,就不需要權限了 -->
        <!-- <property name="unauthorizedUrl" value="http://blog.csdn.net/unauthorized.jsp" />  -->
        <!-- Shiro連接配接限制配置,即過濾鍊的定義 -->
        <property name="filterChainDefinitions">
            <value>
                /login=anon
                /admin/**=authc
            </value>
        </property>
    </bean>

    <!-- 保證實作了Shiro内部lifecycle函數的bean執行 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

    <!-- 開啟Shiro注解 -->
    <bean
        class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
        depends-on="lifecycleBeanPostProcessor" />
    <bean
        class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager" />
    </bean>

    <!-- 配置事務通知屬性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 定義事務傳播屬性 -->
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="edit*" propagation="REQUIRED" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="new*" propagation="REQUIRED" />
            <tx:method name="set*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="change*" propagation="REQUIRED" />
            <tx:method name="check*" propagation="REQUIRED" />
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="load*" propagation="REQUIRED" read-only="true" />
            <tx:method name="*" propagation="REQUIRED" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!-- 配置事務切面 -->
    <aop:config>
        <aop:pointcut id="pointCut" expression="execution(* ssm.blog.service.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut" />
    </aop:config>

</beans>      

這裡資料源,使用的是阿裡巴巴連接配接池Druid,由于包已經導入了,在包裡面有個com.alibaba.druid.pool.DruidDataSource類就是Druid資料源,配一下即可。關于Shiro的配置,我在前面Shiro的博文中已經解釋過了,在這裡就不多做解釋了,可以從我的文章目錄中找到Shiro部分看一下即可。spring配置檔案搞定了,裡面也配置了資料源,sessionFactory,那麼接下來就開始搞mybatis。

  首先配置一下mybatis的全局配置檔案mybatis-config.xml,因為資料源啥的都交給spring管理了,是以全局配置檔案就比較清爽了,當然還有一些設定上的東西,比如緩存啊等等,這裡就不配置了,這個要看具體實際中使用的時候再配置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 别名 -->
    <typeAliases>
        <package name="ssm.blog.entity"/>
    </typeAliases>
</configuration>      

這裡隻配了個掃描ssm.blog.entity包中的實體,那就順水推舟,把這個包中的entity寫了呗,現在隻寫一個部落客資訊,後面有别的再添加。

/**
 * @Description 部落客實體
 * @author Ni Shengwu
 *
 */
public class Blogger {

    private Integer id;
    private String username;
    private String password;
    //省去get set方法
}      

接下來再配置mapper配置檔案:BloggerMapper.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="ssm.blog.dao.BloggerDao">

    <resultMap type="Blogger" id="BloggerResult">
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
    </resultMap>


</mapper>      

我就寫了個resultMap,其實目前先不寫也行,後面用到什麼就往裡面加什麼。然後指定namespace為ssm.blog.dao包下的BloggerDao接口,那麼下面把這個接口給寫了。

/**
 * @Description 部落客dao接口
 * @author Ni Shengwu
 *
 */
public interface BloggerDao {

}      

哈哈,裡面啥也沒有,因為現在還沒有需求,而且這個接口中的方法也是根據上面的mapper配置檔案來的。目前隻是把項目架構給寫好,如果從上面讀下來,你會發現我的思路很清晰,一路順水搞下來。這個dao就相當于mapper接口,不用實作,等用的時候spring會執行個體化一個代理對象去執行裡面的方法。現在dao有了,接下來就把service層給寫了呗!

/**
 * @Description 部落客Service接口
 * @author Ni Shengwu
 *
 */
public interface BloggerService {

}      

也是個空殼,當然了,順帶把service實作類給寫了。

/**
 * @Description 部落客Service實作類
 * @author Ni Shengwu
 *
 */
@Service("bloggerService")
public class BloggerServiceImpl implements BloggerService {

}      

注解啥的現在就可以加上去了,否則後面忘了,又會報錯找不着這個bean啥的,是以順帶把注解加上。看着這些類都是空殼感覺很爽,因為後會一點點往裡面塞東西,很喜歡這種感覺,讓自己的項目越來越充實。

  寫好了service層,接下來就是controller層了,controller層分為前台的controller和背景的controller,前台的controller不需要身份認證,因為不管是誰都能通路我的部落格,但是背景的controller就需要認證了,隻有我自己,或者說隻有 管理者才能登入進來通路。是以從上面工程的結構圖中會看到有兩個controller包。下面挨個來把兩個controller的架子給搭好。

/**
 * @Description 部落客Controller層,前台部分,不需要認證
 * @author Ni Shengwu
 *
 */
@Controller
@RequestMapping("/blogger")
public class BloggerController {

    @Resource
    private BloggerService bloggerService;
}      
/**
 * @Description 管理者部落客Controller層,需要身份認證
 * @author Ni Shengwu
 *
 */
@Controller
@RequestMapping("/admin/blogger")
public class BloggerAdminController {

}      

可以看到,前台controller和背景controller比對的url是不一樣的,現在結合上面spring的配置檔案中shiro部分的配置可知,當請求/admin*的時候要進行身份認證,是以我把url設定成了/admin/blogger,現在就能把這兩者給串起來了。

  說到了認證,很自然想到spring配置檔案中還有個自定義的realm,因為認證的時候會去請求我們自己定義的realm,是以現在可以去寫自定義realm了。自定義realm需要繼承AuthorizingRealm 類,并實作兩個方法,如下:

/**
 * @Description 自定義realm
 * @author Ni Shengwu
 *
 */
public class MyRealm extends AuthorizingRealm {

    /**
     * 為目前登陸的使用者授予角色和權限
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(
            PrincipalCollection principals) {
        // 這個個人部落格項目是不需要進行角色和權限認證的,因為就一個使用者
        return null;
    }

    /**
     * 對前登陸的使用者進行身份認證
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(
            AuthenticationToken token) throws AuthenticationException {
        // TODO Auto-generated method stub
        return null;
    }
}      

關于自定義realm部分的,如果不太明白,可以看一下我寫的shiro自定義realm的那篇文章,shiro總共也就寫了那幾篇,也不多。

  好了,現在好像各個層的架構都搭好了,最後就是把springmvc的配置給搞好就行了,即配置spring-mvc.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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <!-- 掃描所有ssm.blog.controller包下面的所有controller -->
    <context:component-scan base-package="ssm.blog.controller" />

    <!-- 配置注解映射器和注解擴充卡 -->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!-- 靜态資源解析,包括js,css,img... -->
    <mvc:resources location="/static/" mapping="/static/**"></mvc:resources>

    <!-- 視圖解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 檔案上傳 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10000000" />
        <property name="defaultEncoding" value="utf-8" />
    </bean>

</beans>       

到這裡,整個工程的架構就基本上搭建好了,還有一個問題,就是pom.xml檔案中關于百度的ueditor編輯器在maven倉庫中沒有找到,是以還有幾個jar包隻能放到WEB-INF/lib中了,如下:

這樣整個架構就搭建好了,部署一下工程,開啟tomcat,運作一下http://localhost:8080/Blog瞧一瞧能否輸出index.jsp中的内容。

  

【注】本項目我已敲完,源碼已經上傳github,部落格上會更新完整進度,歡迎大家關注我的部落格~

github位址:https://github.com/eson15/Blog。歡迎大家star我的工程,follow一下也是極好的~