Struts2 笔记

客户端敲一个地址  http://xxxx/webappname/hello.action   浏览器把请求发给tomcat     tomcat接收到请求会检查交个哪个webapp处理
找到webapp之后,会参考配置文件 web.xml (filter) 交给struts2的filter处理,会调用它的doFilter,doFilter内部也会参考一个struts.xml文件
首先参考它的namespace,然后找对应的action,(如果action是一个class的话就会找到class的对象;struts2每次访问必定会new这个对象出来;没找到就返回给tomcat)然后找对应的result。找到result之后会把请求foword给对应的jsp文件(/hello.jsp)
这个jsp文件就会把内容反馈给客户端了
(为什么不直接访问.jsp文件?  因为中间进行了一个中转,可以把请求和最后的视图分开,而不像原来那样写死;分开之后的好处,就是想访问别的试图,可以直接改配置文件/hello.jsp这部分,所以更灵活)

namespace命名空间
拷贝的时候改一下工程的web context路径

从ActionSupport继承

路径问题:统一使用绝对路径   1)
                                                  2)使用eclipse自动生成的代码 String basePath=....
不用method用动态方法调用DMI
wildcard  通配符,使配置简便(约定优于配置),首先匹配最精确的,多个星号,谁放前面先调谁
   代表第一个*号

用action的属性接收参数  

方法1:在自己的action里定义一个和传递过来的url参数同名的属性,写好get/set方法(实际调的get/set方法名)

方法2:使用DomainModel来接收参数:使用域模型    user  有name  age属性。如果变量无法匹配,就无法使用域模型,使用vo do ,dto。  (最常用)

方法3:ModelDriven  MVC  model view control

 

简单数据验证    (分析程序执行过程,一条线,先看结果页面的显示,看提交或者链接到哪里,再到后台查对应的处理,再看如何处理)  读源码也要一层层的来,也是一条线 可以运用debug  

addFieldError方法,s:fieldError标签

          常用,取属性(value stack,context)并展现    value="errors.name[0]"OGNL表达式,取出来的value值是一个数组[name is error]的第0项(去掉中括号)

访问web元素 (request、session、application)

第一种方式:提交name和password交给LoginAction处理,在LoginAction里面初始化了三个map类型的属性:request、session、application,通过ActionContext对应的方法设置这三个值,在处理execute时,往map里面赋值。在struts2处理的过程中会把map的值交给Httprequest对象里。

第1.2种方式:使用标签访问       debug里面的说明,可以用#访问

 

DI    dependency injection            依赖注入

IoC inverse of control           控制反转

第二种方式:实现RequestAware、SessionAware、applicationAware接口,对应的setRequest....方法

当一个请求到来时struts2会帮你new出对应的action(LoginAction),并检查是否实现RequestAware接口,若实现 则调用对应的setRequest方法。Struts2是以filter开始,部署在容器里的filter可以拿到对应的HttpRequest对象,并把这个对象放到一个map里,也命名为Request(映射)交给action,因为action里已经初始化了一个request,在调用request的时候,完成了值的传递

第三种方式:如果想用HttpRequest里特殊的方法。

request = ServletActionContext.getRequest();

session = request.getSession();

application = session.getServletContext();

第四种方式:依赖注入 实现ServletRequestAware

 

模块包含,相当于把文件直接复制在下面

默认action       (可以在访问不存在时使用)

 

Action总结:从ActionSupport继承,按照约定写好各种方法(add、delete、query),写完后用DomainModel接收参数,如果需要访问session用IoC访问

 

Result: 可以指定类型,默认dispatcher(运用服务器跳转)  只能跳转到视图,不能跳转到action。redirect也一样

chain可以跳转到action   redirectAction客户端跳转到action              (前两个常用)

GlobalResult所有的action有共同的结果就可以写到global-results(在这个action里可以共用的结果集),另外一个包extends

带参数的结果集:forward过程,几个action共享同一个值栈,一次request只有一个值栈

                      配置struts.xml用${}

 

书是用来查的,讲设计模式、数据结构的书可以仔细扣。

OGNL表达式:

第一种方式直接用s:property

第二种方式  传参数时只有传user.xxx时,才会帮你构造这个user方法。初始化demainModel可以可以自己new;或者传参数值,但要有默认的参数为空的构造方法 (否则报InstantiationException  实例化错误)

 

Struts-tags:

1通用标签

a)property

b)set

c)bean

d)include    少用,处理中文麻烦

e)param

2控制标签

a)if   else if   else

b) iterator

c)subset

3 UI标签

a) theme

 

Struts2 命名规范

原则:简单就是美

表的命名:不用写项目名称,因为本来就是你自己的项目。不用写所属的表级别,因为太多了不可能全部定义,交给成员自己定义。    命名为_Model 名即可。

字段的命名:保持和属性名一致(尽量不要起名和数据库的命名冲突)  id  topicId

库名:项目名

用层来划分包:

com.bjsxt.elarning.action:UserAction CouseAction

com....                  .model:User ..  Couse...

 

异常处理:throws   然后使用全局处理

拦截器:调用某个action过程中加入拦截器

 

CRUD (设计和规划)  重点掌握

你可能感兴趣的:(笔记)