/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.web.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.ewcms.common.lang.EmptyUtil;
import com.ewcms.plugin.visit.manager.VisitFacable;
import com.ewcms.plugin.visit.model.Visit;
import com.ewcms.plugin.visit.model.VisitItem;
import com.ewcms.plugin.visit.util.VisitUtil;
/**
* @author wuzhijun
*/
public class VisitServlet extends HttpServlet {
private static final long serialVersionUID = 8986742704742468271L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Visit v = new Visit();
VisitItem item = new VisitItem();
try {
Integer siteID = Integer.parseInt(request.getParameter("siteId"));
v.setSiteId(siteID);
item.setSiteId(siteID);
Integer channelId = Integer.parseInt(request.getParameter("channelId"));
item.setChannelId(channelId);
} catch (Exception e) {
return;
}
Long articleId =(EmptyUtil.isStringNotEmpty(request.getParameter("articleId")) ? Long.parseLong(request.getParameter("articleId")) : 0L);
item.setArticleId(articleId);
String uniqueID = VisitUtil.getCookieValue(request, "UniqueID");
v.setUniqueId(uniqueID);
item.setUniqueId(uniqueID);
String IP = VisitUtil.getIP(request);
v.setIp(IP);
if (EmptyUtil.isStringNotEmpty(IP) && IP.indexOf(",") > 0) {
String arr[] = IP.split("\\,");
for (int i = 0; i < arr.length; i++) {
if (!EmptyUtil.isStringNotEmpty(arr[i])
|| arr[i].trim().startsWith("10.")
|| arr[i].trim().startsWith("192."))
continue;
v.setIp(arr[i].trim());
break;
}
}
String url = request.getParameter("URL");
if (EmptyUtil.isStringNotEmpty(url)) {
url = url.replace('\'', '0').replace('\\', '0');
String prefix = url.substring(0, 8);
String tail = url.substring(8);
tail = tail.replace("/+", "/");
url = prefix + tail;
}
item.setUrl(url);
if (EmptyUtil.isStringEmpty(url)) return;
Long stickTime = 10L;
try {
stickTime = new Double(Math.ceil(Double.parseDouble(request.getParameter("stickTime").trim()))).longValue();
} catch (Exception e) {
}
item.setStickTime(Math.abs(stickTime));
if ("KeepAlive".equalsIgnoreCase(request.getParameter("event"))) {
findVisitFacable().addVisitByKeepAliveEvent(v, item);
return;
}
String userAgent = request.getHeader("User-Agent");
if (EmptyUtil.isStringEmpty(userAgent)) {
userAgent = "Unknow";
}
v.setUserAgent(userAgent);
String referer = request.getParameter("Referer");
if (EmptyUtil.isStringNotEmpty(referer)) {
referer = referer.replace('\'', '0').replace('\\', '0');
}
item.setReferer(referer);
Integer remotePort = request.getRemotePort();
item.setRemotePort(remotePort);
if (!"Unload".equalsIgnoreCase(request.getParameter("event"))) {
try {
String sites = VisitUtil.getCookieValue(request, "Sites");
if (EmptyUtil.isStringEmpty(v.getUniqueId())) {
v.setUniqueId(VisitUtil.getUniqueID());
v.setRvFlag(false);
VisitUtil.setCookieValue(request, response, "UniqueID", -1, v.getUniqueId());
VisitUtil.setCookieValue(request, response, "Sites", -1, "_" + v.getSiteId());
} else if (EmptyUtil.isStringNotEmpty(sites) && sites.indexOf("_" + v.getSiteId()) >= 0) {
v.setRvFlag(true);
} else {
v.setRvFlag(false);
VisitUtil.setCookieValue(request, response, "Sites", -1, sites + "_" + v.getSiteId());
}
item.setHost(request.getParameter("Host"));
if (EmptyUtil.isStringNotEmpty(item.getHost())) {
item.setHost(item.getHost().toLowerCase());
} else {
item.setHost("无");
}
String country = request.getParameter("country");
String province = request.getParameter("province");
String city = request.getParameter("city");
v.setCountry(country);
if (EmptyUtil.isStringEmpty(country)){
v.setCountry("未知");
}
v.setProvince(province);
if (EmptyUtil.isStringEmpty(province)){
v.setProvince("未知");
}
v.setCity(city);
if (EmptyUtil.isStringEmpty(city)){
v.setCity("未知");
}
v.setCookieEnabled("1".equals(request.getParameter("ce")));
v.setFlashVersion(request.getParameter("fv"));
v.setFlashEnabled(EmptyUtil.isNotNull(v.getFlashVersion()));
v.setJavaEnabled("1".equals(request.getParameter("je")));
v.setLanguage(VisitUtil.getLanguage(request.getParameter("la")));
if (v.getLanguage().equals("其他")) {
v.setLanguage(VisitUtil.getLanguage("; "
+ request.getHeader("accept-language") + ";"));
}
v.setOs(VisitUtil.getOS(v.getUserAgent()));
v.setBrowser(VisitUtil.getBrowser(v.getUserAgent()));
item.setReferer(request.getParameter("Referer"));
v.setScreen(request.getParameter("sr"));
v.setScreen(VisitUtil.getScreen(v.getScreen()));
v.setColorDepth(request.getParameter("cd"));
item.setFrequency(Long.parseLong(request.getParameter("vq")));
findVisitFacable().addVisitByLoadEvent(v, item);
} catch (Exception e) {
}
}else{
findVisitFacable().addVisitByUnloadEvent(v, item);
}
}
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private VisitFacable findVisitFacable(){
ServletContext application = getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
VisitFacable visitFac = (VisitFacable) wac.getBean("visitFac");
return visitFac;
}
}