Struct2 学习笔记

点击打开链接

这是我初学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(模板引擎)等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值