没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2010-02-09 10:17:10.000|阅读 2244 次
概述:java多人并行开发是很出色,但是只要是并行的那么就会存在一些问题。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
java多人并行开发是很出色,但是只要是并行的那么就会存在一些问题。
比如:A程序员在A页面写了以个逻辑,当逻辑判断满足就内部重定向到B程序员写的B页面,但是刚好B程序员在B页面中的逻辑是满足某些条件就跳转到A页面,于是乎当某些特定条件下,两个页面就在不停的重定向一直到jvm的溢出。
平时我们遇到这种问题可能找一会就找到了,也基本上没有什么影响。但是在一个成熟的业务系统中遇到这样的问题就是致命的。可能会导致服务器挂掉。。或者整个集群的连锁反应(集体挂掉)。当然你的用户也就访问不到你的站点了,在工业标准中我们考虑更多的就是怎么让系统更稳定。比如:淘宝一天都宕机了,该有多少商家要发疯。
再次进入正题,如何来解决这种问题保证系统的绝对稳定呢?很简单一个fielter就搞定了。
view plaincopy to clipboardprint? package org.fielter.test; import java.io.IOException; 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.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 过滤形成环路的fielter * * @author yuezhen */ public class CircleFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try{ HttpServletRequest req = (HttpServletRequest) request; String original=""; // 获取原始的请求来源 if(req.getAttribute("javax.servlet.forward.request_uri")!=null){ original=(String)req.getAttribute("javax.servlet.forward.request_uri"); } // 用System.out来代替log System.out.println("[info] the original url is:"+original); System.out.println("[info] the request url is:"+req.getRequestURI()); // 如果原始请求地址和需要跳转的地址一致,抛出异常 if(original.equals(req.getRequestURI())){ System.out.println("[error] find circle"); // 可以选择抛出异常,或者用其他的处理方式 throw new Exception(); } filterChain.doFilter(request, response); }catch(Exception e){ // 发现了重定向的死循环的后续处理 try { // 页面显示发现死循环 response.getOutputStream().print("has circle"); } catch (IOException e1) { e1.printStackTrace(); } } } public void destroy() { } } |
package org.fielter.test; import java.io.IOException; 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.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 过滤形成环路的fielter * * @author yuezhen */ public class CircleFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try{ HttpServletRequest req = (HttpServletRequest) request; String original=""; // 获取原始的请求来源 if(req.getAttribute("javax.servlet.forward.request_uri")!=null){ original=(String)req.getAttribute("javax.servlet.forward.request_uri"); } // 用System.out来代替log System.out.println("[info] the original url is:"+original); System.out.println("[info] the request url is:"+req.getRequestURI()); // 如果原始请求地址和需要跳转的地址一致,抛出异常 if(original.equals(req.getRequestURI())){ System.out.println("[error] find circle"); // 可以选择抛出异常,或者用其他的处理方式 throw new Exception(); } filterChain.doFilter(request, response); }catch(Exception e){ // 发现了重定向的死循环的后续处理 try { // 页面显示发现死循环 response.getOutputStream().print("has circle"); } catch (IOException e1) { e1.printStackTrace(); } } } public void destroy() { } } |
上面这个fielter会检测请求的原始来源地址,然后判断与当前需要跳转的地址是否一致,如果一致那么肯定会形成以个环路,于是jvm就在不停执行跳转一直到堆栈溢出。
当我们检测到这种环路,我们就可以抛出异常,定义统一的错误页面。。。。等等来友好的解决之。。。
如下fielter的配置就可以看到,我们过滤了所有forward跳转的请求
view plaincopy to clipboardprint?
<filter>
<filter-name>CircleFilter</filter-name>
<filter-class>org.fielter.test.CircleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CircleFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
如果有其他需求,类似的配置就OK了
接下来附带一个maven搭的测试列子,直接mvn jetty:run,然后再浏览器中http://localhost:8080/fielter/index.htm 就可以看到拦截的效果了
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号