📄 fckeditorconnectorservlet.java
字号:
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2005 Frederico Caldeira Knabben
*
* Licensed under the terms of the GNU Lesser General Public License:
* http://www.opensource.org/licenses/lgpl-license.php
*
* For further information visit:
* http://www.fckeditor.net/
*
* File Name: ConnectorServlet.java
* Java Connector for Resource Manager class.
*
* Version: 2.3
* Modified: 2005-08-11 16:29:00
*
* File Authors:
* Simone Chiaretta (simo@users.sourceforge.net)
*/
package com.ntsky.bbs.web.fckeditor;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.log4j.Logger;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import com.ntsky.framework.util.FileUtil;
import com.ntsky.framework.util.HttpUtil;
import com.ntsky.bbs.Symbols;
import com.ntsky.bbs.domain.Attachment;
import com.ntsky.bbs.domain.Role;
import com.ntsky.bbs.domain.User;
import com.ntsky.bbs.exception.ServiceException;
import com.ntsky.bbs.service.AttachmentService;
import com.ntsky.bbs.service.UserService;
import com.ntsky.bbs.util.BeanFactory;
import com.ntsky.bbs.util.memory.RoleSingleton;
/**
* Servlet to upload and browse files.<br>
*
* This servlet accepts 4 commands used to retrieve and create files and folders
* from a server directory. The allowed commands are:
* <ul>
* <li>GetFolders: Retrive the list of directory under the current folder
* <li>GetFoldersAndFiles: Retrive the list of files and directory under the
* current folder
* <li>CreateFolder: Create a new directory under the current folder
* <li>FileUpload: Send a new file to the server (must be sent with a POST)
* </ul>
*
* @author ntsky
*/
public class FCKeditorConnectorServlet extends HttpServlet {
private final static Logger logger = Logger.getLogger(FCKeditorConnectorServlet.class);
private static String baseDir;
private static Hashtable allowedExtensions;
private static Hashtable deniedExtensions;
private static boolean debug = false;
/**
* Initialize the servlet.<br>
* Retrieve from the servlet configuration the "baseDir" which is the root
* of the file repository:<br>
* If not specified the value of "/UserFiles/" will be used.
*
*/
public void init() throws ServletException {
baseDir = getInitParameter("baseDir");
debug = (new Boolean(getInitParameter("debug"))).booleanValue();
if (baseDir == null)
baseDir = "/UserFiles/";
String realBaseDir = getServletContext().getRealPath(baseDir);
File baseFile = new File(realBaseDir);
if (!baseFile.exists()) {
baseFile.mkdir();
}
allowedExtensions = new Hashtable(3);
deniedExtensions = new Hashtable(3);
allowedExtensions.put("File",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsFile")));
deniedExtensions.put("File",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsFile")));
allowedExtensions.put("Image",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsImage")));
deniedExtensions.put("Image",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsImage")));
allowedExtensions.put("Flash",FckeditorUtil.stringToArrayList(getInitParameter("AllowedExtensionsFlash")));
deniedExtensions.put("Flash",FckeditorUtil.stringToArrayList(getInitParameter("DeniedExtensionsFlash")));
}
/**
* Manage the Get requests (GetFolders, GetFoldersAndFiles, CreateFolder).<br>
*
* The servlet accepts commands sent in the following format:<br>
* connector?Command=CommandName&Type=ResourceType&CurrentFolder=FolderPath<br>
* <br>
* It execute the command and then return the results to the client in XML
* format.
*
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (debug)
System.out.println("--- BEGIN DOGET ---");
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
String commandStr = request.getParameter("Command");
String typeStr = request.getParameter("Type");
String currentFolderStr = request.getParameter("CurrentFolder");
// edit begin +++++++++++++++++
User user = (User) HttpUtil.getAttribute(request.getSession(),
Symbols.SESSION_USER);
String userId = null;
if (debug)
System.out.println("user is null : " + (user == null));
if (user == null) {
userId = HttpUtil.getCookieValue(request, Symbols.COOKIE_FCKEDITOR);
if(userId == null){
logger.debug("Guest 用户列表文件 ...");
}
} else {
userId = user.getId().toString();
}
if (debug)
System.out.println("get user id from cookie and userId value is : "
+ userId);
/*
* String currentPath=baseDir+typeStr+currentFolderStr; String
* currentDirPath=getServletContext().getRealPath(currentPath);
*/
String currentPath = baseDir + userId + "/" + typeStr
+ currentFolderStr;
String currentDirPath = getServletContext().getRealPath(currentPath);
// create user dir
FileUtil.makeDirectory(getServletContext().getRealPath("/"),
currentPath);
// edit end ++++++++++++++++
File currentDir = new File(currentDirPath);
/*
* if(!currentDir.exists()){ currentDir.mkdir(); }
*/
Document document = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.newDocument();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
}
Node root = CreateCommonXml(document, commandStr, typeStr,
currentFolderStr, request.getContextPath() + currentPath);
if (debug)
System.out.println("Command = " + commandStr);
if (commandStr.equals("GetFolders")) {
getFolders(currentDir, root, document);
} else if (commandStr.equals("GetFoldersAndFiles")) {
getFolders(currentDir, root, document);
getFiles(currentDir, root, document);
} else if (commandStr.equals("CreateFolder")) {
String newFolderStr = request.getParameter("NewFolderName");
File newFolder = new File(currentDir, newFolderStr);
String retValue = "110";
if (newFolder.exists()) {
retValue = "101";
} else {
try {
boolean dirCreated = newFolder.mkdir();
if (dirCreated)
retValue = "0";
else
retValue = "102";
} catch (SecurityException sex) {
retValue = "103";
}
}
setCreateFolderResponse(retValue, root, document);
}
document.getDocumentElement().normalize();
try {
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
if (debug) {
StreamResult dbgResult = new StreamResult(System.out);
transformer.transform(source, dbgResult);
System.out.println("");
System.out.println("--- END DOGET ---");
}
} catch (Exception ex) {
ex.printStackTrace();
}
out.flush();
out.close();
}
/**
* Manage the Post requests (FileUpload).<br>
*
* The servlet accepts commands sent in the following format:<br>
* connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath<br>
* <br>
* It store the file (renaming it in case a file with the same name exists)
* and then return an HTML file with a javascript command in it.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -