Struts2笔记一之简单了解Struts2
1、Struts2所需要的jar为:
commons-fileupload-1.2.1.jar、 commons-io-1.3.2.jar、 commons-logging-1.0.4.jar、 freemarker-2.3.13.jar、ognl-2.6.11.jar、 struts2-core-2.1.6.jar、 xwork-2.1.2.jar、
2、Struts2在web.xml中的加载方式如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<!-- 这里的config/struts.xml就是修改后的路径,默认struts2.X配置文件默认存放路径在
/WEB-INF/classes目录下,就是struts.xml放在src的目录下。 -->
<param-value>struts-default.xml,struts-plugin.xml,config/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Struts2是通过filter来加载的。
3、一个简单的struts.xml配置:
<?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.devMode" value="true" />
<!-- 导入另外的struts配置文件 -->
<include file="example.xml"/>
<!-- extends="struts-default" 是必须的,这是struts自带的一个package,所有自定义的package都需要继承它 -->
<package name="packageName" namespace="/example" extends="struts-default">
<action name="HelloWorld" class="com.edifier.HelloWorldAction" method="execute">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
4、 Struts运行机制:
1) 访问请求localhost:8081/Struts2_0100_Introduction/HelloWorld;
2) 它会通过http协议发送给tomcat,之后tomcat会去查看访问的是哪一个application;
3) 这个请求的application是Struts2_0100_Introduction,tamcat会找到相应的application然后读取这个application的web.xml配置文件;
4) web.xml里面配置了一个filter,而这个filter过滤方式为/*,过滤所有的url地址,然后上述请求就会被StrutsPrepareAndExecuteFilter过滤器进行过滤;
5) 过滤开始会读取struts.xml配置文件,struts会先查看请求对应的namespace,这里是"/",查看以后会去struts.xml中查找相对应的namespace"/";
6) 当查到对应的namespace以后,会再去查找对应的action,这里的action是HelloWorld;
7) 当找到对应的action后,struts就会去执行这个包中定义的拦截器,因为所有的包都继承了struts-default这个,所以都会经过struts2自带的一系列的拦截器进行拦截,如果有自定 义拦截器,也会执行自定义拦截器;
8) 在所有拦截器走完一遍以后,struts会找到对应的Action类,执行对应的方法,这里的类是:HelloWorldAction,方法是:execute();
9) 在方法执行完毕以后,会有一个返回值(一些特殊的情况下没有返回值,如:ajax),这个返回值为String类型,在struts.xml中的action中与之对应的有一个跳转url可能是action,可能 是jsp,这就是这个action执行后下一步操作;
10) 在跳转之前,struts还会经历一遍之前走的所有的拦截器,不过这一次的顺序与之前的顺序相反;
11) 最后就是跳到对应的页面中显示数据,或者是跳到下一个action继续执行。