1 package com.webserver.webservice; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.net.SocketTimeoutException; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 9 import java.util.Iterator; 10 import java.util.Map; 11 import java.util.Set; 12 import java.util.concurrent.ConcurrentHashMap; 13 14 import javax.servlet.ServletException; 15 import javax.servlet.annotation.WebServlet; 16 import javax.servlet.http.HttpServlet; 17 import javax.servlet.http.HttpServletRequest; 18 import javax.servlet.http.HttpServletResponse; 19 20 import org.apache.http.Header; 21 import org.apache.http.HttpResponse; 22 import org.apache.http.client.ClientProtocolException; 23 import org.apache.http.client.HttpClient; 24 import org.apache.http.client.methods.HttpPost; 25 import org.apache.http.entity.BasicHttpEntity; 26 import org.apache.http.impl.client.DefaultHttpClient; 27 import org.apache.http.params.CoreConnectionPNames; 28 import org.apache.http.util.EntityUtils; 29 30 /** 31 * Servlet implementation class Prompt 32 */ 33 @WebServlet("/Prompt") 34 public class Prompt extends HttpServlet { 35 private static final long serialVersionUID = 1L; 36 private static MapcookieMap = new ConcurrentHashMap (); 37 public static String yuyinServer = "http://10.3.172.205:8080/RecognizePY/directRecognize"; 38 /** 39 * @see HttpServlet#HttpServlet() 40 */ 41 public Prompt() { 42 super(); 43 // TODO Auto-generated constructor stub 44 } 45 46 /** 47 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 48 */ 49 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 50 // TODO Auto-generated method stub 51 this.doPost(request, response); 52 } 53 54 /** 55 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 56 */ 57 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 58 String session = request.getParameter("session").trim(); 59 //String token = request.getParameter("token").trim(); 60 response.setCharacterEncoding("UTF-8"); 61 response.setContentType("text/json;charset=utf-8"); 62 String firstCookie = ""; 63 //从原型管理器中获取原型对象 64 CookieData cookie = cookieMap.get(session); 65 //原型管理器包含该对象 66 if(cookie!=null){ 67 firstCookie = cookie.getCookie(); 68 cookie.setAccessDate(System.currentTimeMillis()); 69 } else { 70 //不包含就创建一个对象 并存到原型管理器中 71 CookieData tmpCookie = new CookieData(); 72 firstCookie = getCookie(); 73 tmpCookie.setCookie(firstCookie); 74 tmpCookie.setAccessDate(System.currentTimeMillis()); 75 cookieMap.put(session, tmpCookie); 76 //根据具体情况 原型对象在原型管理器中存放时间超过规定时间移除改原型对象 77 cleanCookieMap(); 78 } 79 //TODO 80 //.... 81 82 } 83 84 85 /** 86 * 客户端要记住返回的cookie 87 * @return 88 * @throws ClientProtocolException 89 * @throws IOException 90 */ 91 public String getCookie() throws ClientProtocolException, IOException{ 92 String firstCookie = ""; 93 try{ 94 HttpClient client = new DefaultHttpClient(); 95 HttpPost post = new HttpPost(yuyinServer); 96 //设置连接超时时间 97 client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000); 98 //设置数据传输超时时间 99 client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 6000);100 HttpResponse response = null;101 response = client.execute(post);102 if(response.getStatusLine().getStatusCode()==200){103 //如果状态码为200,就是正常返回 104 Header[] cookies = response.getHeaders("Set-Cookie");105 for( int i=0;i keySet = cookieMap.keySet();211 Iterator it = keySet.iterator();212 while(it.hasNext()){213 String key = it.next();214 CookieData cookie = cookieMap.get(key);215 //如果cookie保存时间超过一小时 则移除216 if(currTime - cookie.getAccessDate()> 3600000 ){217 cookieMap.remove(key);218 }219 }220 }221 }