UEditor之——与SpringMVC整合

一、引言

相信大家做项目时,很多时候都会用到富文本编辑器。今天是2016年8月的最后一天,那么就给大家带来一篇关于JSP UEditor整合SpringMVC的文章吧,UEditor是百度的一款富文本编辑器产品,网址为:http://ueditor.baidu.com/website/  , 但是直接使用Editor时,会将编辑的图片直接上传到服务器的项目所在路径,如果每次部署项目的时候,都是全量部署(删除服务器上原有项目,重新部署),则之前上传的图片都会清空,所以,一般情况下,我们最好是将图片上传到服务器上某个单独的目录下,这样,即使我们全量部署项目,之前上传的图片也就不会丢失了。好,那我们一起来看如何将Editor整合,并将图片保存到单独的目录下。

二、准备

这里我们用的UEditor的版本是1.4.3.3 下载地址为:http://ueditor.baidu.com/build/build_down.php?n=ueditor&v=1_4_3_3-utf8-jsp  

三、实战

1、新建项目,导入UEditor

这里,我们新建Maven工程ueditor,将下载的UEditor解压后重命名为ueditor,并将文件夹拷贝到webapp/static目录下,如下图所示:



2、导入jar包

如图:


3、编辑pom.xml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <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">  
  2.   
  3.  <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.lyz</groupId>  
  5.   <artifactId>lyz</artifactId>  
  6.   <version>1.0.0-SNAPSHOT</version>  
  7.   <packaging>war</packaging>  
  8.     
  9.  <properties>  
  10.         <spring.version>4.0.5.RELEASE</spring.version>  
  11.         <hibernate.version>4.3.5.Final</hibernate.version>  
  12.     </properties>  
  13.   
  14.     <dependencies>  
  15.         <dependency>  
  16.             <groupId>org.springframework</groupId>  
  17.             <artifactId>spring-core</artifactId>  
  18.             <version>${spring.version}</version>  
  19.         </dependency>  
  20.         <dependency>  
  21.             <groupId>org.springframework</groupId>  
  22.             <artifactId>spring-context</artifactId>  
  23.             <version>${spring.version}</version>  
  24.         </dependency>  
  25.         <dependency>  
  26.             <groupId>org.springframework</groupId>  
  27.             <artifactId>spring-context-support</artifactId>  
  28.             <version>${spring.version}</version>  
  29.         </dependency>  
  30.         <dependency>  
  31.             <groupId>org.springframework</groupId>  
  32.             <artifactId>spring-orm</artifactId>  
  33.             <version>${spring.version}</version>  
  34.         </dependency>  
  35.         <dependency>  
  36.             <groupId>org.springframework</groupId>  
  37.             <artifactId>spring-web</artifactId>  
  38.             <version>${spring.version}</version>  
  39.         </dependency>  
  40.         <dependency>  
  41.             <groupId>org.springframework</groupId>  
  42.             <artifactId>spring-webmvc</artifactId>  
  43.             <version>${spring.version}</version>  
  44.         </dependency>  
  45.         <dependency>  
  46.             <groupId>org.springframework</groupId>  
  47.             <artifactId>spring-tx</artifactId>  
  48.             <version>${spring.version}</version>  
  49.         </dependency>  
  50.   
  51.         <!-- hibernate -->  
  52.         <dependency>  
  53.             <groupId>org.hibernate</groupId>  
  54.             <artifactId>hibernate-core</artifactId>  
  55.             <version>${hibernate.version}</version>  
  56.         </dependency>  
  57.           
  58.         <!-- 配置HttpClient -->  
  59.          <dependency>  
  60.             <groupId>commons-logging</groupId>  
  61.             <artifactId>commons-logging</artifactId>  
  62.             <version>1.1.1</version>  
  63.         </dependency>  
  64.   
  65.         <dependency>  
  66.             <groupId>commons-codec</groupId>  
  67.             <artifactId>commons-codec</artifactId>  
  68.             <version>1.4</version>  
  69.         </dependency>  
  70.   
  71.    <!--      <dependency>  
  72.             <groupId>commons-httpclient</groupId>  
  73.             <artifactId>commons-httpclient</artifactId>  
  74.             <version>3.0.1</version>  
  75.         </dependency> -->  
  76.       
  77.         <!-- Java EE -->  
  78.         <dependency>  
  79.             <groupId>javax.persistence</groupId>  
  80.             <artifactId>persistence-api</artifactId>  
  81.             <version>1.0</version>  
  82.         </dependency>  
  83.         <dependency>  
  84.           <groupId>javax.servlet</groupId>  
  85.           <artifactId>javax.servlet-api</artifactId>  
  86.           <version>3.0.1</version>  
  87.         </dependency>  
  88.         <dependency>  
  89.             <groupId>jstl</groupId>  
  90.             <artifactId>jstl</artifactId>  
  91.             <version>1.2</version>  
  92.         </dependency>  
  93.         <dependency>  
  94.             <groupId>com.alibaba</groupId>  
  95.             <artifactId>druid</artifactId>  
  96.             <version>1.0.5</version>  
  97.         </dependency>  
  98.         <dependency>  
  99.             <groupId>mysql</groupId>  
  100.             <artifactId>mysql-connector-java</artifactId>  
  101.             <version>5.1.30</version>  
  102.         </dependency>  
  103.           
  104.         <dependency>  
  105.             <groupId>com.google.guava</groupId>  
  106.             <artifactId>guava</artifactId>  
  107.             <version>17.0</version>  
  108.         </dependency>  
  109.           
  110.         <dependency>  
  111.         <groupId>net.sf.ezmorph</groupId>  
  112.         <artifactId>ezmorph</artifactId>  
  113.         <version>1.0.6</version>  
  114.         <type>jar</type>  
  115.         <scope>compile</scope>  
  116.         </dependency>  
  117.           
  118.         <dependency>   
  119.         <groupId>net.sf.json-lib</groupId>   
  120.         <artifactId>json-lib</artifactId>   
  121.         <version>2.2.3</version>   
  122.         <classifier>jdk15</classifier>   
  123.         </dependency>  
  124.           
  125.         <dependency>  
  126.         <groupId>com.thoughtworks.xstream</groupId>  
  127.         <artifactId>xstream</artifactId>  
  128.         <version>1.4.4</version>  
  129.         </dependency>  
  130.           
  131.         <dependency>  
  132.             <groupId>ch.qos.logback</groupId>  
  133.             <artifactId>logback-classic</artifactId>  
  134.             <version>1.0.13</version>  
  135.         </dependency>  
  136.   
  137.         <dependency>  
  138.             <groupId>org.codehaus.jackson</groupId>  
  139.             <artifactId>jackson-mapper-asl</artifactId>  
  140.             <version>1.9.13</version>  
  141.         </dependency>  
  142.         <dependency>    
  143.             <groupId>org.codehaus.jackson</groupId>    
  144.             <artifactId>jackson-core-asl</artifactId>    
  145.             <version>1.9.13</version>    
  146.         </dependency>    
  147.           
  148.         <dependency>  
  149.             <groupId>commons-fileupload</groupId>  
  150.             <artifactId>commons-fileupload</artifactId>  
  151.             <version>1.2.2</version>  
  152.         </dependency>  
  153.         <dependency>  
  154.             <groupId>org.apache.commons</groupId>  
  155.             <artifactId>commons-io</artifactId>  
  156.              <version>1.3.2</version>  
  157.             <scope>compile</scope>  
  158.         </dependency>  
  159.         <dependency>  
  160.             <groupId>com.esotericsoftware.reflectasm</groupId>  
  161.             <artifactId>reflectasm</artifactId>  
  162.             <version>1.09</version>  
  163.         </dependency>  
  164.           
  165.         <dependency>  
  166.             <groupId>xmlpull</groupId>  
  167.             <artifactId>xmlpull</artifactId>  
  168.             <version>1.1.3.1</version>  
  169.             <scope>provided</scope>  
  170.         </dependency>  
  171.         <dependency>  
  172.             <groupId>xpp3</groupId>  
  173.             <artifactId>xpp3</artifactId>  
  174.             <version>1.1.4c</version>  
  175.             <scope>provided</scope>  
  176.         </dependency>  
  177.         <dependency>  
  178.             <groupId>com.thoughtworks.xstream</groupId>  
  179.             <artifactId>xstream</artifactId>  
  180.             <version>1.4.7</version>  
  181.             <scope>provided</scope>  
  182.         </dependency>  
  183.   
  184.         <dependency>  
  185.             <groupId>org.apache.poi</groupId>  
  186.             <artifactId>poi</artifactId>  
  187.             <version>3.7</version>  
  188.         </dependency>  
  189.         <dependency>  
  190.             <groupId>c3p0</groupId>  
  191.             <artifactId>c3p0</artifactId>  
  192.             <version>0.9.1.2</version>  
  193.         </dependency>  
  194.         <dependency>  
  195.             <groupId>cglib</groupId>  
  196.             <artifactId>cglib-nodep</artifactId>  
  197.             <version>2.1_3</version>  
  198.         </dependency>  
  199.         <dependency>  
  200.             <groupId>commons-pool</groupId>  
  201.             <artifactId>commons-pool</artifactId>  
  202.             <version>1.2</version>  
  203.         </dependency>  
  204.         <dependency>  
  205.             <groupId>org.aspectj</groupId>  
  206.             <artifactId>aspectjweaver</artifactId>  
  207.             <version>1.6.0</version>  
  208.         </dependency>  
  209.   
  210.         <!-- quartz -->  
  211.         <dependency>  
  212.             <groupId>org.quartz-scheduler</groupId>  
  213.             <artifactId>quartz</artifactId>  
  214.             <version>2.2.1</version>  
  215.         </dependency>  
  216.         <dependency>  
  217.             <groupId>org.quartz-scheduler</groupId>  
  218.             <artifactId>quartz-jobs</artifactId>  
  219.             <version>2.2.1</version>  
  220.         </dependency>  
  221.         <!-- joda time -->  
  222.         <dependency>  
  223.             <groupId>joda-time</groupId>  
  224.             <artifactId>joda-time</artifactId>  
  225.             <version>2.4</version>  
  226.         </dependency>  
  227.           
  228.         <dependency>  
  229.             <groupId>xml-apis</groupId>  
  230.             <artifactId>xml-apis</artifactId>  
  231.             <version>1.4.01</version>  
  232.         </dependency>  
  233.           
  234.          <dependency>  
  235.             <groupId>org.apache.httpcomponents</groupId>  
  236.             <artifactId>fluent-hc</artifactId>  
  237.             <version>4.3.5</version>  
  238.             <scope>provided</scope>  
  239.         </dependency>  
  240.         <dependency>  
  241.             <groupId>org.apache.httpcomponents</groupId>  
  242.             <artifactId>httpclient</artifactId>  
  243.             <version>4.3.5</version>  
  244.             <scope>provided</scope>  
  245.         </dependency>  
  246.         <dependency>  
  247.             <groupId>org.apache.httpcomponents</groupId>  
  248.             <artifactId>httpclient-cache</artifactId>  
  249.             <version>4.3.5</version>  
  250.             <scope>provided</scope>  
  251.         </dependency>  
  252.         <dependency>  
  253.             <groupId>org.apache.httpcomponents</groupId>  
  254.             <artifactId>httpcore</artifactId>  
  255.             <version>4.3.2</version>  
  256.             <scope>provided</scope>  
  257.         </dependency>  
  258.         <dependency>  
  259.             <groupId>org.apache.httpcomponents</groupId>  
  260.             <artifactId>httpmime</artifactId>  
  261.             <version>4.3.5</version>  
  262.             <scope>provided</scope>  
  263.         </dependency>  
  264.         <dependency>  
  265.             <groupId>org.json</groupId>  
  266.             <artifactId>json</artifactId>  
  267.             <version>20140107</version>  
  268.         </dependency>  
  269.           
  270.           <dependency>      
  271.             <groupId>org.slf4j</groupId>      
  272.             <artifactId>slf4j-simple</artifactId>      
  273.             <version>1.6.1</version>  
  274.           </dependency>      
  275.           <dependency>      
  276.             <groupId>org.slf4j</groupId>      
  277.             <artifactId>slf4j-api</artifactId>      
  278.             <version>1.6.1</version>  
  279.           </dependency>      
  280.           <dependency>      
  281.             <groupId>commons-pool</groupId>      
  282.             <artifactId>commons-pool</artifactId>      
  283.             <version>1.5.6</version>  
  284.           </dependency>  
  285.             
  286.           <dependency>  
  287.             <groupId>codec</groupId>  
  288.             <artifactId>codec</artifactId>  
  289.             <version>1.0</version>  
  290.             <scope>system</scope>  
  291.             <systemPath>${project.basedir}/lib/commons-codec-1.9.jar</systemPath>  
  292.          </dependency>  
  293.           <dependency>  
  294.             <groupId>fileupload</groupId>  
  295.             <artifactId>fileupload</artifactId>  
  296.             <version>1.3.1</version>  
  297.             <scope>system</scope>  
  298.             <systemPath>${project.basedir}/lib/commons-fileupload-1.3.1.jar</systemPath>  
  299.          </dependency>  
  300.           <dependency>  
  301.             <groupId>commons-io</groupId>  
  302.             <artifactId>commons-io</artifactId>  
  303.             <version>2.4</version>  
  304.             <scope>system</scope>  
  305.             <systemPath>${project.basedir}/lib/commons-io-2.4.jar</systemPath>  
  306.          </dependency>  
  307.           <dependency>  
  308.             <groupId>json</groupId>  
  309.             <artifactId>json</artifactId>  
  310.             <version>1.0</version>  
  311.             <scope>system</scope>  
  312.             <systemPath>${project.basedir}/lib/json.jar</systemPath>  
  313.          </dependency>  
  314.           <dependency>  
  315.             <groupId>ueditor</groupId>  
  316.             <artifactId>ueditor</artifactId>  
  317.             <version>1.1.2</version>  
  318.             <scope>system</scope>  
  319.             <systemPath>${project.basedir}/lib/ueditor-1.1.2.jar</systemPath>  
  320.          </dependency>  
  321.            
  322.     </dependencies>  
  323.   
  324.     <build>  
  325.         <finalName>lyz</finalName>  
  326.         <plugins>  
  327.             <plugin>  
  328.                 <groupId>org.apache.maven.plugins</groupId>  
  329.                 <artifactId>maven-compiler-plugin</artifactId>  
  330.                 <version>3.1</version>  
  331.                 <configuration>  
  332.                     <source>1.7</source>  
  333.                     <target>1.7</target>  
  334.                 </configuration>  
  335.             </plugin>  
  336.             <plugin>  
  337.                 <groupId>org.apache.maven.plugins</groupId>  
  338.                 <artifactId>maven-jar-plugin</artifactId>  
  339.                 <version>2.4</version>  
  340.             </plugin>  
  341.             <plugin>  
  342.                 <groupId>org.apache.maven.plugins</groupId>  
  343.                 <artifactId>maven-eclipse-plugin</artifactId>  
  344.                 <configuration>  
  345.                     <wtpmanifest>true</wtpmanifest>  
  346.                     <wtpapplicationxml>true</wtpapplicationxml>  
  347.                     <wtpversion>2.0</wtpversion>  
  348.                 </configuration>  
  349.             </plugin>  
  350.         </plugins>  
  351.           
  352.     </build>  
  353. </project>  

4、设置web.xml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3.         xmlns="http://java.sun.com/xml/ns/javaee"   
  4.         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"   
  5.         id="WebApp_ID" version="3.0">  
  6.   <display-name>lyz</display-name>  
  7.     
  8.   <!-- 配置spring监听器 -->  
  9.     <listener>  
  10.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  11.     </listener>  
  12.       
  13.       
  14.     <!-- 加载配置文件路径 -->  
  15.     <context-param>  
  16.         <param-name>contextConfigLocation</param-name>  
  17.         <param-value>classpath*:applicationContext*.xml</param-value>  
  18.     </context-param>  
  19.       
  20.     <!-- springmvc配置 -->  
  21.     <servlet>  
  22.         <servlet-name>lyz</servlet-name>  
  23.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  24.         <init-param>  
  25.           <param-name>contextConfigLocation</param-name>  
  26.           <param-value>classpath*:lyz-servlet*.xml</param-value>  
  27.         </init-param>  
  28.         <load-on-startup>1</load-on-startup>  
  29.     </servlet>  
  30.     <servlet-mapping>  
  31.         <servlet-name>lyz</servlet-name>  
  32.         <url-pattern>/</url-pattern>  
  33.     </servlet-mapping>  
  34.       
  35.     <!-- 配置OpenSessionInView -->  
  36.     <filter>  
  37.         <filter-name>hibernateFilter</filter-name>  
  38.         <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  39.         <!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->  
  40.         <init-param>  
  41.             <param-name>singleSession</param-name>  
  42.             <param-value>true</param-value>  
  43.         </init-param>  
  44.     </filter>  
  45.       
  46.     <filter-mapping>  
  47.         <filter-name>hibernateFilter</filter-name>  
  48.         <url-pattern>/*</url-pattern>  
  49.      </filter-mapping>  
  50.        
  51.        <filter>  
  52.           <filter-name>CorsFilter</filter-name>  
  53.           <filter-class>com.lyz.utils.cors.filter.CorsFilter</filter-class>  
  54.         </filter>  
  55.         <filter-mapping>  
  56.           <filter-name>CorsFilter</filter-name>  
  57.           <url-pattern>/*</url-pattern>  
  58.         </filter-mapping>  
  59.       
  60.     <!-- 字符编码过滤器 -->  
  61.     <filter>  
  62.         <filter-name>CharacterEncodingFilter</filter-name>  
  63.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  64.         <init-param>  
  65.             <param-name>encoding</param-name>  
  66.             <param-value>UTF-8</param-value>  
  67.         </init-param>  
  68.         <init-param>  
  69.             <param-name>forceEncoding</param-name>  
  70.             <param-value>true</param-value>  
  71.         </init-param>  
  72.     </filter>  
  73.     <filter-mapping>  
  74.         <filter-name>CharacterEncodingFilter</filter-name>  
  75.         <url-pattern>/*</url-pattern>  
  76.     </filter-mapping>  
  77.       
  78.   <welcome-file-list>  
  79.     <welcome-file>index.html</welcome-file>  
  80.     <welcome-file>index.htm</welcome-file>  
  81.     <welcome-file>index.jsp</welcome-file>  
  82.     <welcome-file>default.html</welcome-file>  
  83.     <welcome-file>default.htm</welcome-file>  
  84.     <welcome-file>default.jsp</welcome-file>  
  85.   </welcome-file-list>  
  86.     
  87. </web-app>  

5、新建applicationContext.xml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:p="http://www.springframework.org/schema/p"  
  5.        xmlns:context="http://www.springframework.org/schema/context"  
  6.        xmlns:aop="http://www.springframework.org/schema/aop"   
  7.        xmlns:tx="http://www.springframework.org/schema/tx"  
  8.        xmlns:mvc="http://www.springframework.org/schema/mvc"  
  9.        xmlns:cache="http://www.springframework.org/schema/cache"  
  10.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  11.                         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  12.                         http://www.springframework.org/schema/context   
  13.                         http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  14.                         http://www.springframework.org/schema/tx   
  15.                         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  16.                         http://www.springframework.org/schema/aop   
  17.                         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
  18.                         http://www.springframework.org/schema/mvc   
  19.                         http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
  20.                         http://www.springframework.org/schema/cache   
  21.                         http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">  
  22.   
  23.       <!-- 扫描项目包的根路径 -->  
  24.     <context:component-scan base-package="com.lyz" />  
  25.   
  26.     <!-- database connection pool configuration -->  
  27.     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
  28.       
  29.         <!-- 基本属性 url、user、password -->  
  30.           
  31.         <!-- 原配置 -->  
  32.         <property name="url" value="jdbc:mysql://127.0.0.1:3306/shop?characterEncoding=utf8" />  
  33.         <property name="username" value="root" />  
  34.         <property name="password" value="root" />  
  35.   
  36.         <!-- 配置初始化大小、最小、最大 -->  
  37.         <property name="initialSize" value="1" />  
  38.         <property name="minIdle" value="1" />  
  39.         <property name="maxActive" value="20" />  
  40.   
  41.         <!-- 配置获取连接等待超时的时间 -->  
  42.         <property name="maxWait" value="60000" />  
  43.   
  44.         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
  45.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
  46.   
  47.         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
  48.         <property name="minEvictableIdleTimeMillis" value="300000" />  
  49.   
  50.         <property name="validationQuery" value="SELECT 'x'" />  
  51.         <property name="testWhileIdle" value="true" />  
  52.         <property name="testOnBorrow" value="false" />  
  53.         <property name="testOnReturn" value="false" />  
  54.   
  55.         <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->  
  56.         <property name="poolPreparedStatements" value="false" />  
  57.         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />  
  58.   
  59.         <!-- 配置监控统计拦截的filters -->  
  60.         <property name="filters" value="stat" />  
  61.     </bean>  
  62.   
  63.     <!-- 配置sessionFactory -->  
  64.     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  65.         <property name="dataSource" ref="dataSource" />  
  66.         <property name="packagesToScan" value="com.lyz.**.entity"></property>  
  67.         <property name="hibernateProperties">  
  68.             <props>  
  69.                 <prop key="javax.persistence.validation.mode">none</prop>  
  70.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>  
  71.                 <prop key="hibernate.show_sql">true</prop>  
  72.                 <prop key="hibernate.format_sql">true</prop>  
  73.             </props>  
  74.         </property>  
  75.     </bean>  
  76.   
  77.     <!--  配置spring声明式事物管理 -->  
  78.     <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  79.         <property name="dataSource" ref="dataSource" />  
  80.         <property name="sessionFactory" ref="sessionFactory" />  
  81.     </bean>  
  82.   
  83.     <!-- 配置注解驱动 -->  
  84.     <tx:annotation-driven transaction-manager="transactionManager" />  
  85.       
  86.     <!-- 配置spring声明式事物管理:第二种方式:基于xml -->  
  87.     <!-- 配置事务切入点,局限方法名(采用XML方法配置) -->  
  88.     <tx:advice id="advice" transaction-manager="transactionManager">  
  89.         <tx:attributes>  
  90.             <!-- 配置那些方法需要切入什么事务类型 -->  
  91.             <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  92.             <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  93.             <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  94.             <tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  95.             <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  96.             <tx:method name="*" propagation="SUPPORTS"/>  
  97.         </tx:attributes>  
  98.     </tx:advice>  
  99.       
  100.     <!-- 上面只配置了方法的事务类型,并没有配置向哪些类(对象)切入 -->  
  101.     <!-- 关联切入表达式 -->  
  102.     <aop:config>  
  103.         <aop:advisor advice-ref="advice" pointcut="execution(* com.lyz.**.service.*.*(..))"/>  
  104.         <aop:advisor advice-ref="advice" pointcut="execution(* com.lyz.**.service.impl.*.*(..))"/>  
  105.     </aop:config>  
  106.       
  107. </beans>    

6、新建applications.properties

这个文件主要用来设置一些配置信息,比如图片访问路径,上传路径等,具体如下所示:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. lyz.uploading.url=d:/lyz/static  
  2. lyz.visit.url=/upload/  
  3. lyz.resource.url=http://127.0.0.1:8099  

7、配置log4j

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #\u8F93\u51FA\u5230\u63A7\u5236\u53F0  
  2.   
  3. log4j.appender.stout=org.apache.log4j.ConsoleAppender  
  4. log4j.appender.stout.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.stout.layout.ConversionPattern=[%p]%d{yyyy-MM-dd HH:mm:ss} %l: %m%n  
  6. #log4j.appender.stout.layout.ConversionPattern=[%p]%d{yyyy-MM-dd HH:mm:ss}: %m%n  
  7.   
  8.   
  9. #\u8F93\u51FA\u5230\u6587\u4EF6  
  10. log4j.appender.fout=org.apache.log4j.FileAppender  
  11. log4j.appender.fout.file=d:/Tomcat_Project/logs/wine.log  
  12. #log4j.appender.fout.file=/opt/apache-tomcat-7.0.56/logs/wine.log  
  13. log4j.appender.fout.layout=org.apache.log4j.PatternLayout  
  14. log4j.appender.fout.layout.ConversionPattern=[%p]%d{yyyy-MM-dd HH:mm:ss} %l: %m%n  
  15. #log4j.appender.stout.layout.ConversionPattern=[%p]%d{yyyy-MM-dd HH:mm:ss}: %m%n  
  16.   
  17. #\u8F93\u51FA\u7EA7\u522B  
  18. log4j.rootLogger=INFO, stout  

8、配置lyz-servlet

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:beans="http://www.springframework.org/schema/beans"  
  6.     xmlns:context="http://www.springframework.org/schema/context"   
  7.     xmlns:tx="http://www.springframework.org/schema/tx"  
  8.     xsi:schemaLocation="http://www.springframework.org/schema/mvc   
  9.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
  10.     http://www.springframework.org/schema/beans   
  11.     http://www.springframework.org/schema/beans/spring-beans.xsd  
  12.     http://www.springframework.org/schema/tx   
  13.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  14.     http://www.springframework.org/schema/context   
  15.     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  16.   
  17.     <!-- <mvc:resources mapping="/resources/**" location="/resources/" /> -->  
  18.     <mvc:resources mapping="/static/**" location="/static/" />  
  19.       
  20.     <mvc:annotation-driven />   
  21.     <context:component-scan base-package="com.lyz.**.controller"/>    
  22.   
  23.     <!-- Map simple view name such as "test" into /WEB-INF/test.jsp -->  
  24.     <bean  
  25.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  26.         <property name="prefix" value="/WEB-INF/jsp/" />  
  27.         <property name="suffix" value=".jsp" />  
  28.     </bean>  
  29.   
  30.     <bean id="multipartResolver"  
  31.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  32.             <property name="defaultEncoding" value="utf-8" />    
  33.             <property name="maxUploadSize" value="10485760000" />    
  34.             <property name="maxInMemorySize" value="40960" />    
  35.     </bean>  
  36.   
  37. </beans>  

9、建立实体类Shop

创建实体类主要的目的是方便运行整个项目框架,具体如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.entity;  
  2.   
  3. import java.io.Serializable;  
  4. import javax.persistence.Column;  
  5. import javax.persistence.Entity;  
  6. import javax.persistence.GeneratedValue;  
  7. import javax.persistence.GenerationType;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.Table;  
  10.   
  11.       
  12. /** 
  13.  * 实体类shop 
  14.  * @author liuyazhuang 
  15.  * 
  16.  */  
  17. @Entity  
  18. @Table(name="c_shop")  
  19. public class Shop implements Serializable {  
  20.     private static final long serialVersionUID = -6980546472329430674L;  
  21.     @Id  
  22.     @Column(name="id")  
  23.     @GeneratedValue(strategy=GenerationType.IDENTITY)  
  24.     private Long id;  
  25.       
  26.     public Shop() {  
  27.         super();  
  28.     }  
  29.       
  30.     public Shop(Long id) {  
  31.         super();  
  32.         this.id = id;  
  33.     }  
  34.   
  35.     public Long getId() {  
  36.         return id;  
  37.     }  
  38.     public void setId(Long id) {  
  39.         this.id = id;  
  40.     }  
  41.   
  42.     @Override  
  43.     public String toString() {  
  44.         return "Shop [id=" + id + "]";  
  45.     }  
  46.       
  47. }  

10、创建读取properties文件的工具类LoadPropertiesDataUtils

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.utils;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Properties;  
  6.   
  7. /** 
  8.  * 加载Properties文件数据的工具类 
  9.  * @author liuyazhuang 
  10.  * 
  11.  */  
  12. public final class LoadPropertiesDataUtils{  
  13.       
  14.     private volatile static Properties mProperties;   
  15.       
  16.     static{  
  17.         mProperties = new Properties();  
  18.         InputStream in = LoadPropertiesDataUtils.class.getResourceAsStream("/applications.properties");  
  19.         try{  
  20.             mProperties.load(in);  
  21.         } catch (IOException e){  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25.       
  26.     public static String getValue(String key){  
  27.         if(mProperties == nullreturn "";  
  28.         return mProperties.getProperty(key, "");  
  29.     }  
  30. }  

11、创建随机数工具类

这个类的主要作用是生成指定位数的随机数,具体如下所示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.utils;  
  2.   
  3. import java.util.Random;  
  4.   
  5. /** 
  6.  * 随机数工具类 
  7.  * @author liuyazhuang 
  8.  * 
  9.  */  
  10. public final class RandomUtils {  
  11.     /** 
  12.      * 获取指定位数的随机数 
  13.      * @param num 
  14.      * @return 
  15.      */  
  16.     public static String getRandom(int num){  
  17.         Random random = new Random();  
  18.         StringBuilder sb = new StringBuilder();  
  19.         for(int i = 0;i < num; i++){  
  20.             sb.append(String.valueOf(random.nextInt(10)));  
  21.         }  
  22.         return sb.toString();  
  23.     }  
  24. }  

12、创建字符串工具类StringUtils

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.utils;  
  2.   
  3. /** 
  4.  * 字符串工具类 
  5.  * @author liuyazhuang 
  6.  * 
  7.  */  
  8. public final class StringUtils {  
  9.       
  10.     /** 
  11.      * 判断字符串是否为空 
  12.      * @param str 
  13.      * @return 
  14.      */  
  15.     public static boolean isEmpty(String str){  
  16.         return (str == null || "".equals(str.trim()));  
  17.     }  
  18.       
  19.     /** 
  20.      * 获取名称后缀 
  21.      * @param name 
  22.      * @return 
  23.      */  
  24.     public static String getExt(String name){  
  25.         if(name == null || "".equals(name) || !name.contains("."))  
  26.             return "";  
  27.         return name.substring(name.lastIndexOf(".")+1);  
  28.     }  
  29.       
  30. }  

13、创建解决跨域的类CorsFilter

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.utils.cors.filter;  
  2. import java.io.IOException;  
  3.   
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.web.filter.OncePerRequestFilter;  
  10.   
  11. /** 
  12.  * 解决跨域 
  13.  * @author liuyazhuang 
  14.  * 
  15.  */  
  16. public class CorsFilter extends OncePerRequestFilter {  
  17.   
  18.     @Override  
  19.     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)  
  20.             throws ServletException, IOException {  
  21.     response.addHeader("Access-Control-Allow-Origin""*");  
  22.     response.addHeader("Access-Control-Allow-Methods",  
  23.             "GET, POST, PUT, DELETE, OPTIONS");  
  24.     response.addHeader("Access-Control-Allow-Headers",  
  25.             "origin, content-type, accept, x-requested-with, sid, mycustom, smuser");  
  26.         filterChain.doFilter(request, response);  
  27.     }  
  28. }  

14、创建跳转到首页的控制器类IndexController

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.controller;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.RequestMethod;  
  9.   
  10. /** 
  11.  * 首页controller,主要的功能是跳转到首页 
  12.  * @author liuyazhuang 
  13.  * 
  14.  */  
  15. @Controller  
  16. @RequestMapping(value="/index")  
  17. public class IndexController {  
  18.       
  19.     /** 
  20.      * 跳转到首页 
  21.      * @param request 
  22.      * @param response 
  23.      */  
  24.     @RequestMapping(value="/page", method = RequestMethod.GET)  
  25.     public String page(HttpServletRequest request, HttpServletResponse response){  
  26.         return "/index";  
  27.     }  
  28.       
  29. }  

15、创建上传文件的类UploadImageController

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.lyz.controller;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.OutputStream;  
  6. import java.util.HashMap;  
  7. import java.util.Map;  
  8.   
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.util.FileCopyUtils;  
  14. import org.springframework.web.bind.annotation.RequestMapping;  
  15. import org.springframework.web.bind.annotation.ResponseBody;  
  16. import org.springframework.web.multipart.MultipartFile;  
  17.   
  18. import com.lyz.utils.LoadPropertiesDataUtils;  
  19. import com.lyz.utils.RandomUtils;  
  20. import com.lyz.utils.StringUtils;  
  21.   
  22.   
  23. /** 
  24.  * 上传图片的controller 
  25.  * @author liuyazhuang 
  26.  * 
  27.  */  
  28. @Controller  
  29. @RequestMapping(value="/resource/upload")  
  30. public class UploadImageController {  
  31.       
  32.     /** 
  33.      * 上传图片 
  34.      * @param file 
  35.      * @param request 
  36.      * @param response 
  37.      * @return 
  38.      */  
  39.     @ResponseBody  
  40.     @RequestMapping(value="/images")  
  41.     public Map<String, Object> images (MultipartFile upfile, HttpServletRequest request, HttpServletResponse response){  
  42.         Map<String, Object> params = new HashMap<String, Object>();  
  43.         try{  
  44.              String basePath = LoadPropertiesDataUtils.getValue("lyz.uploading.url");  
  45.              String visitUrl = LoadPropertiesDataUtils.getValue("lyz.visit.url");  
  46.              if(basePath == null || "".equals(basePath)){  
  47.                  basePath = "d:/lyz/static";  //与properties文件中lyz.uploading.url相同,未读取到文件数据时为basePath赋默认值  
  48.              }  
  49.              if(visitUrl == null || "".equals(visitUrl)){  
  50.                  visitUrl = "/upload/"//与properties文件中lyz.visit.url相同,未读取到文件数据时为visitUrl赋默认值  
  51.              }  
  52.              String ext = StringUtils.getExt(upfile.getOriginalFilename());  
  53.              String fileName = String.valueOf(System.currentTimeMillis()).concat("_").concat(RandomUtils.getRandom(6)).concat(".").concat(ext);  
  54.              StringBuilder sb = new StringBuilder();  
  55.              //拼接保存路径  
  56.              sb.append(basePath).append("/").append(fileName);  
  57.              visitUrl = visitUrl.concat(fileName);  
  58.              File f = new File(sb.toString());  
  59.              if(!f.exists()){  
  60.                  f.getParentFile().mkdirs();  
  61.              }  
  62.              OutputStream out = new FileOutputStream(f);  
  63.              FileCopyUtils.copy(upfile.getInputStream(), out);  
  64.              params.put("state""SUCCESS");  
  65.              params.put("url", visitUrl);  
  66.              params.put("size", upfile.getSize());  
  67.              params.put("original", fileName);  
  68.              params.put("type", upfile.getContentType());  
  69.         } catch (Exception e){  
  70.              params.put("state""ERROR");  
  71.         }  
  72.          return params;  
  73.     }  
  74.       
  75. }  

16、引入jquery

我们在webapp/static目录下创建lib目录,然后将jQuery导入到lib目录下,如下图所示:


17、创建index.jsp

在webapp/WEB_INF/jsp目录下创建index.jsp,具体如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3.  <%  
  4.     String path = request.getContextPath();  
  5.     String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6.  %>  
  7. <!DOCTYPE html>  
  8. <html>  
  9. <head>  
  10. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  11. <title>UEditor</title>  
  12. <script type="text/javascript">  
  13.     var basePath = "<%=basePath%>";  
  14. </script>  
  15. <script type="text/javascript" src="../static/lib/jquery-1.12.0.min.js"></script>  
  16. <script type="text/javascript" src="../static/ueditor/ueditor.config.js"></script>  
  17. <script type="text/javascript" src="../static/ueditor/ueditor.all.js"></script>  
  18. <script type="text/javascript" src="../static/ueditor/lang/zh-cn/zh-cn.js"></script>  
  19. <script type="text/javascript" src="../static/index/index.js"></script>  
  20. </head>  
  21. <body>  
  22.     <div>  
  23.         <textarea id="myEditor"></textarea>  
  24.     </div>  
  25. </body>  
  26. </html>  
由上述代码可知,我们再index.jsp中主要定义了一个textarea标签。

18、创建index.js文件

我们在webapp/static目录下创建index文件夹,并在index文件夹中创建index.js,主要内容如下:

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. $(function(){  
  2.       
  3.     //富文本编辑器  
  4.     UE.getEditor('myEditor')  
  5.       
  6.     UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;  
  7.     UE.Editor.prototype.getActionUrl = function(action){  
  8.         if(action == '/resource/upload/images'){  
  9.             return basePath+'resource/upload/images';  
  10.         }else{  
  11.             return this._bkGetActionUrl.call(this, action);  
  12.         }  
  13.     }  
  14. });  

19、编辑UEditor的config.json文件

编辑后的文件如下图所示:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /* 前后端通信相关的配置,注释只允许使用多行方式 */  
  2. {  
  3.     /* 上传图片配置项 */  
  4.     "imageActionName": "/resource/upload/images", /* 执行上传图片的action名称 */  
  5.     "imageFieldName": "upfile", /* 提交的图片表单名称 */  
  6.     "imageMaxSize": 2048000, /* 上传大小限制,单位B */  
  7.     "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */  
  8.     "imageCompressEnable": true, /* 是否压缩图片,默认是true */  
  9.     "imageCompressBorder": 1600, /* 图片压缩最长边限制 */  
  10.     "imageInsertAlign": "none", /* 插入的图片浮动方式 */  
  11.     "imageUrlPrefix": "http://127.0.0.1:8099", /* 图片访问路径前缀 */  
  12.     "imagePathFormat": "/upload/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  13.                                 /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */  
  14.                                 /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */  
  15.                                 /* {time} 会替换成时间戳 */  
  16.                                 /* {yyyy} 会替换成四位年份 */  
  17.                                 /* {yy} 会替换成两位年份 */  
  18.                                 /* {mm} 会替换成两位月份 */  
  19.                                 /* {dd} 会替换成两位日期 */  
  20.                                 /* {hh} 会替换成两位小时 */  
  21.                                 /* {ii} 会替换成两位分钟 */  
  22.                                 /* {ss} 会替换成两位秒 */  
  23.                                 /* 非法字符 \ : * ? " < > | */  
  24.                                 /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */  
  25.   
  26.     /* 涂鸦图片上传配置项 */  
  27.     "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */  
  28.     "scrawlFieldName": "upfile", /* 提交的图片表单名称 */  
  29.     "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  30.     "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */  
  31.     "scrawlUrlPrefix": "", /* 图片访问路径前缀 */  
  32.     "scrawlInsertAlign": "none",  
  33.   
  34.     /* 截图工具上传 */  
  35.     "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */  
  36.     "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  37.     "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */  
  38.     "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */  
  39.   
  40.     /* 抓取远程图片配置 */  
  41.     "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],  
  42.     "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */  
  43.     "catcherFieldName": "source", /* 提交的图片列表表单名称 */  
  44.     "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  45.     "catcherUrlPrefix": "", /* 图片访问路径前缀 */  
  46.     "catcherMaxSize": 2048000, /* 上传大小限制,单位B */  
  47.     "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */  
  48.   
  49.     /* 上传视频配置 */  
  50.     "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */  
  51.     "videoFieldName": "upfile", /* 提交的视频表单名称 */  
  52.     "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  53.     "videoUrlPrefix": "", /* 视频访问路径前缀 */  
  54.     "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */  
  55.     "videoAllowFiles": [  
  56.         ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",  
  57.         ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */  
  58.   
  59.     /* 上传文件配置 */  
  60.     "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */  
  61.     "fileFieldName": "upfile", /* 提交的文件表单名称 */  
  62.     "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */  
  63.     "fileUrlPrefix": "", /* 文件访问路径前缀 */  
  64.     "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */  
  65.     "fileAllowFiles": [  
  66.         ".png", ".jpg", ".jpeg", ".gif", ".bmp",  
  67.         ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",  
  68.         ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",  
  69.         ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",  
  70.         ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"  
  71.     ], /* 上传文件格式显示 */  
  72.   
  73.     /* 列出指定目录下的图片 */  
  74.     "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */  
  75.     "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */  
  76.     "imageManagerListSize": 20, /* 每次列出文件数量 */  
  77.     "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */  
  78.     "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */  
  79.     "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */  
  80.   
  81.     /* 列出指定目录下的文件 */  
  82.     "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */  
  83.     "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */  
  84.     "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */  
  85.     "fileManagerListSize": 20, /* 每次列出文件数量 */  
  86.     "fileManagerAllowFiles": [  
  87.         ".png", ".jpg", ".jpeg", ".gif", ".bmp",  
  88.         ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",  
  89.         ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",  
  90.         ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",  
  91.         ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"  
  92.     ] /* 列出的文件类型 */  
  93.   
  94. }  
此文件中imageActionName名称的配置与index.js中的判断条件中的配置保持一致,如下图:



imageUrlPrefix为图片访问前缀。

20、配置tomcat server.xml文件

由于我们将图片放到了项目外面,独立于tomcat,所以我们要在tomcat的server.xml文件中设置虚拟路径,如下在<Host></Host>节点中添加如下代码:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <Context docBase="d:/lyz/static" path="/upload" reloadable="true"/>  
此处的docBase与applications.properties文件中的lyz.uploading.url一致,path与applications.properties文件中的lyz.visit.url一致。

如下图所示:


至此,我们完成了整个项目的开发,下面我们来运行这个项目

四、运行测试

我们将项目发布到tomcat,在浏览器地址栏输入http://127.0.0.1:8099/ueditor/index/page,原因是我将tomcat端口设置为8099,


此时,查看我的图片保存路径d:/lyz/static


没有任何图片。那现在我们编辑图片吧。如下图,我在UEditor中编辑了一张图片:


我们再打开d:/lyz/static目录:



图片已经上传到我们的指定的配置目录中了。

至此整个工程创建运行结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值