第六步:编写监听器类
作用:取出当前数据库中所有产品的简要信息,以便在进行随机获取产品时获得最大的效率。
package com.jackyan.practice.store.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.jackyan.practice.store.service.mysql.ProductBeanServiceMysqlImpl;
Public class StoreContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
arg0.getServletContext().removeAttribute("simpleinformation");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
arg0.getServletContext().setAttribute("simpleinformation",new ProductBeanServiceMysqlImpl().getAllProductSimpleInformation() );
}
}
第七步:编写servlet
ProductServlet,作用:当职工向服务器提交获取指定数目的产品时调用,为用户随机返回一定数量的产品,职工接下来就可以进行人工检查了。
package com.jackyan.practice.store.servlet;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jackyan.practice.store.bean.ProductBean;
import com.jackyan.practice.store.service.ProductBeanService;
import com.jackyan.practice.store.service.mysql.ProductBeanServiceMysqlImpl;
public class ProductsServlet extends HttpServlet {
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,java.io.IOException{
resp.setContentType("text/xml;charset=utf-8");
PrintWriter out=resp.getWriter();
String tem=(String)req.getParameter("count");
if(tem==null){
out.println("<errors>非法的请求参数!</errors>");
out.close();
return ;
}
int count=0;
try{
count=Integer.parseInt(tem);
}catch(Exception e){
out.println("<errors>非法的请求参数!</errors>");
out.close();
return ;
}
int[] indexArr=null;
int[] simInfoArr=(int[])getServletContext().getAttribute("simpleinformation");
if(count>simInfoArr.length){
out.println("<errors>非法的请求参数!</errors>");
out.close();
return ;
}
indexArr=getRandArray(0,simInfoArr.length-1,count,simInfoArr);
StringBuffer sb=new StringBuffer();
ProductBeanService pbs=new ProductBeanServiceMysqlImpl();
sb.append("<productlist>");
List<ProductBean> l=new ArrayList();
for(int i=0;i<count;i++){
ProductBean pb=pbs.getProductById(indexArr[i]);
if(pb==null){
out.println("<errors>数据获取发生错误!</errors>");
out.close();
return;
}
l.add(pb);
sb=appendProduct(sb,pb);
}
sb.append("</productlist>");
out.println(sb.toString());
req.getSession().setAttribute("rightinfo", l);
out.close();
}
private StringBuffer appendProduct(StringBuffer sb,ProductBean pb){
// return sb.append("<product><productId>"+pb.getProductId()+"</productId><productName>"+pb.getProductName()
// +"</productName></product>");
//以下是作为测试时使用
return sb.append("<product><productId>"+pb.getProductId()+"</productId><productName>"+pb.getProductName()
+"</productName><isAvaliable>"+(pb.getIsAvaliable()=='1'?true:false)+"</isAvaliable></product>");
}
private int[] getRandArray(int minIndex,int maxIndex,int size,int[] baseArr){
int[] tem=new int[size];
int[] rTem=new int[size];
int p=-1;
int j=0;
for(int i=0;i<size;){
int t=(int)Math.round(Math.random()*(maxIndex-minIndex)+minIndex);
for(j=0;j<=p;j++){
if(tem[j]==t){
break;
}
}
if(j>p){
p+=1;
tem[p]=t;
rTem[p]=baseArr[t];
i++;
continue;
}
}
return rTem;
}
}
CheckServlet ,作用:当职工提交自己的检测信息时,服务器调用这个程序来检查职工的检查结果是否正确。