J 2 ee高同時の場合のListenerインスタンスの詳細
5637 ワード
J 2 ee高同時の場合のListenerインスタンスの詳細
引用:高合併で最大同時回数を制限し、web.xmlではフィルタでパラメータ(最大同時数)を設定し、その他の関連パラメータを設定します.詳細はコードを参照してください.第一歩:webを構成する.xmlの配置、分からないところは説明します:パラメータ50はパラメータ名maxConcurrentを通じてfilterの実現クラスの中で取得して、filter-classは書く実現クラスで、
url-patternは同時時間を制限するurlで、終わります!
第2歩:クラス実装filterを写実し、このインタフェースには3つの方法があり、詳細はコードを参照してください.
コードはこれで終わります.
自分がプロジェクトで出会った穴にツッコミを入れます.
1.response.sendError( int, string);本明細書のコードではres.sendErrorであり、本明細書のコードのように503サーバから持ち出されたページが直接返される場合、このページは乱暴で見苦しい.
ここでユーザに友好的に通知するためには、以下の手順をweb.xmlでは、次の構成コードを行います.
Webではxmlには、上記の情報が構成されており、サーバのページを捨てることなく、まず503(HttpServeretResponse.SC_SERVICE_UNAVAILABLE)ステータスコードの下のこのページがフィルタリングされる.
そのうち503.jspページは自分で完成する必要があります.ここでは1つの例を参考にしてください.コードは以下の通りです.
このページは、サーバが投げ出すページよりもずっと友好的です.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
引用:高合併で最大同時回数を制限し、web.xmlではフィルタでパラメータ(最大同時数)を設定し、その他の関連パラメータを設定します.詳細はコードを参照してください.第一歩:webを構成する.xmlの配置、分からないところは説明します:パラメータ50はパラメータ名maxConcurrentを通じてfilterの実現クラスの中で取得して、filter-classは書く実現クラスで、
url-patternは同時時間を制限するurlで、終わります!
ConcurrentCountFilter
com.procure.pass.ConcurrentCountFilter
maxConcurrent
50
ConcurrentCountFilter
/a/pass/export
第2歩:クラス実装filterを写実し、このインタフェースには3つの方法があり、詳細はコードを参照してください.
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Servlet Filter implementation class ConcurrentCountFilter
*/
public class ConcurrentCountFilter implements Filter {
private static Logger log = LoggerFactory.getLogger(ConcurrentCountFilter.class);
private FilterConfig filterConfig;
private int maxConcurrent = -1;
//
private static AtomicInteger count = new AtomicInteger(0);
/**
*
* @return
*/
public static int get(){
return count.get();
}
/**
*
* @return
*/
public static int increase(){
return count.incrementAndGet();
}
/**
*
* @return
*/
public static int decrement(){
return count.decrementAndGet();
}
/**
*
*/
public void init(FilterConfig filterConfig) throws ServletException {
//
String maxStr = filterConfig.getInitParameter("maxConcurrent");
int num = -1;
if(maxStr != null && !"".equals(maxStr)){
num = Integer.parseInt(maxStr);
}
if(num >= 1){
this.maxConcurrent = num;
}else{
this.maxConcurrent = -1;
}
}
/**
*
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try{
//
int num = increase();
if(maxConcurrent > 0){
if(maxConcurrent >= num){
chain.doFilter(request, response);
log.info(" :"+count.get());
}else{
HttpServletResponse res = (HttpServletResponse) response;
res.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE," ");
log.info(" ");
log.info(" :"+count.get());
}
}else{
chain.doFilter(request, response);
log.info(" :"+count.get());
}
}finally {
decrement();
log.info(" :"+count.get());
}
}
/**
*
*/
public void destroy() {
this.filterConfig = null;
log.info(" ......");
}
}
コードはこれで終わります.
自分がプロジェクトで出会った穴にツッコミを入れます.
1.response.sendError( int, string);本明細書のコードではres.sendErrorであり、本明細書のコードのように503サーバから持ち出されたページが直接返される場合、このページは乱暴で見苦しい.
ここでユーザに友好的に通知するためには、以下の手順をweb.xmlでは、次の構成コードを行います.
503
/WEB-INF/views/error/503.jsp
Webではxmlには、上記の情報が構成されており、サーバのページを捨てることなく、まず503(HttpServeretResponse.SC_SERVICE_UNAVAILABLE)ステータスコードの下のこのページがフィルタリングされる.
そのうち503.jspページは自分で完成する必要があります.ここでは1つの例を参考にしてください.コードは以下の通りです.
503 -
このページは、サーバが投げ出すページよりもずっと友好的です.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!