18.01.08,web学习第三十九天,还有一年,努力吧青年 struts2第一天 搭建框架
39.struts2第一天
1. 优点:
ctrl+shift+t :搜索类
struts2使用优势: 自动封装参数,参数校验,结果的处理(转发|重定向),国际化,显示等待页面,表单的防止重复提交。 servlet是线程不安全的。 struts1也是不安全。 Struts2和struts1无联系。 |
2. Struts框架的搭建
struts-2.3.24-all.zip有以下文件夹 1)apps案例 2)lib jar包 107个 3)docs 文档 4)src 源码 解压这个war包,得到web-INF里有搭框架需要的jar包。 在库中找到最新的dtd约束文档。 复制uri进行关联, 将整个struts-2.3.dtd复制出一个单独的文件。并导入cataLog 在src内建struts.xml文件。引入dtd约束文档: 配置xml文件: Name: nameSpace: Extends:struts-default Class:相关clasc的完整类名。 method: Name: 给struts2配置filter(web.xml内): 需要记住filter类— 测试:.. |
3.Struts框架的访问流程
1)http://localhost:8080/sms/hello/hh 先匹配项目名下的namespace=””,再匹配action的name=””,找到相关的完整类名,创建对象,调用method=””,拿到方法的返回值字符串去result中匹配名相同的result跳转到相关页面。 2)struts2 的核心:拦截器 可插拔式设计和模块化手机有异曲同工之妙处, aop思想:面向切面编程。 struts2主要学习配置,action,jsp,其他都被封装好了。 |
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。 标签体:相对路径。 Struts2常量配置: 1)struts2默认常量配置在哪里? 修改default.properties方法: 1>直接在src下建一struts.properties将所需要覆盖的键值对写进 去即可。了解 2>修改src下的struts.xml文件,在根元素struts内package元素外添加新元素<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提交乱码用以前的方法解决。 Spring时会补充两个常量。 <constant name=”struts.action.extension” value=”action,,”></constant>就是访问时后缀可以以.action或为空。 热部署:可以在开发时配置为true(配置成功后需重启一次,以后就不用重启服务器了),运营时配置为false,主要俩好处就是热加载主配置和提供更多错误提示。 <constant name=”struts.devMode” value=”true”></constant>
|
5. Stuts2配置的进阶:动态方法调用+
6. <include file=””></include>这个可以引入其他struts.xml配置文件(可以写在包内。)
动态方法调用:类中有多个方法等待调用如何配置。 如果把所有方法都配置一个action。(不好) 需求:配一个action获得所有方法。 1)(了解)action不配置method属性,添加一个常量(动态方法调用常量(默认是关闭的需要打开)) <constant name=”” ></constant> 2)重点):使用*号通配符匹配(它在匹配之后,会记录下来并匹配后面的method) 总结:直接在src下的struts.xml中写这个通配符匹配,不成功, 使用元素<include>将指定包下的struts.xml引入,可成功!?为什么? |
上述struts2常量配置加载顺序有误:后面的覆盖前面的。 1)Src/struts.xml 2)包下struts.properties 3)项目中的web.xml |
7.Struts2配置进阶-默认值(了解)
method属性:默认值execute Result的name属性也是success Result的type属性:dispatcher Action的class也有默认值:找到这个默认类发现它调用的是默认的execute方法。 当匹配不到这个action则访问默认的action。 |
8. action类的创建的方式
1)(不常用,理想状态) 方式1创建一个类:可以是POJO(普通java类).不需要继承任何java类也不需要实现任何接口。使得struts2的代码侵入性更低,servlet就是代码侵入性技术。 2)(不常用)方式2实现接口Action(webxxx啥的),更体贴预置了字符串和方法execute 3)继承一个类ActionSupport 这个类帮我们实现了一系列接口 |
9. 补充
临时获取参数方法: String s=ServletActionContext.getRequest().getParameter(); 介绍一个工具:StringUtils用来判断字符串是否为空(Struts2中的包)。 Namespace 配/访问时就不用填写namespace内容更加方便。 |