18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

39.struts2第一天

1. 优点:

ctrl+shift+t :搜索类

struts2使用优势:

自动封装参数,参数校验,结果的处理(转发|重定向),国际化,显示等待页面,表单的防止重复提交。

servlet是线程不安全的。

struts1也是不安全。

Struts2struts1无联系。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

2. Struts框架的搭建

struts-2.3.24-all.zip有以下文件夹

1apps案例

2lib jar包 107

3docs 文档

4src 源码

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

解压这个war包,得到web-INF里有搭框架需要的jar包。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

在库中找到最新的dtd约束文档。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

复制uri进行关联,

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

将整个struts-2.3.dtd复制出一个单独的文件。并导入cataLog

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

src内建struts.xml文件。引入dtd约束文档:

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

配置xml文件:

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

Name:

nameSpace:

Extends:struts-default

Class:相关clasc的完整类名。

method

Name

struts2配置filterweb.xml内):

需要记住filter类—

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

测试:..

3.Struts框架的访问流程

1http://localhost:8080/sms/hello/hh

先匹配项目名下的namespace=””,再匹配actionname=””,找到相关的完整类名,创建对象,调用method=””,拿到方法的返回值字符串去result中匹配名相同的result跳转到相关页面。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

2)struts2 的核心:拦截器

可插拔式设计和模块化手机有异曲同工之妙处,

aop思想:面向切面编程。

struts2主要学习配置,actionjsp,其他都被封装好了。

4. Struts2核心配置详解+常量配置

Package元素:将action配置封装,可以在package中配置更多action,与包区别。

  Name属性:给包起个名字,起到标识作用,不能重复。

  Namespace:给action的访问定义名空间。

  extends属性:继承一个指定包。(必须)。Package元素中属性 abstract=true”表示就是来被继承的。

Action元素:配置action类。

  Name属性:决定了action的访问资源名。

  Class属性:action的完整类名。

  Method属性:指定调用action中的哪个方法。

Result元素:结果配置

  Name属性:标识结果处理的名称,与action方法的返回值对应。

  Type:指定调用哪一个类来处理结果。默认转发dispatcher

  标签体:相对路径。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

Struts2常量配置:

1)struts2默认常量配置在哪里?

   18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

修改default.properties方法:

   1>直接在src下建一struts.properties将所需要覆盖的键值对写进 去即可。了解

   2>修改src下的struts.xml文件,在根元素strutspackage元素外添加新元素<constant name= value=></constant>重点

   3>web.xml中配置,了解

<context-param>

  <param-name></param-name>

  <param-value></param-value>

</context-param>

以上三种是按加载顺序,后面的覆盖前面的。

2)哪些常量需要可以更改:

<constant name=”struts.i18n.encoding” value=”UTF-8”></constant>

解决post提交乱码。遇到get提交乱码用以前的方法解决。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

Spring时会补充两个常量。

<constant name=”struts.action.extension” value=”action,,”></constant>就是访问时后缀可以以.action或为空。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

热部署:可以在开发时配置为true(配置成功后需重启一次,以后就不用重启服务器了),运营时配置为false,主要俩好处就是热加载主配置和提供更多错误提示。

<constant name=”struts.devMode” value=”true”></constant>

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

 

5. Stuts2配置的进阶:动态方法调用+

6. <include file=””></include>这个可以引入其他struts.xml配置文件(可以写在包内。)

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

动态方法调用:类中有多个方法等待调用如何配置。

如果把所有方法都配置一个action。(不好)

需求:配一个action获得所有方法。

1)(了解)action不配置method属性,添加一个常量(动态方法调用常量(默认是关闭的需要打开)

<constant name=”” ></constant>

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

2)重点):使用*号通配符匹配(它在匹配之后,会记录下来并匹配后面的method

总结:直接在src下的struts.xml中写这个通配符匹配,不成功,

使用元素<include>将指定包下的struts.xml引入,可成功!?为什么?

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

上述struts2常量配置加载顺序有误:后面的覆盖前面的。

1)Src/struts.xml

2)包下struts.properties

3)项目中的web.xml

7.Struts2配置进阶-默认值(了解)

method属性:默认值execute

Resultname属性也是success

Resulttype属性:dispatcher

Actionclass也有默认值:找到这个默认类发现它调用的是默认的execute方法。

当匹配不到这个action则访问默认的action

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

8. action类的创建的方式

1)(不常用,理想状态)

方式1创建一个类:可以是POJO(普通java类).不需要继承任何java类也不需要实现任何接口。使得struts2的代码侵入性更低,servlet就是代码侵入性技术。 

2)(不常用)方式2实现接口Actionwebxxx啥的),更体贴预置了字符串和方法execute

3)继承一个类ActionSupport

这个类帮我们实现了一系列接口

9. 补充

临时获取参数方法:

String s=ServletActionContext.getRequest().getParameter();

介绍一个工具:StringUtils用来判断字符串是否为空(Struts2中的包)。

 18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架

Namespace /访问时就不用填写namespace内容更加方便。

18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架