package com.bjpowernode.drp.statreport.web;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import com.bjpowernode.drp.statreport.manager.StatReportManager;
import com.bjpowernode.drp.util.ApplicationException;
import com.bjpowernode.drp.util.BeanFactory;
import com.bjpowernode.drp.util.Constants;
import com.bjpowernode.drp.util.TransactionHandler;
@SuppressWarnings("serial")
public class StatReportServlet extends HttpServlet {
/**
* StatReportManager的代理类对象
*/
private StatReportManager statReportManager;
/**
* 创建servlet时会调用该方法
* 获取StatReportManager的代理类对象
*/
@Override
public void init() throws ServletException {
// 获取工厂
BeanFactory beanFactory = (BeanFactory) this.getServletContext().getAttribute("beanFactory");
// 获取StatReportManager实现类对象
statReportManager = (StatReportManager) beanFactory.getServiceObject(StatReportManager.class);
// 获取FlowCardManager代理类对象
TransactionHandler transactionHandler = new TransactionHandler();
statReportManager = (StatReportManager) transactionHandler.newProxyInstance(statReportManager);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 取得大区列表,装在map里,key:大区的id,value:大区的名字
if (request.getParameter("command").equals(Constants.GET_REGION)) {
getRegionList(request, response);
// 根据大区id取得相应的市,装在map里,key:城市的id,value:城市的名字
} else if (request.getParameter("command").equals(Constants.GET_CITY)) {
getProvincesByRegionId(request, response);
}
}
// 根据大区id取得相应的市,装在map里,key:城市的id,value:城市的名字(此servlet方法是ajax调用,因此servlet获取的值返回给javascript)
private void getProvincesByRegionId(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/xml;charset=UTF-8");
// 获取客户端传过来的大区id
int regionId = Integer.parseInt(request.getParameter("regionId"));
// key:城市的id,value:城市的名字
Map<Integer, String> cities = null;
/**
* regionId == 0,说明前台在大区select选择的是"--全部--"option,程序实际会去数据库
* 查找pid == 0的记录,而pid == 0的记录是"所有分销商",这不是我们想要的结果,所以应排除这种情况
*/
if (regionId == 0) {
return;
}
try {
// 调用statReportManager的方法,取得大区对应的城市,装在map里,key:城市的id,value:城市的名字
cities = statReportManager.getProvincesByRegionId(regionId);
// 城市map是要返回javascript,用XML的格式
// 创建XML文档树
Document document = DocumentHelper.createDocument();
// 创建根节点items
Element itemsElement = document.addElement("items");
// 遍历map(cities城市)
Set<Map.Entry<Integer, String>> citySet = cities.entrySet();
for (Map.Entry<Integer, String> city : citySet) {
// 创建根节点下的item子节点
Element itemElement = itemsElement.addElement("item");
// item节点有两个子节点(id,name)
Element idElement = itemElement.addElement("id");
idElement.setText(String.valueOf(city.getKey()));
Element nameElement = itemElement.addElement("name");
nameElement.setText(city.getValue());
}
// 设置XML文档格式,漂亮的格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
outputFormat.setEncoding("UTF-8");
// stringWriter字符串是用来保存XML文档的
StringWriter stringWriter = new StringWriter();
// xmlWriter是用来把XML文档写入字符串的(工具)
XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
// 把创建好的XML文档写入字符串
try {
xmlWriter.write(document);
// 向浏览器输出字符串(如果是ajax访问此servlet的此方法,则是向javascript输出字符串)
response.getWriter().print(stringWriter.toString());
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
throw new ApplicationException("把XML文档写入字符串失败!");
}
} catch (ApplicationException e) {
throw e;
}
}
// 取得大区列表,装在map里,key:大区的id,value:大区的名字
private void getRegionList(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 取得大区列表,装在map里,key:大区的id,value:大区的名字
Map<Integer, String> regions = null;
try {
// 调用statReportManager的方法,取得大区列表,装在map里,key:大区的id,value:大区的名字
regions = statReportManager.getRegionList();
} catch (ApplicationException e) {
e.printStackTrace();
throw e;
}
request.setAttribute("regions", regions);
request.getRequestDispatcher("/statreport/client_level_chart.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3.大区select和对应城市select:servlet
最新推荐文章于 2025-08-15 09:50:45 发布