这是我初学Struts 2时的练习笔记和小例子,希望对大家有帮助,附上链接
1:Struts是基于MVC模式的web应用程序框架
使用Struts的目的:减少在运用MVC设计模型来开发Web应用的时间。
创建第一个Structs第一个项目 结构步骤:
要导入的包:(共9个)
commons-fileupload(上传下载包)
commons-io(输入输出包)
commons-lang 3-3.2(基础包)
commons-logging(日志包)
freemarker(模板引擎,通过模板生成文本输出的通用工具)
structs2-core(核心包)
xwork-core(一些类基于xwork)
ognl(表达式)
javassist-3.11.0.GA.jar(解析java类文件的一个包)
之后配置web.xml文档
web项目在启动tomcat时第一个启动的文件就是web.xml
首先定义过滤器
<filter>
<filter-name>struct2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
这里写完后按住ctrl点击鼠标左键如果可以跳转则证明正确
</filter>
filter的映射
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
/*是所有的都需要过滤
</filter-mapping>
映射与文件的filter-name应该保持一致
之后再src中创建struts的核心xml struts.xml
<?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>
</struts>
之后创建action包
创建action类让其继承ActionSupport
Struts2中有一个默认的方法不指定方法名的话有一个execute()方法
之后去配置struts.xml中的action文件
2:Struts2的工作原理和工作流程
一 工作原理
在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
二 工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器
3:struts.xml的主要内容:
1.全局属性
2.用户请求和action之间的对应关系
3.action可能用到的参数和返回结果
4.各种拦截器的配置
<?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>
<!-- include节点是struts组件化模式将每一个功能模块独立到一个xml文件中,然后通过include引用 -->
<include file="struts.xml"></include>
<!-- package提供了将多个action组织为一个模块的方式
package的名字是唯一的
package可以扩展
当一个package扩展至另一个package时,该package会在本身配置的基础上加上扩展的package配置,
父package必须在子package前配置
name:package名称
extends:继承的父package名称
abstract:设置package的属性为抽象的,抽象的package不能定义action 值:true/flase
naemspace:package的命名空间,该命名空间影响到url的地址,如命名空间为test url:http://
localhost:8080/projectName/test/xx.action-->
<package name="com.key.struts" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定义拦截器
name:拦截器名
class:拦截器路径-->
<interceptor name="time" class="class.kay.time"></interceptor>
4:Action的搜索顺序:
http://localhost:8080/struts2/path1/path2/path3/student.action
第一步:判断package是否存在,如:path1/path2/path3
(1)存在
第二步:判断action是否存在,如果不存在则去默认的namespace的
package里面寻找action
第三步:如果没有,则报错
(2)路径包不存在
第二步:检查上一级路径的package是否存在(直到默认namespace,重复第一步)
5:默认action
使用详情:当服务器找不到指定的action时候,就会跳转到默认的action,替代404界面
配置:
<default-action-ref name="index"></default-action-ref>
name:默认action的name属性值,对应下面action的name
<action name="index">
<result>/error.jsp</result>
</action>
注意:当默认action与通配符定action名称同时存在对应包中时会发生冲突,不会进入默认action而是报错
6:struts2后缀:
三种方式:
1.struts.properties中:struts.action.extension=action,do,struts2
2.xml中增加常量constant:
<constant name="struts.action.extension" value="action,do,struts2"></constant>
3.在过滤器中配置intt-param参数:
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>do,action,strtus2</param-value>
</init-param>
7:Struts2接受参数:
1,使用Action的属性接受参数,在Action中定义需要接受的属性,并写它的set/get方法。
2,使用DomainModel接受参数,创建实体类定义需要接受的属性,并set/get方法,在Action中创建实体类名属性。并在界面进行指定。
3,使用ModelDriver接受参数,在Action中实现ModelDriver<实体类名>接口,并实现方法返回当前需要转换的对象,删除set/get方法,并对 对象 进行实例化,并取消指定。
8:结果类型input的效果
1.当参数类型转换错误时,如age输入框中的类型是字母等情况,方法自动返回input
2.当action中存在addFiledError时:
1)addFileError放在一般执行方法,addFieldError("", "");语句后面有返回input的语句
2)addFileError放在validate()中
3.FileError的表现形式:
在jsp页面中使用<s:fielderror/>标签,该标签name属性为addFieldError方法中的参数fieldName,在jsp页面中使用struts标签,
需要导入标签库 语句:<%@ taglib prefix="s" uri="/struts-tags" %>
9:Action中5中内置属性
(1) SUCCESS :Action正确的执行完成,返回相应的视图,success是name属性的默认值。
(2) NONE :表示Action正确的执行完成,但并不返回任何事视图。
(3) ERROR : 表示Action执行失效,返回错误处理视图。
(4) LOGIN : Action因为用户没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录验证
(5) INPUT : Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入界面,一般在应用中,会对这些 参数进行验证,如果验证没有通过,将自动返回该视图。
10:(1)在result里面最重要的属性是type类型,type的默认值为dispatcher,这个类型支持JSP视图技术。
(2)Struts 2 支持多种视图技术,例如JSP、Valocity(模板引擎)、FreeMaker(模板引擎)等