一天一点做项目(3)

来源:互联网 发布:sherwood算法 编辑:程序博客网 时间:2024/06/07 06:04
New Documentbody { font-size:14px; line-height:1.8em; padding-right: 4px; padding-left: 8px; padding-bottom: 8px; margin: 0px; padding-top: 8px; }

第六步:编写监听器类

作用:取出当前数据库中所有产品的简要信息,以便在进行随机获取产品时获得最大的效率。

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 ,作用:当职工提交自己的检测信息时,服务器调用这个程序来检查职工的检查结果是否正确。