• 网站异常发送异常代码到邮箱

    为了对用户的请求作统一处理,所以把Struct的Action封装成了一个AbstractAction。

    其中AbstractAction重写了Action类的execute方法,其中一个统一处理就是异常的处理。

    刚好最近想到了代码抛异常时就发邮件通知,这样既能立刻接收到异常的信息,也能对异常归档。

    刚开始打算直接用Exception的getCause()内容作为邮件内容发送,不过只有异常的原因,没有异常

    出现的定位信息:

    e.getCause()
    (java.lang.NullPointerException) java.lang.NullPointerException

    最后用到Exception的printStackTrace(PrintStream s)方法,并且采用了可变尺寸的线程池来发送邮件,主要是在以前构造的线程可用时将重用它们,代码如下:

    try {

    // code

    } catch (Exception e) {

    e.printStackTrace();

    logger.error(e.getCause());

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    e.printStackTrace(new PrintStream(baos));

    String url = request.getRequestURL().toString() ;

    if(request.getQueryString()!=null){

    url+=”?” + request.getQueryString();

    }

    exception = “请求地址为:”+url+ “<br>” ;

    exception += “请求IP为:”+IPUtil.getIpAddr(request)+ “<br>” ;

    exception += baos.toString();

    //ex为AbstractAction类的属性

    //private ExecutorService ex = Executors.newCachedThreadPool();

    ex.execute(new Runnable() {

    @Override

    public void run() {

    // sendEmail(String addr, String title, String content)

    eMailService.sendEmail(“XXX@gmail.com”, “后台异常”,exception);

    }

    });

    }

    通过获取这些异常信息也可以发现某些对网站的异常访问,例如这次访问产生的异常:(下面代码用*取代了真实IP)

    请求地址为:http://******/front/indexNotLogin.do?action=viewAgreement&id=../../../../../../../../../../../../../sbin/../etc/./rc.d/../rc.d/.././passwd%00.htm 请求IP为:203.130.**.*** java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor239.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at

    这样就可以把203.130.**.***这个IP添加到黑名单了!

  • 科目二驾考

    今天终于过了科目二,虽然不是满分过,不过也是一次性通过..
    感觉在中国考驾照,弄得像高考一样紧张..
    这次跨省考试的四个小伙伴,只过了两个..上一批四个只过了一个..
    看来抗压能力很重要,所以把之前做的一些笔记写上来,方便要准备考科目二的童鞋参考(每个人的自身条件和车辆条件不一样,请作为模板参考,切勿硬套):

    1. 半坡停车启动:
    (1)上坡:上坡前先校正方向,尽量直行,上坡后车身与右边线间距为发动机盖右角刚好遮住右边线。
    (2)停车:通过左后视镜柄刚好看到中间黄线就停车。
    (3)启动:先松离合器到车身有点抖然后定住,慢慢松脚刹。
    2.侧位停车:
    (1)前进进入侧位停车时调整好与右边线距离,不要距离太大,否则倒车时前轮容易压线。
    (2)倒车时,从右倒视镜看到右后轮刚过侧位车库前横线,将方向盘往右打尽,倒车,直到左后视镜刚好看到后横线右直角,回正方向盘,直到左后轮刚好到左竖线(虚线),将方向盘往左打尽,直到发动机盖左角刚好越过左竖线(虚线)停车。

    3.倒车入库:
    (1)进入倒车库调整好与前横线距离很重要,距离合适倒车时不用修方向,距离为:进去的时候驾驶人对着第二个缺口和虚线第二个小段的交接处。
    (2)右转向入库:倒车到左倒视镜刚好遮住虚黄线时将方向盘往右打尽,慢慢倒车判断右后轮会不会压线,当入库快平衡后,快速回正方向盘,当倒后镜刚好完全挡住黄线就停车。
    (3)左转向出库:玻璃窗按钮到达黄虚线时开始打方向盘一圈+120度,驶出直角后,当倒后镜与虚黄线平衡则停车(发动机盖刚好遮住前面黄线)。
    (4)左转向入库:按左转向出库方向盘不动入库。
    (5)右转向出库:玻璃窗按钮超过黄虚线一点点时将方向盘往右打尽,出库快平衡时快速回正方向盘。
    4.直角转弯:贴近左边线行驶(发动机盖左角刚好有一点遮住左边线),行驶到驾驶室右门手柄刚好到横线位置,将方向盘往右打尽。
    5.连续转弯:
    尽量靠近右边线进入左湾:发动机盖左角刚到右边界,打左一圈加九十度,直到发动机盖左角刚到左边界,回正方向,直走一小段路,到发动机盖右角刚好到左边界,打右一圈加九十度。过程中以发动机盖左角与右边线是否平衡来判断方向打多了还是打小了,适当修正方向。