struts2中struts.xml和web.xml文件解析及工作原理

web.xml




    Struts Blank

   
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   


   
        struts2
        /*
   


   
        index.html
   



struts.xml


"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">



   

       

       
           /error.jsp
       


       
           
       



       
           
/Hello.jsp
       


       
           
/Action.jsp
       



            /user_add_success.jsp
       


        
       
            /user_add_success.jsp
       



       

            /Student{1}_success.jsp
       

       
            /{1}_{2}_success.jsp
           
       


   
   


工作原理:

1、在浏览器中输入 http://localhost:8080/Struts2Demo/hello,就会向服务器端(tomcat)发送一个请求
2、tomcat会解析URL,从中找到一个webApplication(可理解为即项目名)为 Struts2Demo,然后就会在这个项目里面找到web.xml文件
3、在web.xml中找到filter标签,然后在filter中定义的 filter-class处理URL中的hello(这其中其实还包含一个步骤,就是web.xml中 /*会过滤掉所有地址,这样地址才会被 filter-class中定义的类接收到)
4、StrutsPrepareAndExecuteFilter接收到地址之后,首先查询namespace(在struts.xml中的package标签中的namespace中得到它的值),然后将URL中namespace值(这里是/)后面的路径读取到(这里是hello)
5、继续在struts的action标签中查找是否有hello这个值的,如果有且发现action中有class属性,则会new一个class中声明的类,执行里面的一个execute()方法,该方法返回一个String字符串,返回该字符串之后才能得到result中的值,如果action中没有class属性,则默认有一个ActionSupport类,该类中也有一个execute方法,返回一个String值
6、上一步中讲到execute()方法,但是不一定非要执行execute()方法,当action标签中有method属性时,就会执行该属性定义的方法名称,然后同样会返回一个String字符串
7、根据返回的String字符串(success),在result中找到name属性值为返回的String字符串的标签(这里就是Action.jsp),如果没有找到,则会返回error页面;如果action中没有class则直接找到该action下面的result中的值(这里是/Hello.jsp),然后将请求forword到Action.jsp/Hello.jsp
8、最后jsp反馈到客户端。

你可能感兴趣的:(JAVA)