一个Struts的配置:
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<!-- global result , 大家共用的结果集! 在这个package里面是共用的 -->
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="user" class="com.struts2.action.UserAction">
<result>/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
<!-- admin包, 继承自user包 -->
<package name="admin" namespace="/admin" extends="user">
<action name="admin" class="com.struts2.action.AdminAction">
<result>/admin.jsp</result>
</action>
</package>
</struts>
一、Action
Namespace
决定了
action
的访问路径。
当namespace为空(默认为空)时,则当其他Package处理不了时,就是这个package来处理action。
1. Package和类中的作用一样,区分重名。
2. <resultname=“success”>默认就是success,可以不写。
3.
当Myeclipse中
复制
web
项目,访问的还是原来的项目。点属性,改web—
web
myeclipse
Context-root的路径。
1.
JSP
默认编码是ISO-8859-1,改的话,在eclipse设置-->搜索jsp-->选中国。然后就变成
GB18030了。
2. Action中的
class=“com.struts2.IndexAction”,意思是:当访问action时,他就会去找对应的类,然后执行里面的
execute
()方法。函数的返回值就是
result
的
name
对应的属性值。
3. 当不配置class时,他默认找到的是ActionSupport这个类。开发中只用继承自ActionSupport的方式.因为ActionSupport已经帮我们继承了一些常用的方法.
4. Struts1/Struts2中Action区别:Struts2在每次访问action对应的class时,都会new一个新的出来,而struts1则只有一个,存在同步问题。
解决中文编码问题:
<constantname="
struts.i18n.encoding" value="GBK"/>
二、
路径问题path,DMI动态方法调用
1. 当设定namespace后,访问action时,会在路径上加上namespace。而要在页面中使用相对路径链接,则会加上多余的路径,这样会访问出错。
解决办法:永远
用绝对路径。(也不能直接用‘\’,这样访问的是apache的初始页面)。
<%String path = request.getContextPath(); String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
然后可以这样写
:href=“
<%=
basePath
%>
myJsp.jsp”
加
<base
href
=
“<%=
basePath
%>”> 这句后, 和一般情况的写法就一样了.这样写
href=“
myJsp.jsp”。
2. Action中可以指定调用的方法, 不一定非要调用execute()方法。添加method属性即可。
3.
DMI就是在URL地址中动态指定:/action!add (
action
名!
类中的方法):好处是当有很多方法时,可以动态指定调用。而不用配置那么多Action。
三、
ActionWildcard通配符、用Action的属性接收参数
1. 使用通配符,
将配置量降到最低。
2. 约定优于配置。(项目中关于怎么取名的约定)。
3. {1},{2}代表action名字中第一个*,第二个*。
当项目组定好命名规范后,直接用通配符和可以匹配出
类和
JSP文件。当有多个都能匹配的时候,就按先后顺序进行匹配了。
4.
参数传递:
在对应Action的
类中,设置属性,并
设定
set
、
get
方法,那么在地址中输入参数的时候,会
自动取出数据。(类型会自动转换。内部实现调用的是set、get方法,所以当改变set方法里的名字时,只要set
Name与传递的
name=XX相对应就行了)。
四、
DomainMode参数传递
1. Dto数据传输对象,VO:valueobject值对象。通常用于业务层之间的数据传递。两者一个意思。
2.
什么时候用
DTO?
当
传递的参数和
DomainMode
匹配不上时, 用DTO解决。当然还能用属性接收,然后再传。
3. DomainMode就是把要传递的参数封装成一个类。
1. 这种参数传递的方法并不常用,但是里面隐含的程序设计思想很重要
2.
ModelDriven
模型驱动:
MVC(Model View Controller)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。解耦M与V。
MVC是一个设计模式,它强制性的使
应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器(分发器)。它们各自处理自己的任务。
3.
Struts
中的
MVC:V----JSP页面,M----后台建立的那些Model,C----各种各样的Action。
4. 通过getModel方法来调用model中的方法。
5.
Struts2重点放在Controller部分。写来写去都在写
Action。Model再进一步的封装就是hibernate的实现了。
六、
简单的数据校验SimpleDataValiation
1. 查看别人的程序:
先看视图页面,看实现了什么功能。
根据实现的某个功能顺着这条线读。这条线是能单独拿出来运行的。顺着某条线读,会从视图à代码à数据库等。
2. 数据校验:
addFieldError(。。)。中添加数据校验出错信息。
在JSP文件中<%@taglib uri=“/struts-tags” prefix=“s”%>在JSP中应用其他标签库,prefix指定前缀。
3. 带格式打印错误信息: s:fielderror 。
<
s:propertyvalue="
errors.name[0]"/><!--这样拿出来的直接是自己设定的错误消息,没有带格式-->
<
s:debug
/>打印debug信息。
七、
访问WEB元素,IncludeModules模块包含
1. Web元素:
request,
session,
application,
HttpServletRequest,
HttpSession,
ServletContext。
2. Struts在http请求和map对象之间建立了连接,因此我们可以拿到request、session、application对象。
<s:propertyvalue=
“#request.request1”/>加#号后与debug中的对应。
3. 本来是自己控制的, 交给别人控制了.就是
控制反转.Spring中就是通过配置文件来进行控制的。
4. 就是在Struts.xm中包含其他xml文件:<includefile=“l.xml”>
意义:多人开发时,自己写自己的配置文件。Struts中只写公用的。防止冲突。
八、
Action其他
1. DefaultAction: <
default-action-ref name="default"/>
就是当找不到时,默认使用的Action.即使当输入的是不存在的Action时,他仍然能找到该Action.
作用: 当用户输入错误时,可以指定默认的错误页,或者指定为主页。
2. 关于查找错误: 排除环境问题,拷到其他电脑、设备。配置问题。