struts2+ckeditor+ckfinder实现文件的上传、从数据库获取数据、修改并提交到数据库中保存
来源:互联网 发布:tomcat软件架构 编辑:程序博客网 时间:2024/05/06 04:56
示例下载地址:http://download.csdn.net/detail/lin062854/7116033
第一步:工具下载
首先下载struts2
下载地址:http://struts.apache.org/download.cgi#struts2315-SNAPSHOT
第二下载:CKEditor
下载地址:http://ckeditor.com/download (最新版本ckeditor 4.1.2)
第三下载:CKFinder
下载地址:http://cksource.com/ckfinder/download (最新版本ckfinder 2.3.1)
第二步:新建项目
打开myeclipse -->File --> New -->Web Project
项目名:ThreeGorgesSoulSystem
第三步:整合
首先解压:struts-2.3.14.2-all.zip,然后拷贝最小安装包放在WEB-INF/lib下:
在struts-2.3.14.2\apps打开struts2-blank.war,在WEB-INF\src\java下,拷贝struts.xml到classpath(src)下
编辑WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>struts2</filter-name> <!-- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> --> <filter-class>com.orange.web.filter.FCKFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list></web-app>
解压ckeditor_ckeditor_4.1.2_full.zip,然后将ckeditor文件夹全部拷到WebRoot根目录下。
修改ckeditor文件下的config.js文件,代码如下:
/*Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.For licensing, see LICENSE.html or http://ckeditor.com/license*/CKEDITOR.editorConfig = function (config) { // Define changes to default configuration here. For example: // config.language = 'fr'; // config.uiColor = '#AADC6E'; //CKFinder.SetupCKEditor(null, '../ckfinder/'); //注意ckfinder的路径对应实际放置的位置 config.skin = 'v2'; // 皮肤 //config.uiColor = '#FFF'; // 皮肤背景颜色 //config.resize_enabled = false; // 取消 “拖拽以改变尺寸”功能 config.language = 'zh-cn'; //配置语言 config.font_names = '宋体;楷体_GB2312;新宋体;黑体;隶书;幼圆;微软雅黑;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana'; // 字体 config.width = 1000; //宽度 config.height = 450; //高度 //config.toolbar = "Basic"; // 基础工具栏 config.toolbar = "Full"; // 全能工具栏 // 自定义工具栏 config.toolbar_Full = [ ['Source', '-', 'Preview', '-', 'Templates'], ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Print', 'SpellChecker', 'Scayt'], ['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'], ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'], '/', ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript'], ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote', 'CreateDiv'], ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], ['Link', 'Unlink', 'Anchor'], ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak'], '/', ['Styles', 'Format', 'Font', 'FontSize'], ['TextColor', 'BGColor'], ['Maximize', 'ShowBlocks', '-', 'About'] ]; config.toolbar_Basic = [ ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink', '-', 'About'] ]; /*** 文件上传功能的配置----------------------- */config.filebrowserBrowseUrl = 'ckfinder/ckfinder.html'; config.filebrowserImageBrowseUrl = 'ckfinder/ckfinder.html?type=Images'; config.filebrowserFlashBrowseUrl = 'ckfinder/ckfinder.html?type=Flash'; config.filebrowserUploadUrl = 'ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Files'; config.filebrowserImageUploadUrl = 'ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Images'; config.filebrowserFlashUploadUrl = 'ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Flash';//---------------------------文件上传功能的配置结束--------};
接着解压:ckfinder_java_2.3.1.zip,在ckfinder目录下再解压CKFinderJava.war,将CKFinderJava下的ckfinder文件夹拷贝到WebRoot根目录下,目录结构如下图:
接着把config.xml拷贝到WEB-INF/下
配置config.xml文件:
<config><!-- 开启上传功能,如果为false为提示:因为安全原因,文件不可浏览. 请联系系统管理员并检查CKFinder配置文件. 并且默认你是是为false的 --><enabled>true</enabled><!-- 文件存放的地址 /ckfinder/userfiles/ (自动创建) --><baseURL>/ThreeGorgesSoulSystem/upload/</baseURL><!--检查双扩展名 --><checkDoubleExtension>true</checkDoubleExtension><!-- 在缩放后检查大小 --><checkSizeAfterScaling>true</checkSizeAfterScaling><!-- 配置路径以及格式 --><types><type name="Files"><url>%BASE_URL%files/</url><directory>%BASE_DIR%files</directory><maxSize>0</maxSize><allowedExtensions>7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip</allowedExtensions><deniedExtensions></deniedExtensions></type><type name="Images"><url>%BASE_URL%images/</url><directory>%BASE_DIR%images</directory><maxSize>0</maxSize><allowedExtensions>bmp,gif,jpeg,jpg,png</allowedExtensions><deniedExtensions></deniedExtensions></type><type name="Flash"><url>%BASE_URL%flash/</url><directory>%BASE_DIR%flash</directory><maxSize>0</maxSize><allowedExtensions>swf,flv</allowedExtensions><deniedExtensions></deniedExtensions></type></types><!-- 可允许的操作 --><accessControls><accessControl><role>*</role><resourceType>*</resourceType><folder>/</folder><folderView>true</folderView><folderCreate>true</folderCreate><folderRename>true</folderRename><folderDelete>true</folderDelete><fileView>true</fileView><fileUpload>true</fileUpload><fileRename>true</fileRename><fileDelete>true</fileDelete></accessControl></accessControls><thumbs><enabled>true</enabled><url>%BASE_URL%_thumbs/</url><directory>%BASE_DIR%_thumbs</directory><directAccess>false</directAccess><maxHeight>100</maxHeight><maxWidth>100</maxWidth><quality>80</quality></thumbs><!-- 图片浏览——图片缩略图 --><plugins><plugin><name>imageresize</name><class>com.ckfinder.connector.plugins.ImageResize</class><params><param name="smallThumb" value="90x90"></param><param name="mediumThumb" value="120x120"></param><param name="largeThumb" value="180x180"></param></params></plugin><plugin><name>fileeditor</name><class>com.ckfinder.connector.plugins.FileEditor</class><params></params></plugin></plugins><basePathBuilderImpl>com.ckfinder.connector.configuration.ConfigurationPathBuilder</basePathBuilderImpl></config>
在配置web.xml文件中添加ckeditor+ckfinder配置信息
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>struts2</filter-name> <!-- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> --> <filter-class>com.orange.web.filter.FCKFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- =================ckeditor+ckfinder图片上传功能的配置=================== --> <servlet> <!-- servlet的命 名===注册名称,这个名称可以任意的 --><servlet-name>ConnectorServlet</servlet-name><!-- servlet 所在包 --><servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class><init-param><!-- 初始化设置 --><param-name>XMLConfig</param-name><param-value>/WEB-INF/config.xml</param-value></init-param><init-param><!-- 设置是否可以查看debug,在正常时候需要设置为false. --><param-name>debug</param-name><param-value>false</param-value></init-param><!-- load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。在此不是必须的 --><load-on-startup>1</load-on-startup></servlet><!-- 映射的相对路径,主要是在其他地方使用,比如js,页面访问 --><servlet-mapping><servlet-name>ConnectorServlet</servlet-name><url-pattern>/ckfinder/core/connector/java/connector.java</url-pattern></servlet-mapping><!-- =================ckeditor+ckfinder图片上传功能的配置结束=================== --> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list></web-app>
注:1.将ckfinder中的_samples文件夹直接删除
2.如果jquery.min.js出错,是因为采用了压缩的jquery库,不被识别,在http://jquery.com/download/下载
点击链接,把jQuery2.0.2中的代码直接替换项目中jquery.min.js中的代码
第四步:java代码和页面
action层中的代码:
package com.orange.web.action;import java.sql.SQLException;import com.orange.domain.Classify;import com.orange.domain.Menu;import com.orange.service.ClassifyService;import com.orange.service.MenuService;import com.orange.service.impl.ClassifyServiceImpl;import com.orange.service.impl.MenuServiceImpl;public class ClassifyAction {/** * menuId */private int menuId;/** * 分类信息 */private Classify classify;/** * 获取文本域中的内容(ckeditor中textared内容) */private String editor1;/** * 简介 */private Classify intro;/** * 文化 */private Classify cultural;/** * 精神 */private Classify spirit;/** * 旅游 */private Classify tourism;private ClassifyService classifyService = new ClassifyServiceImpl();private MenuService menuService = new MenuServiceImpl();public String listToMenuId() {try {classify = classifyService.listToMenuId(menuId);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "listToMenuId";}public String updateClassify(){Menu menu = new Menu();try {menu = menuService.listMenu(menuId);classify.setMenu(menu);classify.setClassifyContent(editor1);classifyService.updateClassify(classify);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return initalize();}public String initalize() {try {intro = classifyService.listToMenuId(11000);cultural = classifyService.listToMenuId(21000);spirit = classifyService.listToMenuId(31000);tourism = classifyService.listToMenuId(41000);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "threegorgessoul";}public int getMenuId() {return menuId;}public void setMenuId(int menuId) {this.menuId = menuId;}public Classify getClassify() {return classify;}public void setClassify(Classify classify) {this.classify = classify;}public String getEditor1() {return editor1;}public void setEditor1(String editor1) {this.editor1 = editor1;}public Classify getIntro() {return intro;}public void setIntro(Classify intro) {this.intro = intro;}public Classify getCultural() {return cultural;}public void setCultural(Classify cultural) {this.cultural = cultural;}public Classify getSpirit() {return spirit;}public void setSpirit(Classify spirit) {this.spirit = spirit;}public Classify getTourism() {return tourism;}public void setTourism(Classify tourism) {this.tourism = tourism;}}
service层:
package com.orange.service.impl;import java.sql.SQLException;import java.util.List;import com.orange.dao.ClassifyDao;import com.orange.dao.impl.ClassifyDaoImpl;import com.orange.domain.Classify;import com.orange.service.ClassifyService;public class ClassifyServiceImpl implements ClassifyService {private ClassifyDao classifyDao = new ClassifyDaoImpl();/** * 添加分类 * * @param classify * @throws SQLException */public void addClassify(Classify classify) throws SQLException {classifyDao.addClassify(classify);}/** * 修改评论 * * @param classify * @throws SQLException */public void updateClassify(Classify classify) throws SQLException {classifyDao.updateClassify(classify);}/** * 删除评论 * * @param classify_Id * @throws SQLException */public void deleteClassify(int classifyId) throws SQLException {classifyDao.deleteClassify(classifyId);}/** * 根据id查看评论 * * @param classify_Id * @return * @throws SQLException */public Classify listClassify(int classifyId) throws SQLException {return classifyDao.listClassify(classifyId);}/** * 根据menuId查看评论 * * @param classify_Id * @return * @throws SQLException */public Classify listToMenuId(int menuId) throws SQLException {return classifyDao.listToMenuId(menuId);}/** * 查看所有评论信息 * * @return * @throws SQLException */public List<Classify> listAllClassify() throws SQLException {return classifyDao.listAllClassify();}/** * 查询从page条数据开始,总控查询rows条记录 * * @param page * @param rows * @return * @throws SQLException */public List<Classify> listAllClassify(int page, int rows)throws SQLException {return classifyDao.listAllClassify(page, rows);}/** * 查询数据库中得所有记录数据 * * @return * @throws SQLException */public int getCount() throws SQLException {return classifyDao.getCount();}}
dao层:
package com.orange.dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import com.orange.common.DataBaseUtils;import com.orange.dao.ClassifyDao;import com.orange.domain.Classify;import com.orange.domain.Menu;public class ClassifyDaoImpl implements ClassifyDao {Classify classify = new Classify();public void addClassify(Classify classify) throws SQLException {String sql = "insert into t_classify(classify_title,classify_content,menu_id) values(?, ?, ?)";Object[] params = {classify.getClassifyTitle(),classify.getClassifyContent(), classify.getMenu().getMenuId()};DataBaseUtils.executeUpdate(sql, params);}public void updateClassify(Classify classify) throws SQLException {String sql = "update t_classify set classify_title=?,classify_content=?,menu_id=? where classify_id = ?";Object[] params = { classify.getClassifyTitle(),classify.getClassifyContent(), classify.getMenu().getMenuId(),classify.getClassifyId() };DataBaseUtils.executeUpdate(sql, params);}public void deleteClassify(int classifyId) throws SQLException {String sql = "delete from t_classify where classify_Id=?";Object[] params = { classifyId };DataBaseUtils.executeUpdate(sql, params);}public Classify listClassify(int classifyId) throws SQLException {Classify classify = null;Connection conn = null;PreparedStatement pst = null;ResultSet res = null;try {conn = DataBaseUtils.getConnection();pst = conn.prepareStatement("SELECT " +"c.classify_id,c.classify_title,c.classify_content,c.menu_id, " +"m.menu_id,m.menu_name,m.model_id " +" FROM " +"t_classify AS c , " +"t_menu AS m " +" WHERE " +"c.menu_id = m.menu_id AND " +"c.classify_id = ?");pst.setInt(1, classifyId);res = pst.executeQuery();if (res.next()) {classify = new Classify();classify.setClassifyId(res.getInt("classify_Id"));classify.setClassifyTitle(res.getString("classify_title"));classify.setClassifyContent(res.getString("classify_content"));Menu menu = new Menu();menu.setMenuId(res.getInt("menu_id"));menu.setMenuName(res.getString("menu_name"));menu.setModel(null);classify.setMenu(menu);}} finally {DataBaseUtils.close(conn, pst, res);}return classify;}/** * 根据menuId查看评论 * * @param classify_Id * @return * @throws SQLException */public Classify listToMenuId(int menuId) throws SQLException {Classify classify = null;Connection conn = null;PreparedStatement pst = null;ResultSet res = null;try {conn = DataBaseUtils.getConnection();pst = conn.prepareStatement("SELECT " +"c.classify_id,c.classify_title,c.classify_content,c.menu_id, " +"m.menu_id,m.menu_name,m.model_id " +" FROM " +"t_classify AS c , " +"t_menu AS m " +" WHERE " +"c.menu_id = m.menu_id AND " +"c.menu_id = ?");pst.setInt(1, menuId);res = pst.executeQuery();if (res.next()) {classify = new Classify();classify.setClassifyId(res.getInt("classify_Id"));classify.setClassifyTitle(res.getString("classify_title"));classify.setClassifyContent(res.getString("classify_content"));Menu menu = new Menu();menu.setMenuId(res.getInt("menu_id"));menu.setMenuName(res.getString("menu_name"));menu.setModel(null);classify.setMenu(menu);}} finally {DataBaseUtils.close(conn, pst, res);}return classify;}public List<Classify> listAllClassify() throws SQLException {List<Classify> classifys = new LinkedList<Classify>();Connection conn = null;PreparedStatement pst = null;ResultSet res = null;try {conn = DataBaseUtils.getConnection();pst = conn.prepareStatement("SELECT c.classify_id,c.classify_title,c.classify_content,c.menu_id,m.menu_id,m.menu_name,m.model_id FROMt_classify AS c ,t_menu AS m WHERE c.menu_id = m.model_id");res = pst.executeQuery();while (res.next()) {classify = new Classify();classify.setClassifyId(res.getInt("classify_Id"));classify.setClassifyTitle(res.getString("classify_title"));classify.setClassifyContent(res.getString("classify_content"));Menu menu = new Menu();menu.setMenuId(res.getInt("menu_id"));menu.setMenuName(res.getString("menu_name"));menu.setModel(null);classify.setMenu(menu);}} finally {DataBaseUtils.close(conn, pst, res);}return classifys;}public List<Classify> listAllClassify(int page, int rows)throws SQLException {Connection conn = null;PreparedStatement pst = null;ResultSet res = null;List<Classify> classifys = new ArrayList<Classify>();try {// 连接数据库conn = DataBaseUtils.getConnection();// 创建sql执行器pst = conn.prepareStatement("SELECT c.classify_id,c.classify_title,c.classify_content,c.menu_id,m.menu_id,m.menu_name,m.model_id FROMt_classify AS c ,t_menu AS m WHERE c.menu_id = m.model_id");pst.setInt(1, (page - 1) * rows);pst.setInt(2, rows);// 执行sql语句res = pst.executeQuery();while (res.next()) {Classify classify = new Classify();classify = new Classify();classify.setClassifyId(res.getInt("classify_Id"));classify.setClassifyTitle(res.getString("classify_title"));classify.setClassifyContent(res.getString("classify_content"));Menu menu = new Menu();menu.setMenuId(res.getInt("menu_id"));menu.setMenuName(res.getString("menu_name"));menu.setModel(null);classify.setMenu(menu);classifys.add(classify);}} finally {DataBaseUtils.close(conn, pst, res);}return classifys;}public int getCount() throws SQLException {Connection conn = null;PreparedStatement pst = null;ResultSet res = null;int count = -1;conn = DataBaseUtils.getConnection();pst = conn.prepareStatement("select count(0) as count from t_classify");res = pst.executeQuery();res.next();count = res.getInt(1);return count;}}
连接数据库信息:
package com.orange.common;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DataBaseUtils {public static Connection getConnection() throws SQLException {try {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/threegorgessouldb", "root", "123456");return conn;} catch (ClassNotFoundException e) {e.printStackTrace();throw new SQLException("没有找到驱动包");}}public static void close(Connection conn, PreparedStatement pst, ResultSet res) throws SQLException {if(res != null) {res.close();}if(pst != null) {pst.close();}if(conn != null) {conn.close();}}public static void executeUpdate(String sql, Object[] params) throws SQLException {Connection conn = null;PreparedStatement pst = null;try {conn = DataBaseUtils.getConnection();pst = conn.prepareStatement(sql);for(int i=0;i<params.length;i++) {pst.setObject(i + 1, params[i]);}pst.executeUpdate();System.out.println(sql);} finally {DataBaseUtils.close(conn, pst, null);}}}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'left.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <a href="ClassifyAction!listToMenuId?menuId=11000">三峡简介</a><br> <a href="ClassifyAction!listToMenuId?menuId=21000">三峡文化</a><br> <a href="ClassifyAction!listToMenuId?menuId=31000">三峡精神</a><br> <a href="ClassifyAction!listToMenuId?menuId=41000">三峡景点</a><br> </body></html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="ckeditor/ckeditor.js"></script><script type="text/javascript" src="ckfinder/ckfinder.js"></script> </head> <body> <form id="form1" name="form1" action="ClassifyAction!updateClassify" method="post" > <input type="hidden" name="classify.classifyId" value="${classify.classifyId }"/> <input type="hidden" name="classify.classifyTitle" value="${classify.classifyTitle }" /> <input type="hidden" name="menuId" value="${classify.menu.menuId }" /> <table width="650" height="450" border="0" align="center"> <tr> <td valign="top"> 内容: </td> <td> <textarea id="editor1" name="editor1" class="ckeditor"><p>${classify.classifyContent}. </p></textarea> <script type="text/javascript"> CKEDITOR.replace( 'editor1' ); </script> </td> </tr> <tr> <td></td> <td> <input type="submit" name="Submit" value="提交" /> <input type="reset" name="Reset" value="重置" /> </td> </tr> </table> </form> </body></html>
第五步:
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
package com.orange.web.filter;import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.dispatcher.FilterDispatcher;@SuppressWarnings("deprecation") public class FCKFilter extends FilterDispatcher { public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String URI = request.getRequestURI(); String[] uriArray = URI.split("/ckfinder/core/connector/java/*/"); int arrayLen = uriArray.length; if (arrayLen >= 2) { chain.doFilter(req, res); }else { super.doFilter(req, res, chain); } } }
示例下载地址:http://download.csdn.net/detail/lin062854/7116033
- struts2+ckeditor+ckfinder实现文件的上传、从数据库获取数据、修改并提交到数据库中保存
- struts2+ckeditor+ckfinder实现文件的上传、从数据库获取数据、修改并提交到数据库中保存
- CKEditor,CKFinder实现文件上传
- struts2整合CKEditor和CKFinder实现上传
- struts2整合CKEditor和CKFinder实现上传
- C#--Winfrom-UI中封装数据并提交到数据库
- 在数据库中保存数据
- ckeditor 与 ckfinder基于Struts2 集成实现在线编辑以及文件上传(JAVA版)
- 采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件
- Tapestry 怎样从数据库中保存的图片显示出来。
- struts2下使用ckeditor集成ckfinder无法上传文件的解决方法
- 类型转换和获取XML文件中保存的数据
- 如何在数据库中保存不同类型的文件
- 在 SQL 数据库中保存数据
- Android 在 SQL 数据库中保存数据
- Oracle数据库中保存文件(C#)
- CKEditor与CKFinder整合并实现文件上传功能
- CKEditor 整合CKFinder实现文件上传及富文本操作
- Using Xcode to Test Location Services
- poj 1011 sticks
- POJ 1661 HELP JIMMY 动态规划
- NULL
- EOJ 1084 一条直线上?
- struts2+ckeditor+ckfinder实现文件的上传、从数据库获取数据、修改并提交到数据库中保存
- Objective-C 语言入门教程
- WIFI & BLUETOOTH
- 个人版—叨叨叨
- C++ 入門指南 - QGridLayout
- 了解txtsetup.sif配置 巧装SATA驱动&系统收藏
- C语言里的左移和右移运算
- NEU 1010: NEW RDSP MODE I 数论 每次将交换把偶数位的拖到前面,奇数位的拖到最后面
- python+Selenium2+chrome构建动态网页爬虫工具