JavaWeb项目开发案例精粹-第4章博客网站系统-002辅助类及配置文件

时间:2023-03-09 05:11:15
JavaWeb项目开发案例精粹-第4章博客网站系统-002辅助类及配置文件

1.

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>
com.sanqing.fckeditor.ConnectorServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>
/user/fckeditor/editor/filemanager/connectors/*
</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping> <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
</web-app>

2.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 定义数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/db_blog</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1234</value>
</property>
</bean> <!-- 定义SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/sanqing/po/User.hbm.xml</value>
<value>com/sanqing/po/Article.hbm.xml</value>
<value>com/sanqing/po/BlogInfo.hbm.xml</value>
<value>com/sanqing/po/Critique.hbm.xml</value>
<value>com/sanqing/po/Dianjiliang.hbm.xml</value>
</list>
</property>
</bean> <!-- 定义HibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean> <!-- 配置DAO组件 -->
<bean id="userDAO" class="com.sanqing.dao.UserDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean> <!-- 配置业务逻辑组件 -->
<bean id="userService" class="com.sanqing.service.UserServiceImpl">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean> <!-- 配置RegisterAction -->
<bean id="registerAction" class="com.sanqing.action.Register" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean> <!-- 配置LoginAction -->
<bean id="loginAction" class="com.sanqing.action.Login" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean> <!-- 配置DAO组件 -->
<bean id="blogInfoDAO" class="com.sanqing.dao.BlogInfoDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean> <!-- 配置业务逻辑组件 -->
<bean id="blogInfoService" class="com.sanqing.service.BlogInfoServiceImpl">
<property name="blogInfoDAO">
<ref bean="blogInfoDAO"/>
</property>
</bean> <!-- 配置EditBlogInfo Action -->
<bean id="editeBlogInfo" class="com.sanqing.action.EditBlogInfo" scope="prototype">
<property name="blogInfoService">
<ref bean="blogInfoService"/>
</property>
</bean> <!-- 配置GetBlogInfo Action -->
<bean id="GetBlogInfo" class="com.sanqing.action.GetBlogInfo" scope="prototype">
<property name="blogInfoService">
<ref bean="blogInfoService"/>
</property>
</bean> <!-- 配置ArticleDAO -->
<bean id="articleDAO" class="com.sanqing.dao.ArticleDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean> <!-- 配置ArticleService -->
<bean id="articleService" class="com.sanqing.service.ArticleServiceImpl">
<property name="articleDAO">
<ref bean="articleDAO"/>
</property>
<property name="critiqueDAO">
<ref bean="critiqueDAO"/>
</property>
</bean> <!-- AddArticle Action -->
<bean id="addArticle" class="com.sanqing.action.AddArticle" scope="prototype">
<property name="articleService">
<ref bean="articleService"/>
</property>
</bean> <!-- ShowUserAllArticle Action -->
<bean id="showUserAllArticle" class="com.sanqing.action.ShowUserAllArticle" scope="prototype">
<property name="articleService">
<ref bean="articleService"/>
</property>
</bean> <!-- ShowAllArticle Action -->
<bean id="showAllArticle" class="com.sanqing.action.ShowAllArticle" scope="prototype">
<property name="articleService">
<ref bean="articleService"/>
</property>
</bean> <!-- 配置dianjiliangDAO -->
<bean id="dianjiliangDAO" class="com.sanqing.dao.DianjiliangDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean> <!-- 配置dianjiliangService -->
<bean id="dianjiliangService" class="com.sanqing.service.DianjiliangServiceImpl">
<property name="dianjiliangDAO">
<ref bean="dianjiliangDAO"/>
</property>
</bean> <!-- 配置critiqueDAO -->
<bean id="critiqueDAO" class="com.sanqing.dao.CritiqueDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean> <!-- 配置critiqueService -->
<bean id="critiqueService" class="com.sanqing.service.CritiqueServiceImpl">
<property name="critiqueDAO">
<ref bean="critiqueDAO"/>
</property>
</bean> <!-- AddCritique Action -->
<bean id="addCritique" class="com.sanqing.action.AddCritique" scope="prototype">
<property name="critiqueService">
<ref bean="critiqueService"/>
</property>
</bean> <!-- ShowArticle Action -->
<bean id="showArticle" class="com.sanqing.action.ShowArticle" scope="prototype">
<property name="articleService">
<ref bean="articleService"/>
</property>
<property name="dianjiliangService">
<ref bean="dianjiliangService"/>
</property>
<property name="critiqueService">
<ref bean="critiqueService"/>
</property>
<property name="blogInfoService">
<ref bean="blogInfoService"/>
</property>
</bean> <!-- ShowRss Action -->
<bean id="showRSS" class="com.sanqing.action.ShowRSS" scope="prototype">
<property name="articleService">
<ref bean="articleService"/>
</property>
</bean>
</beans>

3.

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

 <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<constant name="struts.i18n.encoding" value="gb2312"></constant>
<constant name="struts.custom.i18n.resources" value="myMessage"></constant>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="userInterceptor" class="com.sanqing.interceptor.UserInterceptor"></interceptor>
</interceptors> <action name="register" class="registerAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/register.jsp</result>
</action> <action name="login" class="loginAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/login.jsp</result>
</action> <action name="editBlogInfo" class="editeBlogInfo">
<result name="success" type="chain">getBlogInfo</result>
<result name="error">/error.jsp</result>
<result name="input">/user/editbloginfo.jsp</result>
</action> <action name="getBlogInfo" class="GetBlogInfo">
<result name="success">/user/editbloginfo.jsp</result>
<result name="error">/error.jsp</result>
</action> <action name="addArticle" class="addArticle">
<result name="success" type="chain">showUserAllArticle</result>
<result name="error">/error.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<interceptor-ref name="userInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> <action name="showUserAllArticle" class="showUserAllArticle">
<result name="success">/user/showUserAllArticle.jsp</result>
</action> <action name="showAllArticle" class="showAllArticle">
<result name="success">/showAllArticle.jsp</result>
</action> <action name="showArticle" class="showArticle">
<result name="success">/user/showArticle.jsp</result>
</action> <action name="addCritique" class="addCritique">
<result name="success" type="chain">showArticle</result>
</action> <action name="photoUpload" class="com.sanqing.action.PhotoUpload">
<result name="success" type="chain">showPhoto</result>
<result name="input">/user/showphoto.jsp</result>
<!-- 配置fileUpload拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传文件类型 -->
<param name="allowedTypes">image/bmp,image/pjpeg,image/gif,image/png</param>
<!-- 配置允许上传文件大小最大值 -->
<param name="maximumSize">512000</param>
</interceptor-ref>
<result name="login" type="redirect">/login.jsp</result>
<interceptor-ref name="userInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> <action name="showPhoto" class="com.sanqing.action.ShowPhoto">
<result name="success">/user/showphoto.jsp</result>
</action> <action name="showRSS" class="showRSS">
<result name="success">/rss.xml</result>
</action>
</package>
</struts>

4.fckeditor.properties

 connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
connector.userPathBuilderImpl=com.fckeditor.fckeditor.MyUserPath

5.myMessage.properties

 struts.messages.error.content.type.not.allowed =\u4E0D\u5141\u8BB8\u4E0A\u4F20\u7684\u6587\u4EF6

6.rss.xml

 <?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"> <channel>
<title>北风博客网</title>
<link>http://localhost:8080/BFblogDemo07/login.jsp</link>
<description>专注于IT培训</description>
<item>
<title>测试RSS</title>
<link>http://localhost:8080/BFblogDemo07/login.jsp</link>
<description>测试RSS,成功</description>
<author>lifengxing</author>
<pubDate>Thu, 19 Mar 2009 02:46:00 GMT</pubDate>
</item>
</channel>
</rss>

7.

 package com.sanqing.interceptor;

 import java.util.Map;

 import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class UserInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context =invocation.getInvocationContext();
//获得session
Map session = context.getContext().getSession();
String username = (String) session.get("username");
//判断用户合法性
if(username == null || "".equals(username)) {
//返回用户登陆页面
return Action.LOGIN;
} else {
//进行下一步操作,没有拦截
return invocation.invoke();
}
} }

8.

 package com.sanqing.fckeditor;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import net.fckeditor.requestcycle.UserPathBuilder; public class MyUserPath implements UserPathBuilder { public String getUserFilesPath(HttpServletRequest request) {
//返回一个路径,这个路径就是用户的目录
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
return "/userfiles/" + username;
} }

9.

 /*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*/
package com.sanqing.fckeditor; import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import net.fckeditor.connector.Messages;
import net.fckeditor.handlers.CommandHandler;
import net.fckeditor.handlers.ConnectorHandler;
import net.fckeditor.handlers.ExtensionsHandler;
import net.fckeditor.handlers.RequestCycleHandler;
import net.fckeditor.handlers.ResourceTypeHandler;
import net.fckeditor.response.UploadResponse;
import net.fckeditor.response.XmlResponse;
import net.fckeditor.tool.Utils;
import net.fckeditor.tool.UtilsFile;
import net.fckeditor.tool.UtilsResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Servlet to upload and browse files.<br />
*
* This servlet accepts 4 commands which interact with the server-side
* filesystem.<br />
* The allowed commands are:
* <ul>
* <li><code>GetFolders</code>: Retrieves a list of folders in the current
* folder</li>
* <li><code>GetFoldersAndFiles</code>: Retrives a list of files and folders
* in the current folder</li>
* <li><code>CreateFolder</code>: Creates a new folder in the current folder</li>
* <li><code>FileUpload</code>: Stores an uploaded file into the current
* folder. (must be sent with POST)</li>
* </ul>
*
* @version $Id: ConnectorServlet.java 2101 2008-06-22 22:00:48Z mosipov $
*/
public class ConnectorServlet extends HttpServlet { private static final long serialVersionUID = -5742008970929377161L;
private static final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class); /**
* Initialize the servlet: <code>mkdir</code> &lt;DefaultUserFilesPath&gt;
*/
public void init() throws ServletException, IllegalArgumentException {
String realDefaultUserFilesPath = getServletContext().getRealPath(
ConnectorHandler.getDefaultUserFilesPath()); File defaultUserFilesDir = new File(realDefaultUserFilesPath);
UtilsFile.checkDirAndCreate(defaultUserFilesDir); logger.info("ConnectorServlet successfully initialized!");
} /**
* Manage the <code>GET</code> requests (<code>GetFolders</code>,
* <code>GetFoldersAndFiles</code>, <code>CreateFolder</code>).<br/>
*
* The servlet accepts commands sent in the following format:<br/>
* <code>connector?Command=&lt;CommandName&gt;&Type=&lt;ResourceType&gt;&CurrentFolder=&lt;FolderPath&gt;</code>
* <p>
* It executes the commands and then returns the result to the client in XML
* format.
* </p>
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("Entering ConnectorServlet#doGet"); response.setCharacterEncoding("UTF-8");
response.setContentType("application/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"); logger.debug("Parameter Command: {}", commandStr);
logger.debug("Parameter Type: {}", typeStr);
logger.debug("Parameter CurrentFolder: {}", currentFolderStr); XmlResponse xr; if (!RequestCycleHandler.isEnabledForFileBrowsing(request))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.NOT_AUTHORIZED_FOR_BROWSING);
else if (!CommandHandler.isValidForGet(commandStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_COMMAND);
else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_TYPE);
else if (!UtilsFile.isValidPath(currentFolderStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_CURRENT_FOLDER);
else {
CommandHandler command = CommandHandler.getCommand(commandStr);
ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr); String typePath = UtilsFile.constructServerSidePath(request, resourceType);
String typeDirPath = getServletContext().getRealPath(typePath); File typeDir = new File(typeDirPath);
UtilsFile.checkDirAndCreate(typeDir); File currentDir = new File(typeDir, currentFolderStr); if (!currentDir.exists())
xr = new XmlResponse(XmlResponse.EN_INVALID_FOLDER_NAME);
else { xr = new XmlResponse(command, resourceType, currentFolderStr, UtilsResponse
.constructResponseUrl(request, resourceType, currentFolderStr, true,
ConnectorHandler.isFullUrl())); if (command.equals(CommandHandler.GET_FOLDERS))
xr.setFolders(currentDir);
else if (command.equals(CommandHandler.GET_FOLDERS_AND_FILES))
xr.setFoldersAndFiles(currentDir);
else if (command.equals(CommandHandler.CREATE_FOLDER)) {
String newFolderStr = UtilsFile.sanitizeFolderName(
new String(request.getParameter("NewFolderName").getBytes("ISO8859-1"),"UTF-8")
);
logger.debug("Parameter NewFolderName: {}", newFolderStr); File newFolder = new File(currentDir, newFolderStr);
int errorNumber = XmlResponse.EN_UKNOWN; if (newFolder.exists())
errorNumber = XmlResponse.EN_ALREADY_EXISTS;
else {
try {
errorNumber = (newFolder.mkdir()) ? XmlResponse.EN_OK
: XmlResponse.EN_INVALID_FOLDER_NAME;
} catch (SecurityException e) {
errorNumber = XmlResponse.EN_SECURITY_ERROR;
}
}
xr.setError(errorNumber);
}
}
} out.print(xr);
out.flush();
out.close();
logger.debug("Exiting ConnectorServlet#doGet");
} /**
* Manage the <code>POST</code> requests (<code>FileUpload</code>).<br />
*
* The servlet accepts commands sent in the following format:<br />
* <code>connector?Command=&lt;FileUpload&gt;&Type=&lt;ResourceType&gt;&CurrentFolder=&lt;FolderPath&gt;</code>
* with the file in the <code>POST</code> body.<br />
* <br>
* It stores an uploaded file (renames a file if another exists with the
* same name) and then returns the JavaScript callback.
*/
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("Entering Connector#doPost"); response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; 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"); logger.debug("Parameter Command: {}", commandStr);
logger.debug("Parameter Type: {}", typeStr);
logger.debug("Parameter CurrentFolder: {}", currentFolderStr); UploadResponse ur; // if this is a QuickUpload request, 'commandStr' and 'currentFolderStr'
// are empty
if (Utils.isEmpty(commandStr) && Utils.isEmpty(currentFolderStr)) {
commandStr = "QuickUpload";
currentFolderStr = "/";
} if (!RequestCycleHandler.isEnabledForFileUpload(request))
ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR, null, null,
Messages.NOT_AUTHORIZED_FOR_UPLOAD);
else if (!CommandHandler.isValidForPost(commandStr))
ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_COMMAND);
else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_TYPE);
else if (!UtilsFile.isValidPath(currentFolderStr))
ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
else {
ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr); String typePath = UtilsFile.constructServerSidePath(request, resourceType);
String typeDirPath = getServletContext().getRealPath(typePath); File typeDir = new File(typeDirPath);
UtilsFile.checkDirAndCreate(typeDir); File currentDir = new File(typeDir, currentFolderStr); if (!currentDir.exists())
ur = UploadResponse.UR_INVALID_CURRENT_FOLDER;
else { String newFilename = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置编码格式
upload.setHeaderEncoding("UTF-8");
try { List<FileItem> items = upload.parseRequest(request); // We upload only one file at the same time
FileItem uplFile = items.get(0);
String rawName = UtilsFile.sanitizeFileName(uplFile.getName());
String filename = FilenameUtils.getName(rawName);
String baseName = FilenameUtils.removeExtension(filename);
String extension = FilenameUtils.getExtension(filename);
//文件名自动替换
filename = UUID.randomUUID().toString() + "."+ extension; if (!ExtensionsHandler.isAllowed(resourceType, extension))
ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
else { // construct an unique file name
File pathToSave = new File(currentDir, filename);
int counter = 1;
while (pathToSave.exists()) {
newFilename = baseName.concat("(").concat(String.valueOf(counter))
.concat(")").concat(".").concat(extension);
pathToSave = new File(currentDir, newFilename);
counter++;
} if (Utils.isEmpty(newFilename))
ur = new UploadResponse(UploadResponse.SC_OK, UtilsResponse
.constructResponseUrl(request, resourceType, currentFolderStr,
true, ConnectorHandler.isFullUrl()).concat(filename));
else
ur = new UploadResponse(UploadResponse.SC_RENAMED,
UtilsResponse.constructResponseUrl(request, resourceType,
currentFolderStr, true, ConnectorHandler.isFullUrl())
.concat(newFilename), newFilename); // secure image check
if (resourceType.equals(ResourceTypeHandler.IMAGE)
&& ConnectorHandler.isSecureImageUploads()) {
if (UtilsFile.isImage(uplFile.getInputStream()))
uplFile.write(pathToSave);
else {
uplFile.delete();
ur = new UploadResponse(UploadResponse.SC_INVALID_EXTENSION);
}
} else
uplFile.write(pathToSave); }
} catch (Exception e) {
ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR);
}
} } out.print(ur);
out.flush();
out.close(); logger.debug("Exiting Connector#doPost");
} }

10.

 package com.sanqing.rss;

 import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List; import com.sanqing.po.Article; public class CreateRss {
public static void publishRss(List<Article> list, String filePath) {
try {
FileWriter fw = new FileWriter(filePath); //文件输出流
BufferedWriter bw = new BufferedWriter(fw); //缓冲流
bw.write("<?xml version=\"1.0\" encoding=\"gbk\"?>\r\n"); //写入头部声明
bw.write("<rss version=\"2.0\" xmlns:atom=\"" +
"http://www.w3.org/2005/Atom\"\r\n");
bw.write("xmlns:cf=\"http://www.microsoft.com/" +
"schemas/rss/core/2005\"\r\n");
bw.write("xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\r\n");
bw.write("xmlns:trackback=\"http://madskills.com/public/" +
"xml/rss/module/trackback/\"\r\n");
bw.write("xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\"\r\n");
bw.write("xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\r\n>");
bw.write("<channel>\r\n"); //频道信息
bw.write("<title>求贤人才博客网</title>\r\n"); //标题
bw.write("<link>http://localhost:8080/JavaPrj_4/login.jsp</link>\r\n"); //链接地址
bw.write("<description>专注于软件人才的培养</description>\r\n"); //频道描述
for(Article art : list) {
bw.write("<item>\r\n"); //栏目
bw.write("<title>" + art.getTitle()+"</title>\r\n"); //栏目标题
bw.write("<link>http://localhost:8080/JavaPrj_4/user/" +
"showArticle.action?id = " + art.getId() + "</link>\r\n"); //栏目链接地址
bw.write("<description>" + art.getContent() + "</description>\r\n");//栏目描述
bw.write("<author>" + art.getUsername() + "</author>\r\n"); //作者
bw.write("<pubDate>" + art.getDate() + "</pubDate>\r\n"); //发布时间
bw.write("</item>\r\n");
}
bw.write("</channel>\r\n");
bw.write("</rss>\r\n");
//关闭流
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

11.

 package com.sanqing.fenye;

 public class Page {
// 1.每页显示数量(everyPage)
private int everyPage;
// 2.总记录数(totalCount)
private int totalCount;
// 3.总页数(totalPage)
private int totalPage;
// 4.当前页(currentPage)
private int currentPage;
// 5.起始点(beginIndex)
private int beginIndex;
// 6.是否有上一页(hasPrePage)
private boolean hasPrePage;
// 7.是否有下一页(hasNextPage)
private boolean hasNextPage; public Page(int everyPage, int totalCount, int totalPage, int currentPage,
int beginIndex, boolean hasPrePage, boolean hasNextPage) {
this.everyPage = everyPage;
this.totalCount = totalCount;
this.totalPage = totalPage;
this.currentPage = currentPage;
this.beginIndex = beginIndex;
this.hasPrePage = hasPrePage;
this.hasNextPage = hasNextPage;
} //构造函数,默认
public Page(){} //构造方法,对所有属性进行设置 public int getEveryPage() {
return everyPage;
} public void setEveryPage(int everyPage) {
this.everyPage = everyPage;
} public int getTotalCount() {
return totalCount;
} public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
} public int getTotalPage() {
return totalPage;
} public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
} public int getCurrentPage() {
return currentPage;
} public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
} public int getBeginIndex() {
return beginIndex;
} public void setBeginIndex(int beginIndex) {
this.beginIndex = beginIndex;
} public boolean isHasPrePage() {
return hasPrePage;
} public void setHasPrePage(boolean hasPrePage) {
this.hasPrePage = hasPrePage;
} public boolean isHasNextPage() {
return hasNextPage;
} public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
} }

12.

 package com.sanqing.fenye;
/*
* 分页信息辅助类
*/
public class PageUtil { public static Page createPage(int everyPage,int totalCount,int currentPage) {
everyPage = getEveryPage(everyPage);
currentPage = getCurrentPage(currentPage);
int totalPage = getTotalPage(everyPage, totalCount);
int beginIndex = getBeginIndex(everyPage, currentPage);
boolean hasPrePage = getHasPrePage(currentPage);
boolean hasNextPage = getHasNextPage(totalPage, currentPage);
return new Page(everyPage, totalCount, totalPage, currentPage,
beginIndex, hasPrePage, hasNextPage);
} public static Page createPage(Page page,int totalCount) {
int everyPage = getEveryPage(page.getEveryPage());
int currentPage = getCurrentPage(page.getCurrentPage());
int totalPage = getTotalPage(everyPage, totalCount);
int beginIndex = getBeginIndex(everyPage, currentPage);
boolean hasPrePage = getHasPrePage(currentPage);
boolean hasNextPage = getHasNextPage(totalPage, currentPage);
return new Page(everyPage, totalCount, totalPage, currentPage,
beginIndex, hasPrePage, hasNextPage);
} //设置每页显示记录数
public static int getEveryPage(int everyPage) {
return everyPage == 0 ? 10 : everyPage;
} //设置当前页
public static int getCurrentPage(int currentPage) {
return currentPage == 0 ? 1 : currentPage;
} //设置总页数,需要总记录数,每页显示多少
public static int getTotalPage(int everyPage,int totalCount) {
int totalPage = 0;
if(totalCount % everyPage == 0) {
totalPage = totalCount / everyPage;
} else {
totalPage = totalCount / everyPage + 1;
}
return totalPage;
} //设置起始点,需要每页显示多少,当前页
public static int getBeginIndex(int everyPage,int currentPage) {
return (currentPage - 1) * everyPage;
} //设置是否有上一页,需要当前页
public static boolean getHasPrePage(int currentPage) {
return currentPage == 1 ? false : true;
} //设置是否有下一个,需要总页数和当前页
public static boolean getHasNextPage(int totalPage, int currentPage) {
return currentPage == totalPage || totalPage == 0 ? false : true;
} }

13.

 package com.sanqing.fenye;

 import java.util.List;

 public class Result {
private Page page;
private List list;
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
} }

14.