⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sitemapaction.java

📁 论坛软件系统亦称电子公告板(BBS)系统
💻 JAVA
字号:
package cn.jsprun.struts.foreg.actions;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import cn.jsprun.domain.Forums;
import cn.jsprun.service.forumsedit.ForumService;
import cn.jsprun.service.system.DataBaseService;
import cn.jsprun.utils.BeanFactory;
import cn.jsprun.utils.Common;
import cn.jsprun.utils.DataParse;
import cn.jsprun.utils.JspRunConfig;

public class SitemapAction extends DispatchAction {
	private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService");
	private ForumService forumService = (ForumService) BeanFactory.getBean("forumService");
	@SuppressWarnings("unchecked")
	public ActionForward querysitmap(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
		Map<String,String> settings = (Map<String,String>)request.getAttribute("settings");
		Map<String,String> forumStr = (Map<String,String>)request.getAttribute("forums");
		Map<String,Map<String,String>> forumMap=((DataParse) BeanFactory.getBean("dataParse")).characterParse(forumStr.get("forums"), false);
		int maxitemnum = 500;
		HttpSession session = request.getSession();
		String boardurl = (String)session.getAttribute("boardurl");
		int timestamp = (Integer)(request.getAttribute("timestamp"));
		String baidusitemap = settings.get("baidusitemap");
		if(baidusitemap.equals("0")){
			try {
				response.getWriter().write("Baidu Sitemaps is closed!");
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
		String sitemapfile = servlet.getServletContext().getRealPath("/")+"forumdata/sitemap.xml";
		File sitemap = new File(sitemapfile);
		long xmlfiletime = 0;
		if(sitemap.exists()){
			xmlfiletime = sitemap.lastModified();
		}
		int baidusitemap_life = convertInt(settings.get("baidusitemap_life"));
		response.setHeader("Content-type:", "application/xml");
		String xmlcontent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"+"<document xmlns:bbs=\"http://www.baidu.com/search/bbs_sitemap.xsd\">\n";
		if(timestamp-xmlfiletime>=baidusitemap_life*3600){
			xmlfiletime = timestamp - baidusitemap_life*3600;
			int timeoffset=(int)((Float)session.getAttribute("timeoffset")*3600);
			String fidarray = "0";
			String adminemail = settings.get("adminemail");
			List<Forums> forumlist = forumService.findAll();
			for(Forums f:forumlist){
				if(sitemapforumperm(f,forumMap)){
					fidarray = fidarray + "," + f.getFid();
				}
			}
			String sql = "SELECT tid, fid, subject, dateline, lastpost, replies, views, digest FROM jrun_threads WHERE dateline > "+(xmlfiletime+"").substring(0,10)+" AND fid IN ("+fidarray+") AND displayorder >=0 LIMIT "+maxitemnum;
			List<Map<String,String>> threadlist = dataBaseService.executeQuery(sql, new String[]{"tid","fid","subject","dateline","lastpost","replies","views","digest"});
			xmlcontent = xmlcontent+"<webSite>"+boardurl+"</webSite>\n"+
		"	<webMaster>"+adminemail+"</webMaster>\n"+
		"	<updatePeri>"+baidusitemap_life+"</updatePeri>\n"+
		"	<updatetime>"+Common.gmdate("yyyy-MM-dd HH:mm:ss", (int)(timestamp+timeoffset))+"</updatetime>\n"+
		"	<version>JspRun! "+JspRunConfig.version+"</version>\n";
			String rewritestatus = settings.get("rewritestatus");
			for(Map<String,String> thread : threadlist){
				int dateline = Common.toDigit(thread.get("dateline"));
				int lastpost = Common.toDigit(thread.get("lastpost"));
				xmlcontent += "	<item>\n"+
				"		<link>"+(rewritestatus.equals("0") ? boardurl+"viewthread.jsp?tid="+thread.get("tid") : boardurl+"thread-"+thread.get("tid")+"-1-1.html")+"</link>\n"+
				"		<title>"+thread.get("subject")+"</title>\n"+
				"		<pubDate>"+Common.gmdate("yyyy-MM-dd HH:mm:ss", (int)(dateline+timeoffset))+"</pubDate>\n"+
				"		<bbs:lastDate>"+Common.gmdate("yyyy-MM-dd HH:mm:ss", (int)(lastpost+timeoffset))+"</bbs:lastDate>\n"+
				"		<bbs:reply>"+thread.get("replies")+"</bbs:reply>\n"+
				"		<bbs:hit>"+thread.get("views")+"</bbs:hit>\n"+
				"		<bbs:boardid>"+thread.get("fid")+"</bbs:boardid>\n"+
				"		<bbs:pick>"+(thread.get("digest").equals("") ? 0 : 1)+"</bbs:pick>\n"+
				"	</item>\n";
			}
			xmlcontent += "</document>";
			try {
				OutputStream out = new FileOutputStream(sitemapfile);
				OutputStreamWriter ot = new OutputStreamWriter(out,JspRunConfig.charset);
				ot.write(xmlcontent);
				ot.close();
				out.close();
				sitemapfile = sitemapfile.substring(servlet.getServletContext().getRealPath("/").length());
				request.getRequestDispatcher(sitemapfile).forward(request, response);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ServletException e) {
				e.printStackTrace();
			}
		}else{
			sitemapfile = sitemapfile.substring(servlet.getServletContext().getRealPath("/").length());
			try {
				request.getRequestDispatcher(sitemapfile).forward(request, response);
			} catch (ServletException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	@SuppressWarnings("unused")
	private static int convertInt(String s) {
		int count = 0;
		try {
			count = Integer.parseInt(s);
		} catch (Exception e) {
		}
		return count;
	}
	private boolean sitemapforumperm(Forums f,Map<String,Map<String,String>> forumMap){
		if(!f.getType().equals("group")){
			String viewperm = forumMap.get(String.valueOf(f.getFid())).get("viewperm");
			return  (viewperm.equals("")||(!viewperm.equals("") && Common.forumperm(viewperm, Short.valueOf("7"), "")));
		}
		return false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -