Struts-core-2.x.x.jar : Struts 2 框架的核心类库
xwork-2.x.x.jar : XWork类库,Struts 2 在其上构建
ognl-2.6.x.jar : Object Graph Navigation Language , Struts 2 框架通过其读写对象的属性。
freemarker-2.3.x.jar : Struts 2 的UI标签的模版使用 Freemarker编写。
commons-logging-1.1.x.jar : ASF出品的日志包。
commons-fileupload-1.2.1.jar : 文件上传组件。
一、struts2由来:
struts2 和struts 1代码风格几乎不一样 ,因为Struts 2是在WebWork2基础发展而来的,虽说是在WebWork2基础发展而来,但实际是被收购的,所以与struts1代码风格不一样。
二、struts2的核心:
struts2的核心是拦截器(过滤器)
Struts 2 框架的绝大部分功能是通过拦截器来完成的,当FilterDispatcher拦截到用户请求后,大量拦截器将会对用户请求进行处理,然后调用用户
拦截器的配置:自定义的Action 类中的方法来处理请求
在struts.xml文件中来定义的,使用<interceptor.../>元素,格式如下:
<interceptor name = "拦截器名" class = "拦截器实现的类">
<param name = "参数名">参数值</param>
</interceptor>
其中<param.../>可以省略,但在有的时候就需要为其传入拦截器参数。
有时候一个Action要配置不只一个拦截器,往往多个拦截器一起使用来进行过滤。这时候就要配置几个拦截器组成的拦截器栈。定义拦截器栈用
<interceptor-stack.../>,格式如下:
<interceptor-stack name = "拦截器栈名">
<interceptor-ref name = "拦截器一"></interceptor-ref>
<interceptor-ref name = "拦截器二"></interceptor-ref>
<interceptor-ref name = "拦截器三"></interceptor-ref>
</interceptor-stack>
注意:在配置拦截器栈时,用到的拦截器必须是已经存在的拦截器。拦截器栈也可以引用拦截器栈。
配置web.xml文件拦截器(在Struts 2中,Struts框架是通过Filter启动的,他在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">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置拦截器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置struts.xml:( Struts.xml是 Struts 2 的核心配置文件,主要用于配置开发人员编写的action ):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="struts" extends="struts-default">
<!-- 声明拦截器 -->
<interceptors>
<interceptor name="my" class="com.sc.lanjieqi.LanJieQi"></interceptor>
</interceptors>
<action name="login" class="com.sc.action.YongHuCaoZuoAction">
<!-- 调用拦截器 ,调用滴定仪拦截器后必须调用defaultStack拦截器-->
<interceptor-ref name="my"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/success.jsp</result>
<result name="err">/err.jsp</result>
<result name="xiugai">/xiugai.jsp</result>
<result name="denglu">/index.jsp</result>
</action>
</package>
</struts>
配置struts2.xml时:
注意:
result中的name属性有下:
1、success : 表示请求处理成功,该值也是默认值。
2、error :表示请求处理失败。
3、none :表示请求处理完成后不跳转到任何页面。
4、input :表示输入时如果验证失败应该跳转到什么地方。
5、login :表示登录失败后跳转的目标
三、使用struts2时,程序执行的过程:用户通过view视图(jsp页面) 发出请求,请求进入拦截器(控制器controller),经过拦截器后进入 action(model)进行数据处理,然后返回到拦截器,拦截器再将处理结果发送到view视图。
action要继承或者实现的类:
可以继承ActionSupport类或者实现Action接口。 定义拦截器继承AbstractInterceptor类。