Struts2框架学习(二)

Struts配置文件主要元素

package:

属性

name:包的名称,必须写,而且唯一

extends:一般情况下需要继承struts-default包,但不是必须的。如果不继承,将无法使用struts2提供的核心功能,struts-default.xml中定义着struts-default这个包,struts-default.xml是在struts.xml加载之前加载

abstract:把包声明为抽象包,是用来继承的,只要是没有<action>元素的包,就可以声明为抽象包

namespace:名称空间。访问路径=名称空间+动作名称

namespace详解

namespace的默认取值是一个"",默认值不是/,写自定义的namespace时需要加/

访问路径为http://localhost:8080/Struts2Day1/user/hello.action

 如果访问http://localhost:8080/Struts2Day1/a/b/user/hello.action是访问不了的

 

 

但是访问http://localhost:8080/Struts2Day1/user/a/b/hello.action是可以访问的

namespace查找规则

 action详解

作用是配置动作,处理请求路径

属性

name:动作名称

class:动作类全名

method:动作类中的方法名称。默认是public String execute(){}

方法要求:必须是public,返回值类型必须是String,没有参数

动作类第一种写法

直接在写个Action类,不需要继承任何类,然后在struts.xml中配置

 

动作类第二种写法

写个Action类实现Action接口,然后实现excute方法

 

 Action接口中,有一些静态常量

 

 动作类第三种写法

写个Action类继承ActionSuport类,ActionSupport是实现Action接口的类

 

 默认动作类

 

修改默认动作类

自定义一个默认动作类

在struts.xml中配置默认动作类引用

 

 动作访问之通配符

案例:用户的增删改查

 访问路径是

http://localhost:8080/Struts2Day2/user/add

http://localhost:8080/Struts2Day2/user/delete

http://localhost:8080/Struts2Day2/user/find

http://localhost:8080/Struts2Day2/user/update

*号通配符优化struts.xml代码

 

 多个*号通配符

 

 

 

 

 

 访问路径

http://localhost:8080/Struts2Day2/student/add_Student

http://localhost:8080/Struts2Day2/student/delete_Student

优先级:绝对匹配优先,使用通配符的按照在配置文件中的先后顺序进行匹配的

动态方法的调用

 

访问路径

 http://localhost:8080/Struts2Day2Demo1/student!addStudent

http://localhost:8080/Struts2Day2Demo1/student!deleteStudent

result元素

为动作指定结果视图

属性

name:逻辑视图的名称,对应着动作方法的返回值。默认值是success

type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher转发

result中type的取值有四种类型

 redirect重定向

 访问路径http://localhost:8080/Struts2Day2Demo1/n1/demo1

访问成功显示路径

 chain 转发到同一个名称空间不同的动作

 

 访问路径http://localhost:8080/Struts2Day2Demo1/n1/demo1

浏览器显示demo2动作转发的内容,地址不变

 redirectAction 重定向到同一命名空间的不同动作

 访问路径http://localhost:8080/Struts2Day2Demo1/n1/demo1

 浏览器显示demo2动作转发的内容,地址改变

chain 转发到不同命名空间的动作

 

 

访问路径http://localhost:8080/Struts2Day2Demo1/n1/demo1

 浏览器显示demo3动作内容,地址栏不变

 redirectAction转发到不同命名空间的动作

访问路径http://localhost:8080/Struts2Day2Demo1/n1/demo1

 浏览器显示demo3动作内容,地址栏改变

result元素中param子元素 

 在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param。param元素体现依赖注入(Dependence Injection)思想。通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的,而param元素就是将配置的参数注入到该类中,调用的是对应类的setter方法进行注入的。

自定义结果类型

其实结果类型就是一个类,这些类都实现com.opensymphony.xwork2.Result接口,或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport,这些类都有一个doExecute方法,用于执行结果视图,struts内部实现就是Servlet

案例:输出CAPTCHA(验证码)图像的结果类型

定义验证码结果类型处理类

 

 struts.xml配置结果类型和一个默认的action

 访问路径http://localhost:8080/Struts2Day2Demo2/n1/checkcode

显示结果

优化自定义结果类型

更加灵活的设置验证码的宽度和高度

给结果类添加width和height的属性和get/set方法

 

 修改struts.xml文件,通过param元素注入结果类型属性值

 结果显示

 全局视图和局部视图

前面的自定义结果类型的写法是局部视图,其它包是不能访问的

全局视图的配置

写一个包,名为myDefault,里面写全局的配置

其它包继承myDefault包

定义全局结果视图,继承的包可以使用结果视图

 

 动作类中的servlet api访问

通过ServletActionContext获取

 通过注入方式:先让Action实现两个接口ServletRequestAware,ServletResponseAware,在Action类中声明HttpServletRequest和HttpServletResponse两个属性

 多个struts配置文件

多个struts配置文件的用途是为了模块开发减少开发中的冲突

 

Action接收请求参数的方式

通过Servlet方式获取

 

 通过Action的属性的set方法注入

在Action类声明属性,添加set方法

通过Action的属性的set模型的形式注入

User.java模型:提供属性的get/set方法

 把参数封装到一个User模型中,然后Action提供模型的get/set方法

 表单传入参数名称需要是Action对象名称+"."+对象属性

运行项目,打印结果输出

 

打印顺序原因,Struts首先调用getUser获取user对象,发现只是声明没有创建,则会创建user对象,调用setUser注入,然后调用getUser对象获取user对象为user对象相应属性注入

通Action模型驱动封装参数

参数注入的原理

参数自动注入是因为有两个拦截器在工作,查看struts.xml源码发现有两个拦截器

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

 静态参数注入

struts可以通过在action中静态注入参数,然后在Action提交属性注入,这种是静态流入,参数写死

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值