• Struts系列教材 (六)- 基础


    在tomcat启动struts web应用的时候,如果出现了struts配置上的错误,你可能只能看到一个 Error FilterStart的提示,而看不到详细的错误原因。 

    这样就加大了定位和解决问题的难度 

    这是因为默认配置下,struts把日志输出关闭了 
    为了把日志输出开启便于调试,需要增加log4j.xml这个配置文件

    步骤1:先运行,看到效果,再学习
    步骤2:模仿和排错
    步骤3:故意制造一个struts的配置错误
    步骤4:在src目录下增加log4j.xml
    步骤5:关闭log4j.xml日志输出

    步骤 1 : 先运行,看到效果,再学习

    老规矩,先下载下载区(点击进入)的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。

    步骤 2 : 模仿和排错

    在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。 
    模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。 
    采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。 

    推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。 
    这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来 
    这里提供了绿色安装和使用教程:diffmerge 下载和使用教程

    步骤 3 : 故意制造一个struts的配置错误

    在11行,故意制造一个错误,把ProductAction写成ProductAction1

    这样struts就会启动失败,虽然启动失败了,但是tomcat给出的错误信息非常有限,很不利于调试。 无法知道到底哪里写错了。

    故意制造一个struts的配置错误

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

    <struts>

        <constant name="struts.i18n.encoding" value="UTF-8"></constant>

        <package name="basicstruts" extends="struts-default">

            <action name="showProduct" class="com.how2java.action.ProductAction1"

                method="show">

                <result name="show">show.jsp</result>

            </action>

            <action name="addProduct" class="com.how2java.action.ProductAction"

                method="add">

                <result name="show">show.jsp</result>

            </action>

        </package>

    </struts>

    步骤 4 : 在src目录下增加log4j.xml

    在src目录下增加log4j.xml,打开日志功能

    然后重新启动tomcat即可看到具体struts启动失败错误原因

    如图所示,可以看到很明确的错误原因,ProductAction1类的ClassNotFoundException

    参考log4j 入门教程

    在src目录下增加log4j.xml

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

         

        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">

           <layout class="org.apache.log4j.PatternLayout"

              <param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/> 

           </layout

        </appender>

      

        <!-- specify the logging level for loggers from other libraries -->

        <logger name="com.opensymphony">

            <level value="DEBUG" />

        </logger>

        <logger name="org.apache.struts2">

             <level value="DEBUG" />

        </logger>

       

       <!-- for all other loggers log only debug and above log messages -->

         <root>

            <priority value="INFO"/> 

            <appender-ref ref="STDOUT" /> 

         </root

         

    </log4j:configuration

    步骤 5 : 关闭log4j.xml日志输出

    有了log4j.xml日志输出可以帮助调试,但是也会导致struts的启动变慢。

    关闭log4j.xml日志输出很简单,直接把log4j.xml命名成其他文件即可,以后要用再把名字改回来,很方便

    关闭log4j.xml日志输出

    关注我,分享更多Java全栈技术
    更多Java全栈技术内容,点击了解: https://how2j.cn/k/struts/struts-filter/57.html

  • 相关阅读:
    arcgis10.2转shp文件中文乱码问题解决方案
    Android Context作为参数传递this
    andriod inputbox
    andriod inputType
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    终于理解了什么是LGPL
    产品经理如何与强势的技术沟通? 技术比较有资历,会以技术无法实现等方面的原因拒绝处理产品提出的需求。 你们是否遇到这样的技术? 产品懂技术的话,是不是会好一些,因为可以和技术说“行话”了,并且产品懂技术就不会被忽悠了。
    Core Dump总结
    LIBRARY_PATH是编译时候用的,LD_LIBRARY_PATH是程序运行是使用的
    如何禁止C++默认成员函数
  • 原文地址:https://www.cnblogs.com/Lanht/p/12789386.html
Copyright © 2020-2023  润新知